#AEAI06013. 风险超限下的安全回退决策
风险超限下的安全回退决策
题目描述
机器人在执行过程中如果风险、距离、能量、载荷或禁入区状态不满足安全约束,就必须规划有限步回退。若当前状态已经足够安全,则可以继续执行;否则要在给定动作中找一条能回到安全状态的路径。
初始字段依次为:
value risk dist energy return_energy load max_load fail max_fail forbidden area safe
继续执行的硬约束为:risk <= max_risk、dist >= min_dist、energy - return_energy >= reserve、load <= max_load、fail < max_fail、forbidden=0。若这些条件成立,直接输出 CONTINUE,其中不额外要求 safe=1。
否则进行最多 hmax 步的回退搜索。搜索状态为 (value, risk, dist, energy, load, fail, forbidden, area, safe)。安全状态要求上述风险、距离、能量、载荷、失败次数、禁入区约束全部满足,且 safe=1。动作字段中 kind=0 或 kind=6 不参与回退;若当前风险大于 emergency,只能执行 kind=4 或 kind=5;若当前在禁入区,不能执行 kind 为 0,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_area 或 forbidden_after 为负数时表示对应字段保持不变。
输出格式
若初始状态可继续执行,输出:
CONTINUE risk energy load area safe
若无法在步数限制内回到安全状态,输出:
SAFE_STOP
否则输出:
len aid1 aid2 ... risk energy cost SAFE_STATE area safe
cost 保留 6 位小数。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
new_area或forbidden_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