#AEAI05008. 风险边缘的在线回退
风险边缘的在线回退
题目描述
机器人在风险边缘执行在线策略时,下一步动作不是离线最优动作,而是由输入指定的行为策略确定。你需要按 SARSA 的 on-policy TD 规则,先在后继状态确定实际会执行的下一动作,再更新当前经验对应的 Q 值。
候选下一动作必须合法,且风险不超过 risk_limit。若经验已经终止,或没有候选动作,则本次 TD 目标只包含即时奖励。
输入格式
第一行输入两个整数 N A,表示状态数和动作数。
接下来输入 N 行,每行 A 个实数,表示当前 Q 表。
接下来一行输入:
s a reward sn terminal alpha gamma
表示当前经验、是否终止、学习率和折扣因子。
接下来 A 行,每行输入:
legal risk
表示后继状态下每个动作是否合法及其风险。
最后一行输入:
mode rank safe_action risk_limit
表示行为策略模式、探索序号、安全动作和风险上限。
状态和动作编号均为 1-based。
输出格式
输出一行:
actual_action target td updated
其中 target、td、updated 保留 6 位小数。若没有实际后继动作,actual_action 输出 -1。
判定规则
先筛出满足 legal = 1 且 risk <= risk_limit 的候选动作。
若 terminal = 1 或候选集合为空,actual_action = -1,target = reward。
否则按如下规则确定实际后继动作:
- 若
mode = 2且safe_action在候选集合中,选择safe_action。 - 否则若
mode = 1,将候选动作按编号升序排列,选择下标rank mod 候选数量的动作。 - 其他情况选择后继状态 Q 值最大的候选动作;若并列,取动作编号更小者。
随后计算:
target = reward + gamma * Q[sn][actual_action]
td = target - Q[s][a]
updated = Q[s][a] + alpha * td
使用标准输出比较,浮点数保留 6 位小数。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
terminal = 1或候选集合为空时,actual_action = -1且target = reward。mode = 2时只有safe_action在候选集中才优先选择;mode = 1使用rank mod 候选数,候选动作按编号升序排列。- 风险等于
risk_limit合格;探索模式使用rank mod 候选数,候选动作先按编号升序排列。
样例
输入样例 1
2 3
1.0 2.0 0.0
3.0 1.0 4.0
1 2 5.0 2 0 0.5 0.9
1 0.2
1 0.1
1 0.3
0 1 3 0.5
输出样例 1
3 8.600000 6.600000 5.300000
输入样例 2
2 3
1.0 2.0 0.0
3.0 1.0 4.0
1 1 -1.0 2 0 0.4 0.9
1 0.2
1 0.1
1 0.3
2 1 2 0.5
输出样例 2
2 -0.100000 -1.100000 0.560000