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

2024-07-03 06:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是gurobipy的初学者,所以我试图理解如何用它来陈述我的问题,我在模型中有一个变量必须是零或者大于一个参数

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

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

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

这导致了不可行的解决方案,显然第二个约束强制每个binary_buy[sup]都为真,而我想要的是只有当total[sup]大于0时才为真。如果有人能帮助正确地说明这一点,那就太好了,我也接受python中其他解算器的建议,谢谢


Tags: in模型for参数modelifisbuy
1条回答
网友
1楼 · 发布于 2024-07-03 06:24:40

我可以通过简单地将totals约束中的二进制文件相乘来解决这个问题:

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

我希望这有助于跨越这个问题的人!谢谢

相关问题 更多 >