策略配置¶
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,
)
常见预设族包括:
| 预设族 | 典型场景 |
|---|---|
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)
如何选择配置层级¶
建议按以下顺序决策:
- 第一次跑模型:使用自动选择。
- 已确认问题类型:使用内置预设。
- 需要复现实验或固定后端:使用显式配置。
- 需要多阶段组合:使用显式
PhaseConfig。 - 需要调启发式内部行为:再进入
HeuristicOrchestrationConfig等高级配置。
注意事项¶
preset与config是互斥参数,不能同时传入。- 预设会携带完整编排配置和执行计划。
- 显式配置会覆盖预设路径,适合可控性优先的场景。
- 自动选择的结果可通过
selected_preset_name和selected_preset_source查看。
下一步¶
- 查看预设对象字段:阅读 Presets API。
- 查预设对象:阅读 Presets API。
- 查看求解阶段配置:阅读 求解接口。