4. 觅食线:已完成的部分
1.2k 字 ·
源文件 SESSION_STATE.md 第 95 行起 ·
other
#4.1 core/envs/foraging.py ✅ 通过自检
极简觅食环境。奖励只有两条规则,无手工 shaping(用户原则):
吃到食物 +1.0
时限内没吃到 -1.0 ← "感受痛苦" = 时间压力
其余 0.0动作 4 个(上下左右)。观测是渲染出的画面(上帝视角),不是坐标。
探索能力量化(关键数字):
网格 时限 随机探索吃到概率 平均吃到步数
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 ✅ 通过自检
新的屏幕布局(网格世界用,与算术任务的布局并列):
网格 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。这符合"不给它答案"。
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)而崩)