生产上下文模型
1. 概述
生产上下文拥有切割方案使用变量及产品产出表达式,把已生成方案编译为受限主问题,并通过列插入更新模型。
1. 依赖上下文
材料上下文提供产品、需求和方案系数。切割方案生成服务提供初始列与定价列;可选长度分配、损耗目标等管线依赖生产聚合。应用层控制求解循环。
2. 概念 / 实体
1. 产品与方案
2. 材料使用与余料
3. 变量
1. 决策变量
产品产出
2. 辅助变量
若整数求解配置包含对应需求的产出偏差项,slack 的独立 API 开关。
4. 谓词
5. 集合
它是迭代相关的有限集合,不是预先枚举的全部切割方案。
6. 中间值
1. 产品产出
描述:总产出等于各方案需求贡献乘以其使用次数,再按产品汇总。
2. 材料使用量
描述:每使用一次属于材料
3. 总余料
描述:每个方案余料是固定列系数,总余料按方案使用次数加权。
7. 断言
所有进入主问题的列都必须可行,且各产品的需求贡献采用与
在线性松弛阶段,不应把方案使用量的分数值直接解释为最终生产方案;整数结果还需依据原始需求和方案数据分析。
8. 约束
1. 产品需求覆盖(Product Demand Coverage)
描述:普通需求配置对每个产品分别保证产出不小于需求。
不能改写成对所有产品产量求一次总和后与每个产品需求比较。
2. 产出松弛形式(Yield Slack Form)
描述:启用产出不足/超产表达时,对应平衡形式为:
不足量是否允许、如何受限或受罚,由所选管线决定;不能仅写上式就声称仍然强制满足原始需求。
3. 可选资源与长度规则
材料管线对有限的可用批次
Demo3 的材料未设置有限可用批次,机器列表为空。因此虽会注册材料使用中间值,但不会产生材料批次上限或机器约束。动态长度和其他资源规则同样需要相应数据与配置,不能替换成未定义的“机器工时容量”。
9. 目标函数(如适用)
描述:基础方案使用目标最小化使用次数:
Demo3 未传入额外求解配置,使用上述默认目标,没有额外的产出偏差、废料或长度目标。可选损耗管线可以配置余料、材料成本或超产相关目标;不能无条件把所有项相加,更不能把余料宽度和货币成本以未定义的单位直接相加。
10. 算法引用
| 算法 | 引用位置 | 说明 |
|---|---|---|
| 受限主问题 LP | 第 3、8、9 节 | 计算当前列池解与对偶价格 |
| 方案定价 | 材料与生成服务 | 搜索负约化成本的可行方案 |
| 列插入 | 第 5、6 节 | 增加方案变量并更新产出、资源和目标系数 |
| 整数求解与结果分析 | 第 3、7 节 | 将列使用量恢复为可执行切割方案 |
Kotlin 生产上下文源码;Kotlin/Rust 示例入口。
11. 通用语言
| 术语 | 符号 | 定义 |
|---|---|---|
| 方案使用量 | 方案使用的次数 | |
| 产品产出 | 各方案合计对产品的需求贡献 | |
| 材料使用量 | 方案加权汇总的材料使用 | |
| 总余料 | 方案余料按使用量加权的总和 | |
| 产出不足 / 超产 | 可选需求平衡形式中的偏差 | |
| 当前列池 | 本轮主问题可用的切割方案 |
12. 设计决策
| 决策 | 备选方案 | 原因 |
|---|---|---|
| 按方案声明使用变量 | 同时声明未关联的产品量与方案量 | 由列系数直接保证产出一致性 |
| 分离 LP 与整数阶段 | 每次定价前都求整数主问题 | LP 对偶价格用于列生成 |
| 明确可选松弛与目标 | 默认加入全部惩罚和资源规则 | 保持配置与实际模型一致 |
13. 变更记录
| 版本 | 变更 | 原因 |
|---|---|---|
| 1.1 | 对齐双语产出公式、变量域与余料定义 | 消除方案和产品变量混用 |