#AEAI05013. 安全约束下的奖励方案筛选

安全约束下的奖励方案筛选

题目描述

具身智能部正在比较多套奖励方案。每套方案会给候选执行计划中的进展、能耗、风险、重复动作、成功、失败恢复等事件赋不同权重,同时带有风险预算和碰撞约束。你需要在所有“奖励方案 + 候选计划”的组合中筛掉不安全组合,计算折扣回报,并输出全局最优组合。

若没有任何组合满足安全约束,机器人执行输入给定的安全停止动作。

输入格式

第一行输入两个整数 M P,表示奖励方案数和候选计划数。

第二行输入:

gamma stop_action stop_return

表示折扣因子、安全停止动作编号和安全停止回报。

接下来 M 行,每行输入一套奖励方案:

sid succ time_pen ecoef rcoef rep_pen rec_reward pcoef budget allow_col

分别表示方案编号、终端成功奖励、每步时间惩罚、能耗系数、风险系数、重复动作惩罚、失败后恢复奖励、进展系数、风险预算和是否允许碰撞。

接下来输入 P 个候选计划。每个计划先输入:

pid first T

表示计划编号、计划首动作和事件数。随后输入 T 条事件,每条事件为:

progress energy risk repeat success fail collision recover terminal

输出格式

若存在可行组合,输出:

sid pid first return

其中 return 保留 6 位小数。

若没有可行组合,输出:

STOP 0 stop_action stop_return

stop_return 保留 6 位小数。

判定规则

对每套奖励方案分别评估每个候选计划。计划事件按顺序模拟,遇到 terminal = 1 后停止继续读取该计划的后续效果;输入中的事件仍已在读取阶段给出。

若事件发生碰撞,碰撞次数加 1。若 allow_col = 0,或碰撞次数超过 1,则该组合不可行。

累计风险 risk_sum 每步加上事件的 risk;若 risk_sum > budget,该组合不可行。

每步基础奖励为:

reward = pcoef * progress - time_pen - ecoef * energy - rcoef * risk

repeat = 1,再减去 rep_pen。若 success = 1terminal = 1,再加上 succ。若出现 fail = 1,记录“已失败”;之后遇到 recover = 1 时,加上 rec_reward 并清除失败记录。

计划回报为各步奖励的折扣和,第一步折扣系数为 1,之后每步乘以 gamma

同一奖励方案下,选择回报最大的可行计划;若并列,取累计风险更小者;若仍并列,取计划编号更小者,再取首动作更小者。全局比较各方案的最佳计划时,先取回报更大者;若并列,取方案风险预算更小者;若仍并列,取方案编号更小者。

使用标准输出比较,浮点数保留 6 位小数。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • 所有“奖励方案 + 候选计划”组合都可能被风险预算或碰撞约束筛掉,此时要输出无解分支。
  • 折扣回报可能并列,比较顺序必须覆盖方案编号、计划编号和题面要求的后续关键字。
  • 风险累计等于预算可行,超过才淘汰;事件遇到 terminal=1 后停止模拟该计划。

样例

输入样例 1

1 2
0.9 9 -5
1 10 1 1 2 1 3 1 5 0
1 1 2
1 0 1 0 0 0 0 0 0
1 1 0 0 1 0 0 0 1
2 2 1
0 0 10 0 0 0 0 0 1

输出样例 1

1 1 1 6.100000

输入样例 2

1 1
1 7 -3
1 10 1 1 1 1 1 1 1 0
1 5 1
0 0 5 0 0 0 0 0 1

输出样例 2

STOP 0 7 -3.000000