使用 Python Pulp 在约束中使用 mod 函数

Use mod function in a constraint using Python Pulp

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

我正在尝试使用 mod()、round() 和 int() 的下一个表达式,但是 none 可以工作,因为它们不支持 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)

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

谢谢!

一个相当简单的方法:

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

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

(并且:您不能在 pulp 或任何其他 LP-modelling 系统(圆形, int, mod, ceil, ...)! 你必须接受 rules/form 那些 modelling-systems 允许:在这种情况下 -> LpAffineExpression)