Суммировать коэффициенты переменных при каждом ограничении

#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