1

我正在写一个 LpProblem,我需要创建一个约束,其中一些变量的总和是 100 的倍数... 100、200、300...

我正在尝试使用 mod()、round() 和 int() 的下一个表达式,但没有一个有效,因为它们不支持 LpAffineExpression。

probl += lpSum([vars[h] for h in varSKU if h[2] == b]) % 100 == 0

probl += lpSum([vars[h] for h in varSKU if h[2] == b]) / 100 == int(lpSum([vars[h] for h in varSKU if h[2] == b] ) / 100)

probl += lpSum([vars[h] for h in varSKU if h[2] == b]) / 100 == round(lpSum([vars[h] for h in varSKU if h[2] == b] ) / 100)

你能给我一些写这个约束的想法吗?

谢谢!

4

1 回答 1

1

一种相当简单的方法:

  • 引入一个整数变量I
  • 将您的约束构建为:probl += lpSum([vars[h] for h in varSKU if h[2] == b]) == I*100
  • (根据需要进行约束I:例如I >= 1; I <= N

请记住:当有多个约束并且约束的 100 的倍数不一定相同时,I_x每个约束都需要一个辅助变量!

(并且:您一般不能在纸浆或任何其他 LP 建模系统(round、int、mod、ceil、...)中使用 python 运算符您必须接受这些建模系统允许的规则/形式:这种情况-> LpAffineExpression

于 2017-12-21T16:43:36.823 回答