什么是MILP程序中编码整数除法的求解器友好方式?目前我正在使用以下编码(在Gurobi python中),它可能不完全正确,也不是最优的。
上面的编码基本上意味着
编辑:通过整数除法,我指的是除法的结果是整数。如果除法后有任何小数部分,我想舍弃它并向下取整结果,该结果将存储在
# res is an integer variable in the solver
# val is an integer variable in the solver
# divVal is just a python variable, a constant for solver
offset = 0.999
divRes = val / divVal
model.addConstr(divRes - offset <= res)
model.addConstr(res <= divRes)
上面的编码基本上意味着
res
应该被分配一个值在divRes-offset
和divRes
之间,因为offset
是0.999,所以在该范围内只应有1个整数,并且求解器被强制将其分配给res
。是否有更好(更快)的编码方法?编辑:通过整数除法,我指的是除法的结果是整数。如果除法后有任何小数部分,我想舍弃它并向下取整结果,该结果将存储在
res
中。我想做的本质上是将数字向左移动一些x
位。在MILP求解器中,这归结为将数字除以(1 << x)
,但是在除法后有一些小数部分,我想摆脱它们。