跳转至

求解接口

OptAgent 的公开求解入口是 Orchestrator().run(...)。它接收建模阶段生成的 program,返回 OrchestratorResult

最简单的求解方式

不传 presetconfig 时,系统会根据问题特征自动选择内置策略:

from optagent import Orchestrator

# 1. 使用建模阶段生成的 program 发起求解。
result = Orchestrator().run(program)

# 2. final_solution 是读取状态、目标值和变量值的主入口。
solution = result.final_solution

这种方式适合快速验证模型是否能跑通。

使用内置预设

如果你知道问题类型,可以显式选择内置策略:

from optagent import BuiltInStrategyPreset, Orchestrator

# 1. 显式选择内置预设,避免每次都走自动推荐。
result = Orchestrator().run(
    program,
    preset=BuiltInStrategyPreset.SCHEDULING_EVOLUTIONARY_REPAIR,
)

也可以使用字符串形式:

# 1. 字符串写法适合从配置文件或命令行读取 preset 名称。
result = Orchestrator().run(program, preset="scheduling_focus")

使用显式配置

需要固定求解器、后端或阶段时,传入 OrchestratorConfig

from optagent import (
    ExactBackendName,
    Orchestrator,
    OrchestratorConfig,
    OrchestratorSolver,
    PhaseConfig,
)

# 1. 构造显式配置,强制使用 HiGHS 原生后端。
# 2. strict_backend=True 表示后端不满足时直接失败,而不是静默降级。
result = Orchestrator().run(
    program,
    config=OrchestratorConfig(
        required_backend=ExactBackendName.HIGHS_NATIVE,
        strict_backend=True,
        phases=[
            # 3. 定义一个 MILP 阶段,并给出阶段预算。
            PhaseConfig(
                name="milp_phase",
                solver=OrchestratorSolver.MILP,
                budget_iterations=20,
            )
        ],
    ),
)

presetconfig 不能同时传入。预设适合标准场景,显式配置适合需要固定求解路径的场景。

常见求解器类型

OrchestratorSolver 用途
HEURISTIC 启发式求解,适合大规模组合、黑盒或快速近似
CP_SAT CP-SAT 精确求解,适合调度和组合约束
MILP MILP 精确求解,适合线性、整数规划

如果需要固定具体后端,可使用 ExactBackendName

ExactBackendName 含义
CP_SAT_NATIVE OR-Tools CP-SAT 路径
MATHOPT_MP MathOpt 桥接路径
HIGHS_NATIVE HiGHS 原生路径

求解结果入口

run(...) 返回的结果对象包含:

字段 含义
final_solution 最终统一解对象
solver_traces 求解器阶段记录
phase_traces 编排阶段记录
diagnostics 后端或求解过程诊断
selected_preset_name 实际选中的预设名
selected_preset_source 预设来源

下一步