Skip to content

复杂示例 3:一维分切 — 总览 ​

English

1. 概述 ​

本示例通过一维分切(CSP1D)框架,把产品和材料数据、切割方案主问题、方案定价分开组织。总览说明列生成流程;材料与生产子页分别定义数据契约和主问题数学模型。

2. 上下文与依赖 ​

上下文职责依赖
材料产品、需求、材料与切割方案数据输入配置
生产方案使用变量、产出和资源表达式、主问题管线材料、已生成方案
切割方案生成初始方案和改进列搜索材料、主问题对偶价格
长度分配与废料最小化可选长度规则及损耗相关目标材料、生产、配置

应用层负责组装上下文和列生成循环,不能把算法角色当作另一组独立产量变量。

3. 概念、集合与谓词 ​

P 是产品集合,M 是材料集合,Jt 是第 t 次主问题求解可用的切割方案集合。产品需求为 dp,方案对产品的产出贡献为 apj。谓词区分可行方案、已插入列及带可选长度规则的产品。

4. 变量与中间值 ​

xj 表示方案 j 的使用次数,而不是产品 p 的产量。产品产出由 qp=∑j∈Jtapjxj 定义。每个方案的余料是由该方案决定的系数,总余料再按 xj 加权汇总;不能用全局产品产量重新计算每个方案的余料。

5. 断言、约束与目标 ​

需求约束逐产品写为 qp≥dp。带松弛或资源限制的配置使用所属管线定义的形式;不将可选规则一律视为小示例的约束。主问题变量在列生成的 LP 阶段连续,在整数求解阶段取非负整数。

6. 算法与生命周期 ​

生成初始方案,求解受限主问题并读取对偶价格,搜索负约化成本方案,去重后加入列池并重新求解。终止应区分完整定价无改进列与时间、迭代等限制导致的提前返回。

7. 注册 → 构造 → 求解 → 分析 ​

注册阶段创建生产聚合及其管线;构造阶段把已有方案编译成主问题列;求解阶段交替执行主问题和定价;分析阶段将方案使用量转换为产品产出及材料使用结果。

8. 源码入口 ​

9. Kotlin/Rust 对照与设计决策 ​

两种语言的示例入口均调用各自的 CSP1D 框架,而非在 Demo 目录内重复实现全部上下文。数学记号统一按方案索引 j 定义变量,避免把语言中的不同命名误解为不同模型。

10. 上下文模型页面 ​

11. 变更记录 ​

版本变更原因
1.1统一中英文总览、数学记号和源码入口与所属上下文模型保持一致