使用 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 >= 1
;I <= N
)
请记住:当有多个约束且 100 的倍数不一定相同时,每个约束都需要一个辅助变量 I_x
!
(并且:您不能在 pulp 或任何其他 LP-modelling 系统(圆形, int, mod, ceil, ...)! 你必须接受 rules/form 那些 modelling-systems 允许:在这种情况下 -> LpAffineExpression
)
我正在编写一个 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 >= 1
;I <= N
)
请记住:当有多个约束且 100 的倍数不一定相同时,每个约束都需要一个辅助变量 I_x
!
(并且:您不能在 pulp 或任何其他 LP-modelling 系统(圆形, int, mod, ceil, ...)! 你必须接受 rules/form 那些 modelling-systems 允许:在这种情况下 -> LpAffineExpression
)