Files
mcm-26-b/project/q2/optimal.py
T
2026-09-12 16:58:25 +08:00

43 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""问题二最优实现:保证接收盘内的最坏后验半径最小化选点(生产实现)。
复用 ``mcm26b.planner.select_measurement_point``:
1. 在"保证接收盘" B(mec_center, 1000-ρ) 内环形采样候选点;
2. 对每个候选,用"目标边界点 × 读数区间端点(+near 分支)"估计
最坏后验最小包围半径,并以移动时间同分决胜;
3. 选定后按 1/4 间距加密复核,返回位置、后验半径与理由。
采样是启发式(不是连续问题全局最优证明),但保证接收是严格的。
"""
from __future__ import annotations
from mcm26b.config import ProblemConfig
from mcm26b.planner import safe_disk_radius, select_measurement_point
from project.common import Method, problem_config
from project.q2.region import first_bearing_region
METHOD = Method(
key="optimal",
name="保证接收盘内最小最坏后验半径",
kind="optimal",
note="生产实现 mcm26b.planner.select_measurement_point",
)
def candidate(case: dict, config: ProblemConfig | None = None) -> dict:
config = config or problem_config()
region = first_bearing_region(case, config)
station = (case["station"][0], case["station"][1])
plan = select_measurement_point(region, station, config)
return {
"method": METHOD.key,
"position": [round(plan.position[0], 4), round(plan.position[1], 4)],
"worst_posterior_radius_m": plan.worst_posterior_radius_m,
"move_cost_s": plan.move_cost_s,
"safe_disk_radius_m": safe_disk_radius(region, config),
"initial_radius_m": region.mec()[1],
"reason": plan.reason,
}