#AEAI05006. 单次抓取经验更新
单次抓取经验更新
题目描述
机器人完成了一次抓取相关经验 (s, a, r, sn),具身智能部希望用它更新 Q 表中的一个条目。你需要按 Q-learning 的单次 TD 更新规则,先在后继状态选择估计最优的下一动作,再输出 TD 目标、TD 误差和更新后的 Q 值。
后继动作只从输入给定的合法动作中选择;终止经验不再查看后继动作。
输入格式
第一行输入两个整数 N A,表示状态数和每个状态的动作数。
接下来输入 N 行,每行 A 个实数,表示当前 Q 表。
接下来一行输入:
s a r sn terminal alpha gamma
表示本次经验的当前状态、当前动作、即时奖励、后继状态、是否终止、学习率和折扣因子。
接下来一行输入 A 个整数,表示后继状态下每个动作是否合法。
最后一行输入 A 个实数,表示每个动作的风险。
状态和动作编号均为 1-based。
输出格式
输出一行:
next_action target td updated
其中 target、td、updated 均保留 6 位小数。若终止或后继状态没有合法动作,next_action 输出 -1。
判定规则
若 terminal = 1,则 target = r,后继动作记为 -1。
否则,从后继状态 sn 的合法动作中选择 Q 值最大的动作;若并列,取风险更小者;若仍并列,取动作编号更小者。若没有合法动作,后继价值为 0。
TD 目标、误差和更新值分别为:
target = r + gamma * best_next_Q
td = target - Q[s][a]
updated = Q[s][a] + alpha * td
使用标准输出比较,浮点数保留 6 位小数。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 单次经验可能是成功、失败、终止或非终止转移,
target的计算分支不同。 - 学习率、折扣因子和奖励可能为 0 或负数,隐藏数据会检查 TD 误差的符号和格式。
- 终止经验或后继无合法动作时
next_action=-1且未来价值为 0;并列按 Q、风险、动作编号。
样例
输入样例 1
2 3
1 2 0
3 1 4
1 2 5 2 0 0.5 0.9
1 1 1
0.2 0.1 0.3
输出样例 1
3 8.600000 6.600000 5.300000
输入样例 2
1 2
1 2
1 1 -3 1 1 1 0.9
1 1
0 0
输出样例 2
-1 -3.000000 -4.000000 -3.000000