#AEAI05007. 多阶段恢复经验学习
多阶段恢复经验学习
题目描述
在恢复训练中,机器人会连续收到多条经验。具身智能部要求你按输入顺序原地更新 Q 表:每条合法经验立即影响后续经验的计算。全部经验处理完后,查询某个 Q 值,并给出查询状态下当前策略会选择的动作。
若某条经验中的当前动作在当前状态不合法,则跳过这条经验,不更新 Q 表。
输入格式
第一行输入两个整数 N A,表示状态数和动作数。
接下来输入 N 行,每行 A 个实数,表示初始 Q 表。
接下来一行输入两个实数 alpha gamma,表示学习率和折扣因子。
接下来输入 N 行,每行 A 个整数,表示每个状态下各动作是否合法。
接下来一行输入 A 个实数,表示每个动作的风险。
接下来输入整数 M,表示经验条数。
接下来 M 行,每行输入:
s a r sn terminal
最后一行输入两个整数 qs qa,表示要查询的状态和动作。
状态和动作编号均为 1-based。
输出格式
输出一行:
Q_qs_qa best_action best_value
三个数中 Q 值和最优动作价值保留 6 位小数。若查询状态没有合法动作,best_action = -1,best_value = 0.000000。
判定规则
对每条未被跳过的经验执行一次 Q-learning 更新:
target = r + gamma * best_next_Q
Q[s][a] = Q[s][a] + alpha * (target - Q[s][a])
若 terminal = 1,或后继状态 sn 没有合法动作,则 best_next_Q = 0。
选择后继最优动作时,先比较 Q 值更大者,再比较风险更小者,最后比较动作编号更小者。
所有经验按输入顺序原地更新。使用标准输出比较,浮点数保留 6 位小数。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 多阶段恢复可能在任意阶段终止,恢复奖励和失败惩罚不要重复计入。
- 后继状态动作集合可能为空,风险边界和终止标记要优先于普通最大 Q 选择。
- 非法经验要跳过;经验按输入顺序原地更新,后续经验会看到前面的更新结果。
样例
输入样例 1
2 2
0 0
1 2
0.5 0.9
1 1
1 1
0.2 0.1
2
1 1 5 2 0
2 2 -1 1 1
1 1
输出样例 1
3.400000 1 3.400000
输入样例 2
1 2
1 2
1 1
1 0
0.1 0.2
1
1 2 5 1 0
1 2
输出样例 2
2.000000 1 1.000000