[英]Creating and/or logic between constraints DOcplex python
我正在嘗試將我的約束從 Cplex OPT 工作室轉移到 DOcplex Python。
約束之間的邏輯是 - 如果其中 1 個不滿足所有決策變量,則需要為 0。
在 Cplex Studio 中,它看起來像這樣:
forall(r in risk_list) (0.2 * sum (i in funds) x[i][r]* risk[i] >= r - 0.005) && (sum(i in funds) x[i][r] == 5)|| sum (i in funds)x[i][r]==0;
如何在約束之間定義“OR”“AND”邏輯?
從 OPL 遷移到 python 並不總是一個好主意。 您還可以從 python 調用 OPL model 。
但在 docplex 中,您可以使用邏輯約束。
請參閱如何在 CPLEX Python 中實現邏輯 OR 約束
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*460 + nbbus30*360)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print()
print("with the logical constraint")
nbKindOfBuses = mdl.integer_var(name='nbKindOfBuses')
mdl.add(nbKindOfBuses==(nbbus40>=1)+(nbbus30>=1))
mdl.minimize(nbbus40*460 + nbbus30*360+(nbKindOfBuses-1)*(500))
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print()
print("with if nb buses 40 more than 3 then nbBuses30 more than 7")
#if then constraint
mdl.add(mdl.if_then(nbbus40>=3,nbbus30>=7))
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.