当前位置: 首页 > 知识库问答 >
问题:

CPLEX YALMIP--“未找到解算器”?

杨彦君
2023-03-14

我试着从YALMIP开始,它是一个Matlab接口,用于优化求解器,如CPLEX。我有一个目标函数obj和约束cons,我把它们插入了Yalmip。。。

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,对Yalmip的调用可以在我朋友的计算机上运行,我们很困惑为什么它不能在我的计算机上运行。

以下是我在我的Ubuntu 12.04机器上使用Matlab R2012b对CPLEX和Yalmip进行的设置步骤:

  1. 在此处安装IBM CPLEX:home/user/IBM/ILOG/CPLEX\u Studio125/CPLEX

    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.
...

另外,cplex给出了这个输出:/home/user/ibm/ILOG/CPLEX_Studio125/cplex/matlab/@Cplex/Cplex. p

yalmip给出了这个输出:/home/user/yalmip/extas/yalmip. m

我在Matlab命令提示符下运行了yalmiptest。输出验证了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的帖子,但是这篇文章更关注视窗,它并没有真正解决我的问题。

更多详细信息:

  • Yalmip版本2012-09-26

共有1个答案

俞衡虑
2023-03-14
匿名用户

在深入研究Yalmip源代码后,我最终发现了问题。

在Yalmip源代码中,有一个名为Yalmip/solvers/definesolvers的文件。m。在定义求解器中。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并将cplexlink 124的实例替换为cplexlink 125。我的优化代码现在有效!

这是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。

 类似资料:
  • 当我通过齐柏林飞艇使用pyspark时,我得到以下错误。 python和spark解释器可以工作,所有环境变量都设置正确。 信息[2017-11-01 12:30:42,972]({pool-2-thread-4}remoteinterpriser.java[init]:221)-创建远程解释器org.apache.zeppelin.spark.pysparkinterpriserorg.apac

  • 我的班级照片列表: 我的班级照片:

  • scala代码是: 打包以后的jar中有stopwords.dic这个文件 路径也是对的 但是还是报错了: Caused by: java.io.FileNotFoundException: file:/Users/laiyinan/Desktop/cc_core/out/artifacts/cc/cc_core.jar!/stopwords.dic (No such file or direct

  • 当我运行我的Android应用程序从eclipse,我得到这个错误。 从日蚀错误复制粘贴 然而,我的亚洲开发银行就在它说的不在的地方。 出了什么问题,如何解决? 我将cd放入adb所在的目录()中,输入adb并显示 adb是绿色的,这意味着它是可执行的,对吗? 例如,dx也是绿色的,当我在命令提示符中输入dx时,它工作了... adb怎么了?

  • 块引号 J拥有一个包含maven父项目(parent)和子项目(Domain,Web,Win)的Eclipse工作区。父pom包含wicket-spring-boot-starter-parent

  • 当我尝试使用或出现以下错误 JAVA错误:sun。安全ssl。SSLSessionImpl。(Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/CipherSuite;Ljava/util/Collection;Lsun/security/ssl/SessionId;Ljava/lang/String;I)V 在sun.security.ssl