5

CPLEXなどの最適化ソルバーへのMatlabインターフェイスであるYALMIPを使い始めようとしています。目的関数と制約があり、それらをYalmipに接続しました...objcons

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を出力します。を含む、、、およびYalmipへの呼び出しは、私の友人のコンピューターで機能しますが、なぜそれが私のコンピューターで機能しないのかについて私たちは困惑しています。.mobjcons


以下は、MatlabR2012bを使用してUbuntu12.04マシンで行ったCPLEXとYalmipのセットアップ手順です

  1. ここにIBMCPLEXをインストールしました:/home/user/ibm/ILOG/CPLEX_Studio125/cplex
  2. ここにYalmipをインストールしました:home/user/yalmip
  3. MatlabパスにCPLEXとYalmipを追加しました(そしてすべてのディレクトリが存在することを確認しました):

    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

yalmiptestMatlabコマンドプロンプトで実行しました。出力は、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に焦点を当てたものであり、私の問題は実際には解決しませんでした。


詳細:

  • Yalmipバージョン2012-09-26
  • CPLEXバージョン12.5
4

1 に答える 1

5

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を使用しており、CPLEX12.5にはこのようなステートメントはありません。

のすべてのインスタンスをに置き換え、のインスタンスをに12.4置き換え12.5ましcplexlink124cplexlink125。私の最適化コードが機能するようになりました!

これが次の新しい出力です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が見つからないことを意味していると思います。

于 2012-11-26T01:00:29.497 に答える