#AEAI04020. 多轮反馈收敛与安全终止
多轮反馈收敛与安全终止
题目描述
具身智能部在闭环控制中会反复读取受扰动后的位置,再按比例控制命令修正到目标。给出初始位置、目标、控制参数、安全边界、球形障碍和每轮扰动,请模拟最多 max_round 轮反馈,并判断任务如何结束。
每一轮先把扰动加到当前位置得到观测位置 obs_pos,再根据 target - obs_pos 计算命令。命令为 kp * error,若长度超过 step_max 则缩放到长度 step_max。更新后的位置为 obs_pos + cmd。
每轮更新后计算目标误差 ferr 和到所有球形障碍的最小安全余量 safe = distance_to_center - radius - d_safe。若位置越界或 safe < 0,结果为 SAFE_STOP;若 ferr <= eps,结果为 SUCCESS;若连续若干轮误差没有变小,达到 stall_limit 后结果为 OSCILLATION;否则超过轮数上限为 TIMEOUT。
输入格式
第一行输入初始位置 px py pz。
第二行输入目标位置 tx ty tz。
第三行输入 kp eps step_max。
第四行输入 max_round stall_limit。
第五行输入安全边界 xmin xmax ymin ymax zmin zmax。
第六行输入球形障碍数量 B。
接下来 B 行,每行输入球形障碍 cx cy cz r。
接下来一行输入安全距离 d_safe。
下一行输入扰动数量 T。
接下来 T 行,每行输入一轮扰动 dx dy dz。若轮数超过 T,后续扰动按 0 0 0 处理。
输出格式
输出一行:
status rounds final_error min_safe
其中 status 为 SUCCESS、SAFE_STOP、OSCILLATION 或 TIMEOUT,rounds 为实际执行轮数,final_error 和 min_safe 保留 6 位小数。
判定规则
使用标准输出比较。安全边界包含端点;球形障碍安全余量允许等于 0。min_safe 是所有已执行轮次中的最小安全余量;若没有障碍,单轮安全余量按 1000000000.000000 参与输出。
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 可能第 0 轮就满足收敛,也可能在某轮扰动后越界或碰撞,请按轮次顺序更新并立即停止。
- 安全边界包含端点,球形障碍安全余量允许等于 0;无障碍时单轮安全余量按题面给定的大数参与最小值输出。
- 扰动不足时后续按 0;安全余量等于 0 不停机,负数才
SAFE_STOP,停机优先级按题面执行。
样例
输入样例 1
0 0 0
1 0 0
1 0.01 0.5
5 3
-10 10 -10 10 -10 10
0
0
5
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
输出样例 1
SUCCESS 2 0.000000 1000000000.000000
输入样例 2
0 0 0
5 0 0
1 0.01 5
3 2
-10 10 -10 10 -10 10
1
2 0 0 1
0.5
3
0 0 0
0 0 0
0 0 0
输出样例 2
SUCCESS 1 0.000000 1.500000