我正试图在matlab中使用CPLEX(cplexqp(来解决一个大的二次优化问题。不幸的是,H矩阵(或一些来源称之为Q矩阵(本质上是非凸的,因此我想将最优性目标从0(默认值(设置为3,以告诉CPLEX在发现Q是非凸时不要终止。但是,我不知道该怎么做。我试着阅读了手册和说明,他们都只是说设置最优性目标=2或3,而没有任何实际的例子或关于如何做到这一点的一般命令。我试着在选项中这样做,但得到了一个错误,即CPLEX不识别"optimilitytarget"。
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
,但我似乎不知道在哪里设置它。
如果这是一个琐碎或愚蠢的问题,我很抱歉。我觉得这是一件非常简单的事情,要么你知道,要么你不知道,我不知道该怎么做。非常感谢在这方面的任何帮助或建议。
您可以在分布中的MATLAB中找到使用CPLEX的示例。它们位于[installPath]/cplex/examples/src/matlab
。
您提到您正在使用cplexqp
,这是工具箱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;
Model=cplex。Cplex("filename.mps"(模型.参数.最佳目标.设置(浮动(3((
这对我有用!