#AEAI06013. 风险超限下的安全回退决策

风险超限下的安全回退决策

题目描述

机器人在执行过程中如果风险、距离、能量、载荷或禁入区状态不满足安全约束,就必须规划有限步回退。若当前状态已经足够安全,则可以继续执行;否则要在给定动作中找一条能回到安全状态的路径。

初始字段依次为:

value risk dist energy return_energy load max_load fail max_fail forbidden area safe

继续执行的硬约束为:risk <= max_riskdist >= min_distenergy - return_energy >= reserveload <= max_loadfail < max_failforbidden=0。若这些条件成立,直接输出 CONTINUE,其中不额外要求 safe=1

否则进行最多 hmax 步的回退搜索。搜索状态为 (value, risk, dist, energy, load, fail, forbidden, area, safe)。安全状态要求上述风险、距离、能量、载荷、失败次数、禁入区约束全部满足,且 safe=1。动作字段中 kind=0kind=6 不参与回退;若当前风险大于 emergency,只能执行 kind=4kind=5;若当前在禁入区,不能执行 kind0,1,2,3,5 的动作。

执行动作时,能量减少 energy_cost,且必须仍满足返航预留;风险更新为 max(0, risk + drisk),距离更新为 max(0, dist + ddist),载荷更新为 max(0, load + dload)。若载荷超过上限且动作不是 kind=5,该动作不可用。动作可改变区域、损失价值、增加代价、把 safe 置为 1,也可设置新的禁入区标记。

搜索优先选择风险更低的安全状态;同风险下剩余能量更高,再比较总代价、动作数和动作编号序列。

输入格式

第一行输入 12 个整数:

value risk dist energy return_energy load max_load fail max_fail forbidden area safe

第二行输入:

max_risk min_dist reserve emergency hmax

第三行输入动作数 a。接下来 a 行,每行输入:

aid kind drisk energy_cost ddist new_area dload value_loss action_cost to_safe forbidden_after

其中 new_areaforbidden_after 为负数时表示对应字段保持不变。

输出格式

若初始状态可继续执行,输出:

CONTINUE risk energy load area safe

若无法在步数限制内回到安全状态,输出:

SAFE_STOP

否则输出:

len aid1 aid2 ... risk energy cost SAFE_STATE area safe

cost 保留 6 位小数。

数据范围与测试提示

  • 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
  • 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
  • new_areaforbidden_after 为负数时表示该字段保持不变,不要当作真实区域或禁用标记。
  • 风险可能刚好达到或超过阈值,安全回退动作的选择和无解分支都要按固定顺序输出。
  • 初始继续判断中风险、距离和电量边界允许等号,但 fail < max_fail 是严格小于。

样例

输入样例 1

10 2 5 10 3 1 5 0 3 0 1 0
5 3 2 8 3
1
1 1 -1 1 1 -1 0 0 1 0 -1

输出样例 1

CONTINUE 2 10 1 1 0

输入样例 2

10 7 2 10 3 1 5 0 3 0 1 0
5 3 2 8 3
2
4 4 -3 2 2 2 0 1 3 1 0
5 5 0 1 0 -1 -1 2 1 0 -1

输出样例 2

1 4 4 8 3.000000 SAFE_STATE 2 1