IBM cplex ilog VS docplex в python - PullRequest
0 голосов
/ 09 июля 2020

В настоящее время я работаю над docplex на python.

Я только что обнаружил, что результаты IBM cplex Ilog и docplex сильно отличаются.

Несмотря на их ограничения, цель функции, все идентичны, их решение сильно отличается.

В некоторых случаях docplex говорит о невозможности, хотя это возможно в Ilog.

Я пытался ограничить целостность и минимальный разрыв в допусках докплексов но случается та же проблема.

Кто-нибудь знает, почему это происходит? и как это решить ??

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Чтобы понять, в чем разница, вы можете экспортировать модели в файл lp.

См.

mdl.export("c:\\temp\\buses.lp")

в

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)

mdl.solve()

mdl.export("c:\\temp\\buses.lp")

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


"""
which gives
nbBus40  =  6.0
nbBus30  =  2.0
"""
1 голос
/ 10 июля 2020

В дополнение к ответу Алекса: в Docplex Model.export_as_lp (путь 'c: / temp / mymodel.lp') - это способ сгенерировать LP-файл из вашей модели Docplex. В API Cplex Python у вас есть экземпляр Cplex, используйте cpx.write ('c: / temp / mymodel_cplex.lp') для создания файлов LP.

Если ваши модели идентичны, тогда оба файла LP также должны быть идентичными (за исключением, возможно, некоторых различий в порядке переменных, например, x2 + x1 вместо x1 + x2). Если вам нужно работать с одной и той же моделью для обоих API, вы должны сначала достичь этого равенства, прежде чем двигаться дальше.

DOcplex имеет инструменты для исследования несовместимых моделей, но нет смысла, пока вы не убедитесь, что обе модели идентичны.

0 голосов
/ 10 июля 2020

Что-то должно отличаться между двумя версиями. Вы можете использовать Refin_conflict, чтобы узнать источник невозможности

...