CPLEX + YALMIP Решатель не найден?

Я пытаюсь начать работу с YALMIP , который представляет собой интерфейс Matlab для решателей оптимизации, таких как CPLEX . У меня есть целевая функция obj и ограничения cons, и я подключил их к Ялмипу ...

options=sdpsettings('solver','Cplex'); %windows needs uppercase 'Cplex' and unix is ok with 'cplex' or 'Cplex'
solvesdp(cons,obj,options); %prints 'Warning: Solver not found'

В приведенном выше коде solvesdp выводит Предупреждение: решатель не найден. .m, содержащий obj, cons и вызовы Ялмипа, работает на компьютере моего друга, и мы не понимаем, почему он не работает на моем компьютере.


Вот шаги по настройке CPLEX и Yalmip, которые я выполнил на моем компьютере Ubuntu 12.04 с Matlab R2012b:

  1. Установлен IBM CPLEX здесь: /home/user/ibm/ILOG/CPLEX_Studio125/cplex
  2. Установил Ялмип здесь: home/user/yalmip
  3. Добавлены CPLEX и Yalmip в мой путь к Matlab (и подтверждено, что все каталоги существуют):

    addpath(genpath('/home/user/yalmip'))
    addpath(genpath('/home/user/ibm/ILOG/CPLEX_Studio125/cplex/matlab'))
    addpath(genpath('/home/user/ibm/ILOG/CPLEX_Studio125/cplex/examples/src/matlab'))

Ниже я объясняю, как я пытался диагностировать проблему. Очевидно, что Matlab может видеть CPLEX, Matlab может видеть Yalmip, но Yalmip не видит CPLEX.

Подтверждено, что Yalmip и CPLEX находятся на моем пути к Matlab:

MATLAB> path
    /home/user/ibm/ILOG/CPLEX_Studio125/cplex/examples/src/matlab
    /home/user/ibm/ILOG/CPLEX_Studio125/cplex/matlab
    /home/forrest/ibm/ILOG/CPLEX_Studio125/cplex/matlab/help
    /home/forrest/ibm/ILOG/CPLEX_Studio125/cplex/matlab/help/helpsearch
    /home/forrest/ibm/ILOG/CPLEX_Studio125/cplex/matlab/help/topics
    /home/user/yalmip
    /home/user/yalmip/demos
    /home/user/yalmip/extras
    /home/user/yalmip/modules
    /home/user/yalmip/modules/bilevel
    /home/user/yalmip/modules/global
    /home/user/yalmip/modules/moment
    /home/user/yalmip/modules/parametric
    /home/user/yalmip/modules/robust
    /home/user/yalmip/modules/sos
    /home/user/yalmip/operators
    /home/user/yalmip/solvers
    ...

Чтобы убедиться, что Matlab действительно может найти CPLEX, я запустил help cplexlp. Он дал действительный результат:

MATLAB> help cplexlp
cplexlp
Solve linear programming problems.
x = cplexlp(f,Aineq,bineq) solves the linear programming problem min f*x such that Aineq*x <= bineq.
...

Кроме того, which cplex дает следующий результат: /home/user/ibm/ILOG/CPLEX_Studio125/cplex/matlab/@Cplex/Cplex.p

И which yalmip дает такой результат: /home/user/yalmip/extras/yalmip.m

Я запустил yalmiptest в командной строке Matlab. Выходные данные подтверждают, что Matlab может найти Yalmip, но Yalmip не может найти CPLEX:

MATLAB> yalmiptest
+++++++++++++++++++++++++++++++++++++++++++++++
|       Searching for installed solvers       |
+++++++++++++++++++++++++++++++++++++++++++++++
|        Solver|   Version/module|      Status|
+++++++++++++++++++++++++++++++++++++++++++++++
|       LINPROG|                 |       found|
|      QUADPROG|                 |       found|
|        LMILAB|                 |       found|
|       FMINCON|        geometric|       found|
|       FMINCON|         standard|       found|
|    FMINSEARCH|                 |       found|
|           BNB|                 |       found|
|      BINTPROG|                 |       found|
|        CUTSDP|                 |       found|
|        BMIBNB|                 |       found|
|         KKTQP|                 |       found|
|          NONE|                 |       found|
|     LSQNONNEG|                 |       found|
|        LSQLIN|                 |       found|
|        GUROBI|           GUROBI|   not found|
|        GUROBI|              MEX|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|         CPLEXINT|   not found|
|           CBC|                 |   not found|
|          GLPK|       GLPKMEX-CC|   not found|

Я также поискал ответы на форумах IBM. Друг указал мне на эту публикацию на форумах IBM о диагностике CPLEX / Yalmip, но сообщение больше ориентировано на Windows и не решило мою проблему.


Подробнее:

  • Ялмип версия 26.09.2012
  • CPLEX версии 12.5

person solvingPuzzles    schedule 25.11.2012    source источник


Ответы (1)


Покопавшись в исходном коде Yalmip, я в конце концов обнаружил проблему.

В исходном коде Yalmip есть файл с именем yalmip/solvers/definesolvers.m. В definesolvers.m есть несколько таких утверждений:

solver(i) = lpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.4';
solver(i).checkfor = {'cplexlp.m','cplexlink124'};
...

Эти операторы существуют для CPLEX 12.0, 12.1, 12.2, 12.3 и 12.4. Но я использую CPLEX 12.5, а для CPLEX 12.5 нет такого оператора.

Я заменил все экземпляры 12.4 на 12.5 и заменил экземпляры cplexlink124 на cplexlink125. Мой код оптимизации теперь работает!

Вот новый результат yalmiptest:

>> yalmiptest
+++++++++++++++++++++++++++++++++++++++++++++++
|       Searching for installed solvers       |
+++++++++++++++++++++++++++++++++++++++++++++++
|        Solver|   Version/module|      Status|
+++++++++++++++++++++++++++++++++++++++++++++++
|         CPLEX|              IBM|       found|
|         CPLEX|              IBM|       found|
|         CPLEX|              IBM|       found|
|       LINPROG|                 |       found|
|      QUADPROG|                 |       found|
|        LMILAB|                 |       found|
|       FMINCON|        geometric|       found|
|       FMINCON|         standard|       found|
|    FMINSEARCH|                 |       found|
|           BNB|                 |       found|
|      BINTPROG|                 |       found|
|        CUTSDP|                 |       found|
|        BMIBNB|                 |       found|
|         KKTQP|                 |       found|
|          NONE|                 |       found|
|     LSQNONNEG|                 |       found|
|        LSQLIN|                 |       found|
|        GUROBI|           GUROBI|   not found|
|        GUROBI|              MEX|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
|         CPLEX|              IBM|   not found|
...

Я предполагаю, что оставшиеся CPLEX| IBM| not found| строки означают, что CPLEX 12.0, 12.1, 12.2 и 12.3 не найдены.

person solvingPuzzles    schedule 26.11.2012