2013-11-19 6 views
2

Привет Я хочу, чтобы решить линейное программирование (ЛП), которая имеет 25000 двоичных переменных и почти 2555 ограничений равенства и 50 неравенства ограничений, поэтому я использовал cplexbilp функция, которая CPLEX API, предусмотренные MATLAB, как это:MATLAB разбился при использовании CPLEX API для линейного программирования

[x,fval,exitflag,output,] = cplexbilp(f, Aineq, bineq, Aeq, beq); 
  • размер матриц: F = 25000x1, Aineq = 50x25000, bineq = 50x1, Aeq = 2555x25000, BEQ = 2255x1

при запуске сценария, появляется эта ошибка:

enter image description here

Когда я пересматриваю подробную информацию об ошибке, я вижу это сообщение:

0x6df51ba9 C:/Program Файлы/IBM/ILOG/CPLEX_Studio_Preview125/cplexlink125.mexw32 + 00007081 (??? + 000000)

Я думаю cplexlink125.mexw32 - это cplex v12.5 для библиотеки MATLAB.
Итак, мой вопрос заключается в том, как решить эту ошибку? и я хочу знать, является ли размер проблемы (25000 двоичных переменных) основной ошибкой root? Я читал в некоторых ресурсах, что Cplex способен решать проблемы большого масштаба LP.

  • версия MATLAB: R2011a
  • CPLEX версия: 12.5

Заранее спасибо за любой комментарий или ответить

+1

Можете ли вы решить проблемы меньшего размера? – Inquest

+0

@Inquest, для проблем, число переменных которых меньше 300, сценарий работает хорошо, я имею в виду, что без упомянутой выше ошибки не сходится к оптимальному решению. когда число переменных равно 300, у меня есть 120 ограничений равенства и 15 ограничений неравенства. – oMiD

+1

Во-первых, попробуйте увеличить доступную память. Попытайтесь выяснить, когда он падает. Много раз памяти недостаточно для создания многих переменных. Скорее всего, вам придется изменить свою формулировку (эвристические подходы, Dantzig-Wolfe, .......) – Kalle

ответ

1

кажется, что вы используете "студенческую версию" CPLEX. Эта версия ограничивается решением проблем с «до» 300 переменных и 300 ограничений. Я решил множество проблем, содержащих более 100 000 двоичных и целочисленных переменных в «коммерческой версии» без каких-либо ошибок.

1

Раньше я использовал CPlex API с MATLAB. CPlex вызывался почти до 10^6 раз для каждого запуска моего кода. И в каждом вызове CPlex имел дело с более крупными матрицами коэффициентов, чем ваши. Я испытывал утечку памяти с CPlex всякий раз, когда использовал его с MATLAB. Затем я переключился на гуроби, который немного медленнее, чем cplex, но более стабильный. (Моя математическая модель не имела двоичных или целочисленных переменных. Мои переменные были непрерывными и неотрицательными. Бинарные переменные усложняют задачу экспоненциально. Эта проблема также может быть вызвана двоичными переменными. 25000 двоичных переменных действительно слишком много).

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