精确求解器接口兼容性¶
本页说明 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_var、set_len、set_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_var、set_len、set_contains | 当前 canonical MP model 只包含标量变量和线性约束。 |
| sequence_var、sequence_contains | 当前 MILP 路径不自动生成排列或路径 formulation。 |
| interval_var、interval_start、interval_end、interval_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_overlap、cumulative |
优先尝试 CP-SAT。 |
| 黑盒目标、集合变量、路线评分函数 | 优先走启发式或预设路径。 |
| 同一模型同时包含线性和调度/黑盒结构 | 使用混合配置或预设,让不同阶段处理不同子结构。 |