【发布时间】:2021-03-04 13:02:31
【问题描述】:
请帮助我。我正在使用 IBM ILOG CPLEX Optimization Studio 来解决我的问题,即我的模型中的一些变量是 SOS2 类型。我不知道,如何在 IBM ILOG CPLEX 上使用 SOS2。
【问题讨论】:
请帮助我。我正在使用 IBM ILOG CPLEX Optimization Studio 来解决我的问题,即我的模型中的一些变量是 SOS2 类型。我不知道,如何在 IBM ILOG CPLEX 上使用 SOS2。
【问题讨论】:
这取决于您使用的 API。
借助 docplex python API,让我分享来自https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoosos2.py 的示例
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus30 = mdl.integer_var(name='nbBus30')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus50 = mdl.integer_var(name='nbBus50')
cost = mdl.continuous_var(name='cost')
mdl.add_constraint(nbbus50*50+nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.add_constraint(cost==nbbus40*500 + nbbus30*400+nbbus50*550)
mdl.add_constraint(nbbus50==1)
mdl.minimize(cost)
mdl.solve()
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print("The minimum cost is ",cost.solution_value);
print("and then with sos2 nbbus30,nbbus40,nbbus50")
mdl.add_sos2([nbbus30,nbbus40,nbbus50])
mdl.minimize(cost)
mdl.solve( )
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
print("The minimum cost is ",cost.solution_value);
给了
nbBus30 = 3.0
nbBus40 = 4.0
nbBus50 = 1.0
The minimum cost is 3750.0
and then with sos2 nbbus30,nbbus40,nbbus50
nbBus30 = 0
nbBus40 = 7.0
nbBus50 = 1.0
The minimum cost is 4050.0
【讨论】: