如何在gurobipy中实现“或”逻辑

我是gurobipy的初学者,所以我试图了解如何陈述我的问题,我模型中的变量必须为零或大于参数。

#If total is not zero then this constraint has to hold
model.addConstrs(
    (total[sup] >= mins[sup] for sup in suppliers),"CheckMin"
)

我尝试为每个供应商创建一个二进制变量,如果该供应商的总数大于0,则必须为True,如下所示:

model.addConstrs(
(bool(gp.quicksum(total[sup] for sup in suppliers)) == binary_buy[sup]
  for sup in suppliers),"BinaryConst"
)

这将导致不可行的解决方案,显然第二个约束是强制每个binary_buy[sup]为True,而我要的是仅当total[sup]大于0时才为True。很好,如果有人可以帮助您正确说明这一点,我也接受python中其他求解器的建议,谢谢!

li5125110 回答:如何在gurobipy中实现“或”逻辑

我可以通过简单地将二进制数乘以合计约束来解决它:

model.addConstrs(
    (gp.quicksum(prices[sup,item]*buys[sup,item] for item in items)
     == total[sup]*binary_buy[sup] for sup in suppliers),"TotalFornecedor" 
    )

我希望这会对遇到这个问题的人有所帮助!谢谢。

本文链接:https://www.f2er.com/2896006.html

大家都在问