问题描述
我正在研究使用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中所做的事情。