整数规划中突破阈值后属性变化的条件变量建模求助——产品B生产工时约束构建问题
整数规划中突破阈值后属性变化的条件变量建模求助——产品B生产工时约束构建问题
看起来你已经找对了核心方向——用两个变量拆分不同阈值下的生产,是处理这类分段属性问题的标准操作!不过约束条件的构建确实需要调整下细节,我来帮你梳理清楚:
首先先把变量定义明确,避免歧义:
X_B1:产品B在≤110单位范围内的产量(总产量≤110时,X_B1就是总产量;总产量>110时,X_B1固定为110)X_B2:产品B超过110单位的额外产量(总产量>110时为正整数,否则必须为0)w_B:二进制决策变量(取值0或1),用来标记是否触发了超阈值生产:w_B=1代表总产量超过110,w_B=0则总产量≤110M:一个足够大的正数(不需要精确,只要比理论上X_B2的最大可能值大就行,比如取200就完全够用,因为总工时730最多能生产约235单位,X_B2最多125)
接下来是关键的约束条件构建:
X_B1的范围约束:- 不管有没有超阈值,
X_B1最多只能到110:X_B1 ≤ 110 - 当触发超阈值生产(
w_B=1)时,必须把前110单位的产能拉满:X_B1 ≥ 110 - M*(1 - w_B)
解释:当w_B=1时,(1-w_B)=0,约束变成X_B1 ≥110,结合上面的X_B1 ≤110,就强制X_B1=110;当w_B=0时,M*(1-w_B)是很大的数,约束自动失效,X_B1可以在0到110之间自由取值。
- 不管有没有超阈值,
X_B2的触发约束:- 只有在超阈值时(
w_B=1),X_B2才能大于0,否则必须为0:X_B2 ≤ M*w_B
解释:当w_B=0时,约束变成X_B2 ≤0,结合非负约束就强制X_B2=0;当w_B=1时,约束放开,X_B2可以取合理的正数值。
- 只有在超阈值时(
总工时约束:
- 把两部分的生产工时加起来,不能超过总工时上限730:
2.1*X_B1 + 3.1*X_B2 ≤ 730
- 把两部分的生产工时加起来,不能超过总工时上限730:
非负与整数约束:
X_B1 ≥ 0,X_B2 ≥0,且两者均为整数(如果产量允许小数可去掉整数要求)w_B ∈ {0, 1}
最后是你的目标函数,因为每单位利润都是25,所以直接最大化总利润即可:Maximize Z = 25*(X_B1 + X_B2)
这样一套约束下来,就能准确描述产品B的生产规则啦,你原来的约束思路有点绕,拆分变量后直接按分段工时相加会更直观~
备注:内容来源于stack exchange,提问作者Yago Tobio
相关产品推荐
相关产品推荐

