跳转至

精确求解器接口兼容性

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

以完整表达式图为准

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

标签

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

CP-SAT 模式

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

CP-SAT 支持

建模接口 支持条件
const 参与 CP-SAT lowering 的常量必须是整数或布尔值。
bool_var 支持。
int_var 必须有有限 lb / ub
sequence_var 仅支持绑定到 no_overlap 的调度序列。
interval_var 支持 interval 开始、结束、持续时间。
abs 支持整数表达式绝对值。
sum 支持整数表达式求和。
min / max 支持整数表达式聚合。
and_ / or_ / not_ 支持布尔表达式组合。
比较表达式 <= / >= / < / > / == / != 支持整数和布尔上下文中的比较。
all_different 支持。
interval_start / interval_end / interval_length 支持 interval 派生标量。
cumulative 支持调度累积资源约束。
no_overlap 支持,并负责把 sequence_var 绑定到 interval 组。
precedence 支持前后工序约束。
constraint / minimize / maximize 登记接口可用;内部表达式必须属于 CP-SAT 支持范围。
to_program_spec / freeze 可用,但不改变后端支持范围。

CP-SAT 不支持

建模接口 原因
float_var 当前 CP-SAT 路径构建整数域模型,不接收连续变量。
set_varset_lenset_contains 当前 canonical CP model 没有集合变量语义。
sequence_contains 当前 sequence lowering 只覆盖 no_overlap 排序语义。
iif 未实现条件表达式 lowering。
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 支持线性求和。
加减与取负表达式 支持线性组合。
乘常量表达式 支持 变量或线性表达式 * 常量;不支持变量乘变量。
比较表达式 <= / >= / == 支持线性比较。
严格比较 < / > 仅当比较表达式可判定为整数时支持,会转为相差至少 1。
constraint / minimize / maximize 登记接口可用;内部表达式必须为线性 MP 支持范围。
to_program_spec / freeze 可用,但不改变后端支持范围。

MILP 不支持

建模接口 原因
set_varset_lenset_contains 当前 canonical MP model 只包含标量变量和线性约束。
sequence_varsequence_contains 当前 MILP 路径不自动生成排列或路径 formulation。
interval_varinterval_startinterval_endinterval_length 当前 MILP 路径不接收 interval 结构。
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。
黑盒目标、集合变量、路线评分函数 优先走启发式或预设路径。
同一模型同时包含线性和调度/黑盒结构 使用混合配置或预设,让不同阶段处理不同子结构。