#AEAI05005. 抓取准备状态的 Bellman 更新
抓取准备状态的 Bellman 更新
题目描述
具身智能部正在评估“抓取准备”状态下一步该做什么。每个候选动作会把机器人带到一个后继状态,并获得一个即时奖励。你需要对当前状态做一次 Bellman 最优更新,输出更新后的最优价值、最优动作和对应后继状态。
若当前状态本身已经是终止状态,或者没有任何可执行动作,则本次更新结果为 0,并输出无动作标记。
输入格式
第一行输入两个整数 N s,表示状态总数和当前状态编号。
第二行输入实数 gamma,表示折扣因子。
第三行输入 N 个实数,表示状态价值 V_1 ... V_N。
第四行先输入整数 T,随后输入 T 个终止状态编号。
接下来输入整数 A,表示候选动作数。
接下来 A 行,每行输入:
aid feasible sn reward risk
表示动作编号、是否可执行、后继状态、即时奖励和风险。
状态和动作编号均为 1-based。
输出格式
输出一行:
value aid sn
其中 value 保留 6 位小数。若当前状态终止或无可执行动作,输出:
0.000000 -1 -1
判定规则
对每个可执行动作,计算:
value = reward + gamma * next_value
若 sn 是终止状态,则 next_value = 0;否则 next_value = V_sn。
选择 value 最大的动作;若并列,取风险更小者;若仍并列,取动作编号更小者。
使用标准输出比较,浮点数保留 6 位小数。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- Bellman 更新会测试终止状态、无合法后继动作、多个后继动作价值并列等情况。
- 只更新题目指定的状态动作对,其他 Q 值不参与输出;浮点结果保留 6 位小数。
- 当前状态终止或没有可执行动作时输出
0.000000 -1 -1;后继终止状态的后继价值按 0。
样例
输入样例 1
3 1
0.9
1 2 3
1 3
2
1 1 2 5 0.2
2 1 3 10 0.5
输出样例 1
10.000000 2 3
输入样例 2
2 1
0.9
1 2
0
1
1 0 2 5 0
输出样例 2
0.000000 -1 -1