使用OPL,我可以在约束中使用或(||)在下面的constraint.Mainly中进行写入,并成功地获得results.na_supply_component是2d决策变量
// MOQ (Minimum Order Quantity)
con2: forall(i in 1..12,j in 1..5)
na_supply_component[j,i]>=na_moq_supplier[j] || na_supply_component[j,i]==0;现在,我正在尝试使用docplex包将我的OPL代码转换为python。示例代码作为follows.Here我已经使用了一维决策变量来检查(Purch_val)
Supplier=['q','w','e','r','t'];
n_Supplier=len(Supplier);
r_Supplier=range(n_Supplier);
na_moq_supplier=[10,20,30,40,0]
from docplex.mp.model import Model
x=Model("mymod");
purch_val=x.integer_var_list(n_Supplier,lb=0,ub=10000);
for i in r_Supplier:x.add_constraint(purch_val[i]>=na_moq_supplier[i] or purch_val[i]==0);当我运行时,我得到一个错误,它不允许我使用or.Could,你解释了我可以做些什么来克服这个错误。
发布于 2020-05-13 22:16:47
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")
mdl.add((nbbus40>=7) + (nbbus30>=7)>=1)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)工作正常
并给出
nbBus40 = 6.0
nbBus30 = 2.0
with the logical constraint
nbBus40 = 7.0
nbBus30 = 1.0https://stackoverflow.com/questions/61776588
复制相似问题