4. 觅食线:已完成的部分

1.2k 字 · 源文件 SESSION_STATE.md 第 95 行起 · other

#4.1 core/envs/foraging.py ✅ 通过自检

极简觅食环境。奖励只有两条规则,无手工 shaping(用户原则):

text
吃到食物      +1.0
时限内没吃到  -1.0     ← "感受痛苦" = 时间压力
其余          0.0

动作 4 个(上下左右)。观测是渲染出的画面(上帝视角),不是坐标。

探索能力量化(关键数字):

text
网格   时限   随机探索吃到概率   平均吃到步数
  8   120         55.9%            47
 12   120         27.7%            52
 16   120         16.4%            55     ← 信号存在但稀疏
 24   120          7.9%            59

#4.2 core/envs/grid_screen.py ✅ 通过自检

新的屏幕布局(网格世界用,与算术任务的布局并列):

text
网格 16×16 格,每格 4px  ->  网格区 64×64
状态条 16px 高           ->  总屏幕 64×80
帧维度 FRAME_DIM = 20480(原算术 16384 的 1.25x)
动作 5 个:ACT_STAY=0, ACT_UP, ACT_DOWN, ACT_LEFT, ACT_RIGHT

关键优化:智能体与食物用不同亮度画在同一通道(省掉一整个通道)。 亮度:智能体 1.0,食物 0.65,网格线 0.10。 状态条画:上一步动作(实心=选中)、"吃到"时下半整条亮、剩余时间条。

#4.3 core/envs/forage_agent.py ⚠️ 部分可用

actor-critic 结构:小卷积编码器 → CfC 循环核 → actor 头(5) + critic 头(1)。

设计原则(关键):稠密学习信号来自 critic 自己学出的 V, 不是手工 shaping。这符合"不给它答案"。

text
A(s,a) = G_t - V(s_t)
L_actor  = -log π(a|s) · A(s,a)
L_critic = (G_t - V(s_t))²
G_t 只含环境给的 +1/-1

已知问题:

  • 用的是单步近似(model.step 而不是按时间展开)—— 会削弱时序学习
  • 采样时按 done 重置隐藏状态,训练时没有重置(不一致)
  • 尚未成功跑通一次完整训练(最后一次因模型没 .to(DEV) 而崩)

← 返回《SESSION_STATE.md》目录