跳转至

黑盒优化示例

黑盒优化示例用于表达“模型结构可由 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 约束,通常走启发式或预设路径。

黑盒问题通常走启发式路径;精确解兼容范围见 精确求解器接口兼容性