跳转至
OptAgent 1.2.0

精确求解器接口兼容性

本页说明 ModelBuilder 接口在 CP-SAT 和 MILP 两种精确解模式下的支持范围。完整接口签名和示例见 Builder API

以完整表达式图为准

变量类型兼容不代表整个模型兼容。只要目标或约束中包含当前后端不支持的节点,精确解 lowering 仍会拒绝该模型。

标签

标签 含义
HEURISTIC 启发式路径可评估或搜索该语义。
CP-SAT 可进入当前 cp_sat 精确路径。
MILP 可进入当前 mathopt_mp / highs_cpp 精确路径。
MODEL 建模、登记或导出接口,不直接决定后端支持。

CP-SAT 模式

CP-SAT 当前适合整数、布尔、组合逻辑和调度结构。它不接收连续变量、集合变量、黑盒调用,也不支持所有序列操作。

CP-SAT 支持

建模接口 支持条件
const 参与 CP-SAT lowering 的常量必须是整数或布尔值。
bool_var 支持。
int_var 必须有有限 lb / ub
sequence_var 支持绑定到 no_overlap 的调度序列,或作为直接 sequence_transition_sum(...) objective 输入。
interval_var / optional_interval_var 支持 mandatory / optional interval 的开始、结束、持续时间和 presence。
abs 支持整数表达式绝对值。
sum 支持整数表达式求和。
at_most_one / at_least_one / exactly_one 支持布尔/整数输入上的计数关系。
min / max 支持整数表达式聚合。
and_ / or_ / not_ 支持布尔表达式组合。
iif 支持整数条件选择,会降为 enforcement literal 约束和辅助整数变量。
比较表达式 <= / >= / < / > / == / != 支持整数和布尔上下文中的比较。
all_different 支持。
interval_start / interval_end / interval_length / interval_presence 支持 interval 派生标量和 presence。
selected_start / selected_end / selected_duration 支持基于 presence 的 selected projection;调用方仍需用 exactly-one 约束保证唯一选择。
alternative / add_alternative 支持 exactly-one alternative。
cumulative 支持调度累积资源约束。
no_overlap 支持,并负责把 sequence_var 绑定到 interval 组。
precedence 支持前后工序约束。
sequence_transition_sum 支持 IR-owned dense integer path/cycle objective;要求直接作为 objective root、min sense、非负整数成本。
constraint / minimize / maximize 登记接口可用;内部表达式必须属于 CP-SAT 支持范围。

CP-SAT 不支持

建模接口 原因
float_var 当前 CP-SAT 路径构建整数域模型,不接收连续变量。
set_varset_lenset_contains 当前 canonical CP model 没有集合变量语义。
sequence_contains 仅动态 membership 不支持;常量 membership check 会按排列域静态 lowering。
sequence_transition_sum sparse / forbidden / default-cost / score / non-min / negative or non-integer cost modes 当前 CP-SAT exact slice 只支持 dense non-negative integer min path/cycle。
element / table 未接入 CP-SAT 原生 element/table 约束。
external_call 精确解后端不能调用任意 Python 黑盒函数并证明全局最优。

MILP 模式

MILP 当前是线性 MP lowering,适合布尔、整数、连续变量上的线性目标和线性约束。它不自动做调度、逻辑、集合、黑盒或非线性表达式改写。

MILP 支持

建模接口 支持条件
const 支持数值和布尔常量;不支持 list/dict 常量参与线性表达式。
bool_var 支持,降为 0/1 变量。
int_var 支持整数变量,可带上下界。
float_var 支持连续变量,可带上下界。
sum 支持线性求和。
at_most_one / at_least_one / exactly_one 支持布尔变量上的线性计数关系。
alternative / add_alternative 支持布尔 presence 上的 exactly-one 线性关系。
加减与取负表达式 支持线性组合。
乘常量表达式 支持 变量或线性表达式 * 常量;不支持变量乘变量。
比较表达式 <= / >= / == 支持线性比较。
严格比较 < / > 仅当比较表达式可判定为整数时支持,会转为相差至少 1。
constraint / minimize / maximize 登记接口可用;内部表达式必须为线性 MP 支持范围。

MILP 不支持

建模接口 原因
set_varset_lenset_contains 当前 canonical MP model 只包含标量变量和线性约束。
sequence_varsequence_contains 当前 MILP 路径不自动生成排列或路径 formulation。
interval_varoptional_interval_varinterval_startinterval_endinterval_lengthinterval_presence 当前 MILP 路径不接收 interval 结构。
selected_startselected_endselected_duration 依赖 interval 和 iif,当前不做 MILP lowering。
abs 未自动改写为辅助变量和线性约束。
min / max 未自动生成 epigraph / hypograph 线性 formulation。
and_ / or_ / not_ / iif 未自动做逻辑约束或 big-M 线性化。
!= 比较 当前线性 MP lowering 不支持 disjunction。
all_different 未自动构造 pairwise 或 assignment 线性化。
element / table 未自动线性化。
cumulative / no_overlap / precedence 调度结构当前不自动生成 MILP formulation。
external_call 精确解后端不能调用任意 Python 黑盒函数并证明全局最优。

选择建议

模型特征 建议
纯线性目标和线性约束,包含连续变量 优先尝试 MILP。
整数、布尔、调度 interval、no_overlapcumulative 优先尝试 CP-SAT。
典型 JSSP/FJSP/RCPSP 建模 优先使用 Scheduling API 表达任务、资源和 alternatives,再按模型结构选择 solve(...) 或 CP-SAT。
黑盒目标、集合变量、路线评分函数 优先使用 solve(...),必要时显式声明 GaConfig
同一模型同时包含线性和调度/黑盒结构 优先使用 solve(...) 的 strategy-first 路线;只有明确需要 exact backend 时再使用 direct exact API。