黑盒优化示例¶
黑盒优化示例用于表达“模型结构可由 OptAgent 管理,但目标或局部评分由 Python 函数计算”的场景。典型变量是 sequence_var,典型目标是 external_call(...)。
https://github.com/Dongbox/optagent-examples
问题说明¶
routing_heuristic.py:按路径顺序调用 Python 评分函数,展示基础启发式路径。tsp_blackbox_small.py:把 TSP 路径长度写成 Python 黑盒函数,通过 tabu 搜索优化。tsp_evolutionary_small.py:同一个 TSP 黑盒目标,切换到进化式启发式搜索。steel_transition_sequence.py:钢卷直焊兼容性示例的兼容入口,推荐直接看 钢卷排序。
目录结构¶
examples/blackbox/
README.md
routing_heuristic.py
tsp_blackbox_small.py
tsp_evolutionary_small.py
steel_transition_sequence.py
代码示例¶
from optagent import HeuristicStrategy, ModelBuilder, Orchestrator, OrchestratorConfig, OrchestratorSolver, PhaseConfig
def route_cost(order: list[int]) -> int:
tour = order + [order[0]]
return sum(distance[tour[i]][tour[i + 1]] for i in range(len(order)))
builder = ModelBuilder(metadata={"case": "tsp_blackbox"})
route = builder.sequence_var(size=4, default=[3, 2, 1, 0], name="route")
builder.minimize(builder.external_call(route_cost, route, name="route_cost"))
result = Orchestrator().run(
builder.freeze(),
config=OrchestratorConfig(
phases=[
PhaseConfig(
name="tabu_route_search",
solver=OrchestratorSolver.HEURISTIC,
strategy=HeuristicStrategy.TABU,
budget_iterations=60,
)
],
),
)
运行¶
PYTHONPATH=. python examples/blackbox/routing_heuristic.py
PYTHONPATH=. python examples/blackbox/tsp_blackbox_small.py
PYTHONPATH=. python examples/blackbox/tsp_evolutionary_small.py
注意事项¶
- 黑盒函数应尽量确定性、可重复,并只依赖输入变量和公开数据。
- 预算、随机种子和启发式策略会影响解质量;需要比较时应固定 seed。
- 黑盒目标不能直接降低到通用 MILP/CP-SAT 约束,通常走启发式或预设路径。
黑盒问题通常走启发式路径;精确解兼容范围见 精确求解器接口兼容性。