跳转至

策略配置

OptAgent 提供三层策略入口:自动选择、内置预设、显式配置。选择哪一层,取决于你是否需要控制求解路径。

三种入口

入口 写法 适用场景
自动选择 Orchestrator().run(program) 快速试跑、初次接入
内置预设 Orchestrator().run(program, preset=...) 已知道问题类型,想复用推荐策略
显式配置 Orchestrator().run(program, config=...) 需要固定求解器、后端、阶段和预算

自动选择

自动选择会分析 program 的变量、约束、目标和结构特征,然后选择一个可用预设:

# 1. 自动选择会先分析 program,再选一个匹配的内置预设。
result = Orchestrator().run(program)

# 2. 读取实际选中的预设,确认求解路径。
print(result.selected_preset_name)
print(result.selected_preset_source)

适合用来验证模型和获得第一版结果。

内置预设

内置预设可以通过枚举或字符串指定:

from optagent import BuiltInStrategyPreset, Orchestrator

# 1. 枚举写法适合业务代码长期维护。
result = Orchestrator().run(
    program,
    preset=BuiltInStrategyPreset.LINEAR_EXACT_FIRST,
)
# 1. 字符串写法适合配置文件或命令行输入。
result = Orchestrator().run(program, preset="routing_evolutionary")

常见预设族包括:

预设族 典型场景
scheduling_* 调度问题,通常包含 interval_var 或顺序约束
sequence_* 路径、排列、访问顺序
routing_* 路由或序列黑盒目标
linear_* 线性、整数规划
general_* 通用启发式或进化式路径
hybrid_* 启发式与精确求解组合

显式配置

当你需要控制阶段、预算或后端时,使用 OrchestratorConfig

from optagent import OrchestratorConfig, OrchestratorSolver, PhaseConfig

# 1. 总预算控制整次编排的粗粒度运行成本。
config = OrchestratorConfig(
    total_budget_iterations=80,
    phases=[
        # 2. 第一阶段用启发式快速产生可行解。
        PhaseConfig(
            name="first_pass",
            solver=OrchestratorSolver.HEURISTIC,
            budget_iterations=40,
        ),
        # 3. 第二阶段用 MILP 在已有解基础上精化。
        PhaseConfig(
            name="exact_polish",
            solver=OrchestratorSolver.MILP,
            budget_iterations=40,
        ),
    ],
)

# 4. 显式配置会固定求解路径,不再走自动预设推荐。
result = Orchestrator().run(program, config=config)

如何选择配置层级

建议按以下顺序决策:

  1. 第一次跑模型:使用自动选择。
  2. 已确认问题类型:使用内置预设。
  3. 需要复现实验或固定后端:使用显式配置。
  4. 需要多阶段组合:使用显式 PhaseConfig
  5. 需要调启发式内部行为:再进入 HeuristicOrchestrationConfig 等高级配置。

注意事项

  • presetconfig 是互斥参数,不能同时传入。
  • 预设会携带完整编排配置和执行计划。
  • 显式配置会覆盖预设路径,适合可控性优先的场景。
  • 自动选择的结果可通过 selected_preset_nameselected_preset_source 查看。

下一步