#matlab #cplex #ampl
#matlab #cplex #усиление
Вопрос:
Я решил проблему оптимального потока мощности (OPF), смоделированную как конусное программирование второго порядка (SOCP). Сначала я решил с помощью решателя CPLEX в AMPL lenguage и занял 0,08 с; затем я решил ту же проблему с помощью CPLEX для Matlab (команда cplexqcp) и занял 0,86 с. Показанное время соответствует только времени, требуемому решателем (CPLEX). Кто-нибудь знает, из-за чего такая разница во времени? Временные результаты для CPLEX / AMPL:
Elapsed AMPL time : 0.430s
Elapsed Solve time : 0.080s
Elapsed CPU time: 0.510s
Результаты времени для CPLEX / MATLAB:
:
tic
[x,fval]=cplexqcp([],f,[],[],Aeq,beq,l,Qc,r,Li,Ls);
toc
:
Elapsed time is 0.860856 seconds.
Примечание: проблема имеет 542 переменных.
Комментарии:
1. Если вы запустите этот код MATLAB во второй раз, вы все равно увидите то же время? Обычно при первом запуске функции MATLAB необходимо загрузить и проанализировать кучу файлов, что занимает дополнительное время.
2. Вы правы, но показанное время соответствует уже второму разу. Первый раз был на 1,0 секунды.
Ответ №1:
Трудно сказать, не имея доступа к деталям, но моим первым предположением была бы предварительная обработка. Перед передачей задачи решателю AMPL попытается упростить ее, например, исключив переменные, которые зависят от других переменных. Это может существенно повлиять на время решения.
(Для больших задач это также может иметь большое значение для времени ввода-вывода данных между AMPL и решателем, но только для 542 переменных это, вероятно, не является большой проблемой.)
Другая возможность заключается в том, что AMPL и Matlab вызывают CPLEX с разными параметрами (например, с разными допусками решения).