2016-10-09 10 views
0

Я решаю серию проблем с LP, используя API CPLEX Python. Поскольку многие проблемы по существу одинаковы, сохраните ручку, полную параметров. Я хочу использовать теплый старт с решением предыдущей проблемы для большинства из них, вызвав функцию cpx.start.set_start(col_status, row_status, col_primal, row_primal, col_dual, row_dual) где cpx = cplex.Cplex().CPLEX находит оптимальное решение LP, но не возвращает никакой базовой ошибки

Эта функция задокументирована here. Два аргумента, col_status и row_status, получены по телефону cpx.solution.basis.get_col_basis() и cpx.solution.basis.get_row_basis().

Однако, несмотря на cpx.solution.status[cpx.solution.get_status()] возвращение optimal и возможность получить как cpx.solution.get_values() и cpx.solution.get_dual_values() ...

Вызов cpx.solution.basis.get_basis() возвращается CPLEX Error 1262: No basis exists.

Сейчас, по словам this post можно назвать теплой начальную функцию с пустыми списками для состояния столбцов и строк, следующим образом.

lastsolution = cpx.solution.get_values() 
cpx.start.set_start(col_status=[], row_status=[], 
        col_primal=lastsolution, row_primal=[], 
        col_dual=[], row_dual=[]) 

Однако на самом деле это приводит к еще нескольким итерациям CPLEX. Почему еще неясно, но общая цель состоит в том, чтобы иметь значительно меньше, очевидно.

Version Info Python 2.7.12 CPLEX 12.6.3

+0

Любые шансы вы можете поделиться своей моделью (в идеале в формате SAV) на сайте обмена файлами, например http://filedropper.com? То есть, модель, где после вызова 'cpx.solve()' вы получаете «CPLEX Error 1262» при вызове 'cpx.solution.basis.get_basis()'. Кроме того, можете ли вы воспроизвести это поведение в интерактивном режиме? – rkersh

+0

Совместное использование модели в настоящее время не является вариантом. Кроме того, модели чрезвычайно велики. Кроме того, я не собираюсь писать и отлаживать несколько сотен строк дублированного кода для интерактивного, просто чтобы воспроизвести ошибку. Сожалею. – Constantine

ответ

0

Я не уверен, почему вы получаете CPXERR_NO_BASIS. Смотрите мой комментарий.

Возможно, вам повезет, если вы указали значения для row_primal, col_dual и row_dual тоже. Например:

cpx2.start.set_start(col_status=[], 
        row_status=[], 
        col_primal=cpx.solution.get_values(), 
        row_primal=cpx.solution.get_linear_slacks(), 
        col_dual=cpx.solution.get_reduced_costs(), 
        row_dual=cpx.solution.get_dual_values()) 

Я был в состоянии воспроизвести поведение, вы можете описать с помощью afiro.mps модели, которая поставляется с примерами CPLEX (число детерминированных клещи фактически увеличилось при определении col_primal в одиночку). Тем не менее, при выполнении вышеизложенного это помогло (количество улучшений det ticks и итераций прошло до 0).

И, наконец, я не верю, что есть какая-то гарантия того, что использование set_start всегда поможет (в некоторых случаях это может быть даже плохая идея). У меня нет ссылок на это.

+0

Я реализовал вышеупомянутое предложение, однако оно все же не уменьшило число итераций. Я даже попытался решить ту же проблему (без изменения каких-либо параметров), и решатель все равно прошел полный набор итераций. – Constantine

 Смежные вопросы

  • Нет связанных вопросов^_^