我正在尝试使用Matlab中的CPLEX(cplexqp)解决一个较大的二次优化问题。不幸的是,H矩阵(或某些来源称其为Q矩阵)本质上是非凸的,因此我想将最优目标从0(默认值)设置为3,以告诉CPLEX当发现Q为非凸时不终止。但是,我不确定如何执行此操作。我试图阅读手册和说明,它们都只是说将最佳化目标设置为2或3,而没有任何实际示例或执行该操作的一般命令。我尝试在选项中执行此操作,但是出现了CPLEX无法识别“最优目标”的错误。
options = cplexoptimset('Display','on','TolFun',0.0000001,'TolRLPFun',0.0000001,'MaxNodes',50000,'MaxIter',50000, 'optimalitytarget',3);
我也尝试过:
Cplex = cplexoptimset('cplex')
Cplex.Param.optimalitytarget = 3;
没有任何成功。我知道API是Cplex.Param.optimalitytarget
,但我似乎无法弄清楚在何处设置它。
很抱歉,如果这是一个琐碎或愚蠢的问题。我觉得这是非常简单的事情之一,您要么知道,要么不知道,我也不知道如何做。对此的任何帮助或建议,我们将不胜感激。
答案 0 :(得分:1)
您可以在发行版的MATLAB中找到使用CPLEX的示例。它们位于[installPath]/cplex/examples/src/matlab
中。
您提到您正在使用cplexqp
,即toolbox API。看https://www.ibm.com/support/knowledgecenter/es/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/MATLAB/topics/gs_param.html,我怀疑第二个示例的问题与您使用Param
有关。该结构与Cplex类API有关,而不与工具箱API有关。我想以下方法会更好:
options = cplexoptimset('cplex');
options.optimalitytarget=3;
答案 1 :(得分:0)
模型 = cplex.Cplex("文件名.mps") Model.parameters.optimalitytarget.set(float(3))
这对我有用!