使用CPLEX作为求解器的MATLAB中的求解值参考

问题描述

我正在研究使用MATLAB对问题进行建模并使用CPLEX作为求解器来解决优化问题。一切正常,我能够找到解决方案。但是,可以说我有3个大小各异的优化变量,当我获得解时,我得到1个变量中所有变量的值,现在我必须设法获取每个单个变量的值。现在,如果我在python中执行此操作,而我的变量之一是x,则只需使用value.x即可获取x变量的值。是否有一种类似的方法来获取各个优化变量的值,而无需自己亲自寻找。这就是我用来获取解决方案的方法:

options = cplexoptimset('cplex');
options.timelimit = 300;
[sol3,fval3,exitflag3,output3] = cplexmiqp(PP.H,PP.f,PP.Aineq,PP.bineq,...
PP.Aeq,PP.beq,[],PP.lb,PP.ub,ctype,options);

如果我有3个乐观者。变量x1,x2和x3不是标量而是数组,我的解决方案以[x1 x2 x3]的形式存储在sol3中。我只想引用每个变量,而无需手动执行。

解决方法

对于CPLEX,变量只是一个索引,CPLEX不了解变量的子集以数组,列表,矩阵等形式组织的事实。因此,总的来说,答案是“您不能这样做” 。但是,您正在使用工具箱API,该API旨在替代Matlab工具箱功能,因此功能有限。

您可以切换到class API。使用此API,您可以显式地逐个或逐个数组地创建变量,并保留各个变量的索引。这有点类似于您在Python中所做的事情。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...