#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

其中 targettdupdated 保留 6 位小数。若没有实际后继动作,actual_action 输出 -1

判定规则

先筛出满足 legal = 1risk <= risk_limit 的候选动作。

terminal = 1 或候选集合为空,actual_action = -1target = reward

否则按如下规则确定实际后继动作:

  • mode = 2safe_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 = -1target = 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