五维储备统一动态系统模型 v2.0 Final
运动(Fitness-Fatigue)× 饮食(非线性 DQS)× 睡眠(恢复动力学)· 三驱动 · 五储备 · 多时间常数 Impulse-Response 框架 · Keep 大健康 AI 引擎 · 2026 年 4 月
心肺储备
τA: 45/28/90d | τF: 7/2/7d
肌肉储备
τA: 60/21/45d | τF: 4/1/4d
代谢储备
τA: 30/21/30d | τF: 3/1/3d
免疫储备
τA: 20/14/21d | τF: 3/2/3d
神经储备
τA: 14/21/14d | τF: 2/1/2d
τ 顺序:运动 / 饮食 / 睡眠(单位:天)
① 运动模型 — Fitness-Fatigue 双因素 · 多储备 · 非线性免疫
② 饮食模型 — 非线性 DQS(倒U型 · 抛物线 · 阈值毒性 · 饱和型)
③ 睡眠模型 — 适应实现引擎 · SQF 疲劳修正 · 睡眠债务追踪
一、三驱动模型核心定位
三个模型共享同一套状态层(五大储备双池),在不同时间维度、通过不同机制持续更新储备。没有任何一个维度可以单独代替其他两个。
① 运动模型 Exercise
核心角色最强适应刺激源
主要机制Fitness-Fatigue 双因素
输入运动类型·时长·RPE·心率
输出AdaptGain + FatigueCost
关键非线性免疫 J 曲线(倒U型)
被修正饮食 RecoveryFactor × 睡眠 AdaptRealization
② 饮食模型 Diet
核心角色持续营养基底 + 运动放大器
主要机制非线性 DQS 日度更新
输入九类营养质量评分
输出A_j 营养贡献 + RecoveryFactor
关键非线性蛋白质倒U型 · 热量抛物线
微量营养素毒性阈值
输出至→ 运动 RecoveryFactor(明日生效)
③ 睡眠模型 Sleep
核心角色适应实现引擎 + 疲劳清除器
主要机制三机制(A贡献·F修正·AdaptRealization)
输入八类睡眠质量指标 + 睡眠债务
输出A_j 基线维持 + F_j 修正率 + AdaptRealization
关键非线性睡眠债务累积惩罚 · 睡前行为乘子
输出至→ 当日运动 AdaptRealization(今日生效)
三驱动的优先级关系(当资源有限时)
睡眠 > 饮食 > 运动:运动带来的储备增益 = 运动刺激 × RecoveryFactor(饮食决定)× AdaptRealization(睡眠决定)。
睡眠不足会让运动"白做"(Fatigue 积累但 Adaptation 不实现);营养不足会让运动收益打折(RecoveryFactor < 1.0)。
只有三者协同,才能最大化储备积累效率。
二、统一架构图
三类输入通过各自的评分/量化模块,经权重矩阵映射至五大储备的适应池(A_j)和疲劳池(F_j),最终输出储备分和状态分。虚线箭头为跨模型调节效应。
三、共享状态层 — 五大储备双池系统
三个模型共享同一个状态对象 state,包含五大储备的适应池 A_j(长期能力)和疲劳池 F_j(短期消耗)。每日运行三个模型,三者对同一 state 进行叠加更新。
# ── 共享状态层(整个系统的核心数据结构)─────────────────────────────
state = {
"adapt": {"cardio": A_c, "muscle": A_m, "metabolic": A_me, "immune": A_i, "neural": A_n},
"fatigue": {"cardio": F_c, "muscle": F_m, "metabolic": F_me, "immune": F_i, "neural": F_n},
}
# 储备分(长期能力积累)
Reserve_j(t) = A_j(t) # 只看适应池
# 状态分(今日可用能力)
Readiness_j(t) = A_j(t) − F_j(t) # 适应 − 当前疲劳
# ── 通用更新方程(三个模型共用此结构)─────────────────────────────────
# 适应池:昨日保留 + 今日正向刺激
A_j(t) = A_j(t-1) × exp(−1/τ_j^A) + k_j^A × Stimulus_j(t)
# 疲劳池:昨日保留 + 今日负向成本
F_j(t) = F_j(t-1) × exp(−1/τ_j^F) + k_j^F × Cost_j(t)
# 三模型每日叠加(顺序执行,累积到同一 state):
# 早晨:睡眠模型 → A_j 基线维持 + F_j 疲劳清除 + AdaptRealization
# 白天:运动模型 → A_j 适应增益 × RecovFactor × AdaptReal + F_j 疲劳成本
# 晚间:饮食模型 → A_j 营养贡献 + RecoveryFactor(供明日运动用)
状态层示例(某用户单日快照)
心肺储备
Adapt A_c68.4
Fatigue F_c12.1
Readiness56.3
肌肉储备
Adapt A_m72.1
Fatigue F_m18.6
Readiness53.5
代谢储备
Adapt A_me61.8
Fatigue F_me8.3
Readiness53.5
免疫储备
Adapt A_i58.2
Fatigue F_i5.4
Readiness52.8
神经储备
Adapt A_n55.7
Fatigue F_n9.8
Readiness45.9
储备分(Adapt)代表长期训练积累;状态分(Readiness)代表今日可用能力;两者可以背离(储备高但疲劳大 → 状态差)。
四、三模型交互效应(跨模型调节机制)
三个模型之间存在强耦合。最核心的关系是乘法效应:运动刺激的实际适应收益,由饮食和睡眠同时决定。单独优化任何一个维度,效率都会大打折扣。
饮食 → 运动:RecoveryFactor
RecoveryFactor = 1.0
# 蛋白质 DQS ≥ 80 → += 0.15
# 蛋白质 DQS < 50 → -= 0.15
# 微量营养素 ≥ 75 → += 0.10
# 热量亏缺 < -300 → -= 0.15
# 热量亏缺 < -500 → -= 0.30
# 热量盈余 > +800 → -= 0.10
# 酒精 ≥ 2单位 → -= 0.20
# 酒精 ≥ 4单位 → -= 0.40
范围:[0.30, 1.40]
AdaptGain = k_A × Load × RecoveryFactor
睡眠 → 运动:AdaptRealization(适应实现率)
AdaptRealization = max(0.40, min(1.20, SQS/100 × 1.20))
# SQS = 100 → AdaptReal = 1.20(超额实现)
# SQS = 80 → AdaptReal = 0.96(轻微打折)
# SQS = 60 → AdaptReal = 0.72(明显打折)
# SQS = 40 → AdaptReal = 0.48(严重打折)
# SQS < 33 → AdaptReal = 0.40(最低保底)
AdaptGain = k_A × Load × RecFactor × AdaptRealization
睡眠 → 疲劳池:SQF 疲劳清除修正
# 疲劳衰减由睡眠质量动态调节
sqf_j = (SQS/100) × sleep_fatigue_weight[j]
# 心肺 sleep_fatigue_weight = 0.85
# 肌肉 sleep_fatigue_weight = 0.90
# 代谢 sleep_fatigue_weight = 0.80
# 免疫 sleep_fatigue_weight = 0.95
# 神经 sleep_fatigue_weight = 1.00
F_j(t) = F_j(t-1) × exp(−sqf_j / τ_j^F_sleep)
# SQS=100:疲劳清除率最大
# SQS<40:疲劳不仅不清除,还会额外增加
综合乘法效应
# 三因素完整乘法关系
实际 AdaptGain_j =
k_j^A × Load_j
× RecoveryFactor (饮食决定)
× AdaptRealization (睡眠决定)
# 典型场景对比(同等运动负荷):
优质睡眠 + 优质饮食:× 1.20 × 1.20 = × 1.44(+44%)
差睡眠 + 差饮食: × 0.40 × 0.70 = × 0.28(−72%)
# 结论:三者协同 vs 仅运动,效率差最大 5 倍
五、统一公式体系
三个模型共用相同的指数衰减 Impulse-Response 框架,仅在"刺激/贡献的来源"和"时间常数"上有所不同。
# ═══════════════════════════════════════════════════════════════════
# 统一更新方程(每日,对每个储备 j 分别执行)
# ═══════════════════════════════════════════════════════════════════
# ① 睡眠贡献(早晨第一步)─────────────────────────────────────────────
s_j = Σ SQS_subScore[k] × W_sleep[j][k] # SQS 子分 × 睡眠-储备权重矩阵
A_j(t) += A_j(t-1) × exp(−1/τ_j^A_sleep) + k_j^A_sleep × s_j
F_j(t) = F_j(t-1) × exp(−sqf_j / τ_j^F_sleep) # SQF 动态修正疲劳衰减
if SQS < 40: F_j(t) += k_j^F_sleep × (40 − SQS) / 2 # 差睡眠额外增加疲劳
AdaptRealization = max(0.40, min(1.20, SQS/100 × 1.20))
# ② 运动贡献(白天,若有运动)─────────────────────────────────────────
L_j = BaseLoad × W_sport[type][j] × UserFactor_j # 多维运动负荷向量
# 免疫特殊处理(J 曲线)
AdaptGain_immune = a × L_immune × exp(−b × L_immune) × RecovFactor × AdaptReal
AdaptGain_j = k_j^A_ex × L_j × RecovFactor × AdaptReal # 其他储备
FatigueCost_j = k_j^F_ex × L_j × StressFactor
A_j(t) += A_j(t-1) × exp(−1/τ_j^A_ex) + AdaptGain_j
F_j(t) += F_j(t-1) × exp(−1/τ_j^F_ex) + FatigueCost_j
# ③ 饮食贡献(晚间)──────────────────────────────────────────────────
D_j = Σ DQS[cat]_nonlinear × W_diet[cat][j] # 非线性 DQS × 饮食-储备权重矩阵
Drain_j = Σ NegFactor[neg] × W_neg[neg][j] # 酒精/超加工/过量糖
NetDiet_j = D_j − Drain_j
if NetDiet_j >= 0:
A_j(t) += A_j(t-1) × exp(−1/τ_j^A_diet) + k_j^A_diet × NetDiet_j
F_j(t) = F_j(t-1) × exp(−1/τ_j^F_diet)
else:
A_j(t) = A_j(t-1) × exp(−1/τ_j^A_diet)
F_j(t) += F_j(t-1) × exp(−1/τ_j^F_diet) + k_j^F_diet × |NetDiet_j|
# ④ 当日最终状态 ───────────────────────────────────────────────────────
Reserve_j(t) = A_j(t) # 储备分
Readiness_j(t) = A_j(t) − F_j(t) # 状态分
Score_j(t) = sigmoid(A_j, Baseline_j, Scale_j) → [0, 100]
六、动力学参数汇总表(三模型 × 五储备)
τ_A 控制适应积累速度(越大越慢);τ_F 控制疲劳消退速度(越小消退越快);k_A/k_F 控制每单位刺激的实际影响强度。
| 储备 |
① 运动模型 |
② 饮食模型 |
③ 睡眠模型 |
|
τ_A(d) | τ_F(d) |
k_A | k_F |
τ_A(d) | τ_F(d) |
k_A | k_F |
τ_A(d) | τ_F(d) |
k_A | k_F |
| 心肺储备 |
45 | 7 | 0.010 | 0.030 |
28 | 2 | 0.004 | 0.015 |
90 | 7 | 0.003 | 0.012 |
| 肌肉储备 |
60 | 4 | 0.010 | 0.035 |
21 | 1 | 0.008 | 0.020 |
45 | 4 | 0.005 | 0.018 |
| 代谢储备 |
30 | 3 | 0.012 | 0.025 |
21 | 1 | 0.006 | 0.018 |
30 | 3 | 0.004 | 0.015 |
| 免疫储备 |
20 | 3 | J曲线 | 0.030 |
14 | 2 | 0.007 | 0.016 |
21 | 3 | 0.006 | 0.020 |
| 神经储备 |
14 | 2 | 0.004 | 0.040 |
21 | 1 | 0.005 | 0.018 |
14 | 2 | 0.008 | 0.025 |
注:运动模型免疫储备使用 J 曲线 f(L) = a·L·exp(−b·L)(a=0.006, b=0.01),而非线性 k_A。
所有参数均为产品初始默认值,实际应通过用户数据进行个体化校准。
七、每日执行顺序 & 完整伪代码
三模型每日按时序执行:睡眠(早)→ 运动(午)→ 饮食(晚)。前一个模型的输出会影响后续模型的参数。
🌙 早晨(醒后)
睡眠模型
读取昨晚睡眠数据,计算 SQS,更新 A_j 基线 + F_j 疲劳清除。输出 AdaptRealization 系数供当日运动使用。
→
☀️ 白天(运动后)
运动模型
若有运动,计算 BaseLoad → 五维刺激向量 → 更新 A_j 和 F_j。使用饮食的 RecoveryFactor 和睡眠的 AdaptRealization 作为乘法修正。
→
🍽️ 晚间(饮食记录后)
饮食模型
分析今日饮食,计算非线性 DQS → 更新 A_j 营养贡献。输出 RecoveryFactor 存入明日运动参数。
import math
# ── 三模型完整每日更新流程 ─────────────────────────────────────────────
def daily_update(state, today_data, carry):
"""
state: 共享五储备双池状态 { adapt: {...}, fatigue: {...} }
today_data: { sleep: {...}, workout: {...}, diet: {...}, body_weight: float }
carry: 跨日持久变量 { sleep_debt: float, recovery_factor: float }
"""
RESERVES = ["cardio", "muscle", "metabolic", "immune", "neural"]
# ══ 步骤一:睡眠模型(早晨) ════════════════════════════════════════
sleep = today_data["sleep"]
sqs, sub_scores = compute_sqs(sleep, carry["sleep_debt"])
adapt_realization = max(0.40, min(1.20, sqs / 100 * 1.20))
for r in RESERVES:
s_j = sum(sub_scores[k] * SLEEP_RESERVE_WEIGHTS[r][k] for k in sub_scores)
decay_a = math.exp(-1 / TAU_A_SLEEP[r])
state["adapt"][r] = state["adapt"][r] * decay_a + K_A_SLEEP[r] * s_j
sqf_j = (sqs / 100) * SLEEP_FATIGUE_WEIGHT[r]
state["fatigue"][r] = state["fatigue"][r] * math.exp(-sqf_j / TAU_F_SLEEP[r])
if sqs < 40:
state["fatigue"][r] += K_F_SLEEP[r] * (40 - sqs) / 2
h = sleep["duration_h"]
carry["sleep_debt"] = (carry["sleep_debt"] + max(0, 8.0 - h)
- max(0, (h - 8.0) * 0.3))
carry["sleep_debt"] = max(0, carry["sleep_debt"])
# ══ 步骤二:运动模型(白天,若有运动) ══════════════════════════════
recovery_factor = carry["recovery_factor"] # 来自昨日饮食模型
if "workout" in today_data and today_data["workout"]:
wo = today_data["workout"]
base_load = wo["duration_min"] * wo.get("rpe", 5)
stress_factor = wo.get("stress_factor", 1.0)
for r in RESERVES:
w = SPORT_WEIGHTS[wo["type"]][r]
load = base_load * w * wo.get("user_factor", {}).get(r, 1.0)
if r == "immune": # J 曲线(倒 U 型)
adapt_gain = (0.006 * load * math.exp(-0.01 * load)
* recovery_factor * adapt_realization)
else:
adapt_gain = (K_A_EX[r] * max(load, 0)
* recovery_factor * adapt_realization)
fatigue_cost = K_F_EX[r] * load * stress_factor
state["adapt"][r] = (state["adapt"][r]
* math.exp(-1 / TAU_A_EX[r]) + adapt_gain)
state["fatigue"][r] = (state["fatigue"][r]
* math.exp(-1 / TAU_F_EX[r]) + fatigue_cost)
# ══ 步骤三:饮食模型(晚间) ════════════════════════════════════════
meals = today_data["diet"]
bw = today_data["body_weight"]
dqs = compute_dqs_nonlinear(meals, bw) # 非线性 DQS 评分
for r in RESERVES:
d_pos = sum(dqs[c] * DIET_W_POS[c][r] for c in DIET_W_POS)
d_drain = (meals.get("alcohol_units", 0) * 10 * DIET_W_NEG["alcohol"][r] +
meals.get("ultra_proc_ratio", 0) * 60 * DIET_W_NEG["ultra"][r] +
max(0, meals.get("added_sugar_g", 0) - 25) * 2 * DIET_W_NEG["sugar"][r])
net = d_pos - d_drain
if net >= 0:
state["adapt"][r] = (state["adapt"][r]
* math.exp(-1 / TAU_A_DIET[r]) + K_A_DIET[r] * net)
state["fatigue"][r] = state["fatigue"][r] * math.exp(-1 / TAU_F_DIET[r])
else:
state["adapt"][r] = state["adapt"][r] * math.exp(-1 / TAU_A_DIET[r])
state["fatigue"][r] = (state["fatigue"][r]
* math.exp(-1 / TAU_F_DIET[r]) + K_F_DIET[r] * abs(net))
carry["recovery_factor"] = compute_recovery_factor(dqs, meals)
# ══ 步骤四:输出当日结果 ════════════════════════════════════════════
output = {
"sqs": sqs,
"adapt_realization": adapt_realization,
"recovery_factor": carry["recovery_factor"],
"sleep_debt": carry["sleep_debt"],
"reserves": {r: {"reserve": state["adapt"][r],
"fatigue": state["fatigue"][r],
"readiness": state["adapt"][r] - state["fatigue"][r]}
for r in RESERVES},
"overall_readiness": sum(state["adapt"][r] - state["fatigue"][r]
for r in RESERVES) / len(RESERVES)
}
return state, carry, output
八、产品输出设计
每日模型运行后,系统应向用户输出三层信息:数值层(各储备分数)、解读层(状态文字)、行动层(个性化建议)。
每日系统 JSON 输出结构
{
"date": "2026-04-15",
"sqs": 78.4, # 睡眠质量分
"adapt_realization": 0.94, # 今日运动适应实现率(睡眠决定)
"recovery_factor": 1.18, # 今日运动放大系数(昨日饮食决定)
"sleep_debt": 1.2, # 累积睡眠债务(小时)
"reserves": {
"cardio": {"reserve": 68.4, "fatigue": 12.1, "readiness": 56.3, "trend": "+0.8"},
"muscle": {"reserve": 72.1, "fatigue": 18.6, "readiness": 53.5, "trend": "-1.2"},
"metabolic": {"reserve": 61.8, "fatigue": 8.3, "readiness": 53.5, "trend": "+0.3"},
"immune": {"reserve": 58.2, "fatigue": 5.4, "readiness": 52.8, "trend": "+0.1"},
"neural": {"reserve": 55.7, "fatigue": 9.8, "readiness": 45.9, "trend": "-0.6"}
},
"overall_readiness": 52.4,
"insights": {
"bottleneck": "neural", # 当前最低 Readiness 的储备
"risk_flags": ["muscle_overload"], # 肌肉疲劳持续 3d 未恢复
"diet_gap": "protein_low", # DQS 蛋白质 < 50
"sleep_advice": "debt_accumulating" # 睡眠债务累积
},
"recommendations": [
"今日优先:休息 + 轻松散步(神经疲劳高)",
"营养提醒:蛋白质不足,肌肉恢复受限 (RecovFactor=0.85)",
"明日建议:若睡眠改善,可安排 Zone 2 有氧(心肺刺激优先)",
"睡眠优先级:连续 2 夜差睡眠,AdaptRealization 下降至 0.72"
]
}
九、各模型主要非线性机制汇总
每个模型都包含超越简单"刺激→响应"的非线性特性,这是模型科学性的核心。
① 运动模型的非线性
免疫 J 曲线:适量运动提高免疫储备,过量反而消耗。
immune_gain = a×Load×exp(−b×Load)
峰值在 Load = 1/b 时取得
低负荷:刺激不足; 超高负荷:净负向
瑜伽/恢复类运动:神经权重可为负(主动减少神经疲劳,而非增加)。
个体修正:新手 vs 老手、疲劳状态、HRV 水平影响 k_A 和 k_F。
② 饮食模型的非线性
蛋白质倒U型:不足和过量均扣分,最优 1.8g/kg。
score = 100×exp(−½×((x−1.8)/0.6)²)
1.8g→100分; 0.6g→14分; 3.0g→14分
热量抛物线:亏缺和盈余都有害,偏差=0最优。
微量营养素毒性阈值:VitA/D/铁/锌等超过 UL 后毒性惩罚。
Omega-3 倒U型:过量(>5g)有促出血风险,同样下分。
③ 睡眠模型的非线性
睡眠债务累积:债务惩罚 SQS 最多 25 分,且偿还比获取慢(非线性补偿)。
如果 h < 8: debt += (8−h)
如果 h > 8: debt −= (h−8)×0.3
# 多睡 1h 只能偿还 0.3h 债务
睡前行为乘子:睡前行为对 SQS 有最高 35% 的乘法修正。
差睡眠双向惩罚:SQS<40 时不仅不清除疲劳,还额外增加疲劳(炎症因子升高)。
统一模型的产品落地原则
1. 不要说"运动越多越好":运动带来的储备增益取决于 RecoveryFactor × AdaptRealization,没有睡眠和饮食的支撑,高强度运动只积累疲劳而不积累适应。
2. 展示两种分数:储备分(A_j,长期能力)和状态分(A_j − F_j,今日可用)。两者必须同时展示,因为高储备 + 高疲劳 → 建议今天休息,而不是"你很强,继续冲"。
3. 优先级推荐逻辑:当神经/免疫 Readiness 持续下降时,系统应明确建议"今天的最高收益行为是睡好觉 + 吃足蛋白质,而不是更多运动"。
4. 非线性防误导:蛋白质、热量、Omega-3 都有最优区间,产品展示时应同时标注"不足"和"过量"的警告,不能只展示"还差多少才够"。
5. 三模型协同增益:同等运动负荷下,优质饮食 + 优质睡眠可以让实际适应收益提高 44%(×1.44);而差睡眠 + 差饮食可以让收益降低 72%(×0.28)。这是产品最有力的行为激励依据。
Keep 大健康 AI 引擎 · 五维储备统一动态系统模型 v2.0 Final · 2026 年 4 月
子文档:运动模型 (v2.0) · 饮食模型 (v2.1 非线性) · 睡眠模型 (v2.0) · 架构总览 (v2.1)