Как использовать исходный раствор в мякоти (python) - PullRequest
0 голосов
/ 18 февраля 2020

Сообщество,

У меня есть следующая проблема, я хочу сделать heuristi улучшения c (Исправить и оптимизировать), и мне нужно использовать начальное решение, чтобы начать, моя проблема - MIP с двоичным и непрерывным переменные. Я спросил его, как бы я использовал предыдущее решение в качестве начального и как я оставляю некоторые из этих переменных нефиксированными для вашей оптимизации.

Ps: я использую -> prob.solve (CPLEX_PY (timeLimit = ' 3600 ', epgap = 0,001))

Спасибо.

1 Ответ

0 голосов
/ 18 февраля 2020

с 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*460 + nbbus30*360)

mdl.get_cplex().MIP_starts.read("c:/file.mst")

sol=mdl.solve(log_output=True)

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

Полный пример на https://www.ibm.com/developerworks/community/forums/html/topic?id=41691ae0-9179-4c5f-86cc-5f389cdfc394

Или вы можете использовать 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)

в https://www.ibm.com/developerworks/community/forums/html/topic?id=8a999a34-7328-4b86-b177-afe0be9d7b91

...