Я пытаюсь начать работу с 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:
- Установлен IBM CPLEX здесь:
/home/user/ibm/ILOG/CPLEX_Studio125/cplex
- Установил Ялмип здесь:
home/user/yalmip
- Добавлены 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