我需要告訴 Gurobi 該變數可以取兩個可能的值:0 或任何大于 100 的值。由于我需要它來測驗大于 100 的其他值,因此我無法將其設定為二進制變數。基本上解決方案必須是 x = 0 或 x> = 100
我試過:
model.addConstrs (x [t, m] >= 100 for t in T for m in M)
model.addConstrs (x [t, m] < 1 for t in T for m in M)
但這不起作用(即使沒有報告錯誤),因為我讓 x 小于 0,這在我的情況下是不可能的,也因為邏輯沒有意義。我如何在 Gurobipy 上充分代表我的案例?
一些幫助?謝謝!
uj5u.com熱心網友回復:
無需使用約束來執行此操作:這稱為半連續變數。將 x 的下限(LB 屬性)設定為 100,并將變數型別(VType 屬性)設定為“S”(如果 x 也應該是整數,則設定為“N”)。
uj5u.com熱心網友回復:
您可以使用兩個虛擬變數來執行檢查,然后使用 or 約束來確保其中一個為真。假設您使用虛擬變數a,b并且y為 or 陳述句使用結果變數。最后只需添加一個約束,說明y在任何地方都應該是真的。下面的小代碼片段:
for t in T:
for m in M:
model.addGenConstrIndicator(a[t, m], 1, x[t, m], GRB.EQUAL, 0)
model.addGenConstrIndicator(b[t, m], 1, x[t, m], GRB.GREATER_EQUAL, 100)
model.addGenConstrOr(y[t, m], [a[t, m], b[t, m]])
model.addConstrs(y[t, m] == 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/355500.html
