#cplex
#cplex
Вопрос:
Я новичок в python и CPLEX. Я хотел бы суммировать коэффициенты переменных при каждом ограничении, но я не знаю, как группировать по переменным при ограничении, а затем использовать функцию Sum .
for i in (d.linear_constraints.get_names()):
for j in (d.variables.get_names()):
Varconst = d.linear_constraints.get_coefficients(i,j)
print("constraints-coefficients: ",i,"-",j,":",Varconst)
Ответ №1:
Я рекомендую вам использовать docplex — высокоуровневый CPLEX python API.
И если я немного изменю пример зоопарка:
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.add_constraint(nbbus40*45 nbbus30*35 >= 320, 'kids2')
mdl.minimize(nbbus40*500 nbbus30*400)
mdl.solve()
vardict={i:0 for i in mdl.iter_variables()}
for i in mdl.iter_linear_constraints():
for j in i.iter_variables():
Varconst = i.lhs.get_coef(j)
print("constraints-coefficients: ",i,"-",j,":",Varconst)
vardict[j] =Varconst
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
for i in mdl.iter_variables():
print(i," ==> ",vardict[i])
дает
constraints-coefficients: kids: 40nbBus40 30nbBus30 >= 300 - nbBus40 : 40
constraints-coefficients: kids: 40nbBus40 30nbBus30 >= 300 - nbBus30 : 30
constraints-coefficients: kids2: 45nbBus40 35nbBus30 >= 320 - nbBus40 : 45
constraints-coefficients: kids2: 45nbBus40 35nbBus30 >= 320 - nbBus30 : 35
nbBus40 = 6.0
nbBus30 = 2.0
nbBus40 ==> 85
nbBus30 ==> 65