You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPLEX批量数量约束编写:生产及外包量整除条件如何实现

CPLEX 整数倍约束正确实现方案

约束1:自制冰淇淋按60单位分批次生产

你原有代码无法生效有两个核心原因:

  • 下标参数写错:循环变量是t,但公式里用了未定义的下标d
  • OPL 中%模运算符仅支持整型操作数,直接对决策变量写模运算约束兼容性差,容易触发求解错误

最佳实现方式(推荐)

引入辅助整数变量记录批次数量,通过乘法约束保证生产数量是60的整数倍,求解器处理效率更高:

// 先定义辅助决策变量:每个口味每日生产的批次数量,非负整数
dvar int batch_count[f in flavour][t in time] >= 0;

// 写入约束
forall(f in flavour, t in time) {
  quantity[f][t] == 60 * batch_count[f][t];
}

如果你的quantity本身已经定义为非负整数变量,也可以修正下标后直接用模运算写法:

forall(f in flavour, t in time) quantity[f][t] % 60 == 0;

约束2:外包采购量为5的整数倍

和上述逻辑一致,假设每日外包总采购量为outsource_total[t],实现方式如下:

// 定义辅助决策变量:每日采购的批次数量,非负整数
dvar int purchase_batch[t in time] >= 0;

// 写入约束
forall(t in time) {
  outsource_total[t] == 5 * purchase_batch[t];
}

如果外包总采购量是多变量求和得到的,直接替换约束左侧即可,示例:

forall(t in time) {
  sum(f in flavour) outsource_q[f][t] == 5 * purchase_batch[t];
}

内容的提问来源于stack exchange,提问作者BST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:06:07