Как добраться до bestbound и mipgap (CPLEX_CMD)? - PullRequest
0 голосов
/ 20 марта 2020

Я работаю с CPLEX_CMD, потому что мне нужно было использовать MIP_start. Прежде чем я использовал CPLEX_PY и команду, которая сделала это:

a = prob.solverModel
GAP = a.solution.MIP.get_mip_relative_gap ()
BestBound = a.solution.MIP.get_best_objective ()

Как я могу получить эту информацию из CPLEX_CMD?, Потому что у меня есть ошибка о
a = prob.solverModel

Спасибо, a серия

1 Ответ

1 голос
/ 20 марта 2020

Вы можете выполнить mip start с помощью docplex 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.minimize(nbbus40*500 + nbbus30*400)

warmstart=mdl.new_solution()
warmstart.add_var_value(nbbus40,8)
warmstart.add_var_value(nbbus30,0)
mdl.add_mip_start(warmstart)


sol=mdl.solve(log_output=True)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

И позвольте мне использовать пример zoo , чтобы показать вам, как получить то, что вы просили:

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(500*nbbus40+400*nbbus30)
sol=mdl.solve(log_output=True)

for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

print("objective = ",sol.get_objective_value())
print("best bound = ",mdl.solve_details.best_bound)
print("mip gap = ",mdl.solve_details.mip_relative_gap)

, что дает

nbBus40  =  6.0
nbBus30  =  2.0
objective =  3800
best bound =  3800.0
mip gap =  0.0
...