在MATLAB的基于问题的优化中使用Gurobi


在MATLAB的基于问题的优化中使用Gurobi

从R2017b版本开始,MATLAB优化工具箱提供了一种制定优化问题的替代方法,即“基于问题的优化”。在本节中,我们将解释如何将这种建模技术与Gurobi求解器结合使用。手机万博登录

基于问题的建模方法对优化问题的组成部分采用面向对象的范式;优化问题本身、决策变量和线性约束都用对象表示。它们的创建和修改是通过方法实现的。基于问题的优化的完整文档是manbet体育手机客户端优化工具箱的一部分;我们只介绍一个简单的例子。为此,MATLAB路径包含Gurobi的示例目录是很重要的,可以设置如下:


addpath(fullfile(, 'examples', 'matlab'));

第一步是创建一个优化问题:

概率= optimproblem(“ObjectiveSense”、“最大化”);

的变量概率现在指的是一个优化问题对象,我们已经指定它为一个最大化问题。接下来我们创建三个非负优化变量:xyz

x = optimvar('x', 'LowerBound', 0);y = optimvar('y', 'LowerBound', 0);z = optimvar('z', 'LowerBound', 0);

有了这些变量,我们现在构建线性表达式来设置一个目标函数,并添加两个线性约束概率

概率。目标= x + 2 * y + 3 * z;prob.Constraints。con1 = x + y <= 1;prob.Constraints。con2 = y + z <= 1;

最后,我们创建一个引导选项对象概率线性规划求解函数的求解方法手机万博登录linprog,并将解决方法。

选择= optimoptions(“linprog”);Sol = solve(prob, options);

例子在上面的第一步中,已经将Gurobi安装的目录添加到该路径中,在这个阶段发生了一些神奇的事情:该目录包含一个文件linprog.m,以便调用解决方法最终调用后一个函数而不是内置函数linprogMATLAB的优化工具箱。以下来自Gurobi的输出将显示在控制台上:

Gurobi Optimizer version 9.1.2 build v9.1.2rc0 (linux64)

优化2行3列4个非零模型指纹:0x3a4c68c2系数统计:矩阵范围[1e+00, 1e+00]目标范围[1e+00, 3e+00]界限范围[0e+00, 0e+00] RHS范围[1e+00, 1e+00] Presolve去掉2行3列Presolve时间:0.03秒Presolve:所有的行和列删除迭代目标原始Inf.对偶Inf.时间0 -4.0000000e+00 0.000000000e +00 0.000000000e +00 0s在0次迭代和0.05秒内解决最佳目标-4.000000000e+00

我们刚才讨论的例子可以在例子文件中的目录opttoolbox_lp.m.这个例子opttoolbox_mip1.m展示了一个使用该函数的整数变量的类似问题公式intlinprog.m,也可以在Gurobi examples目录中找到,作为MATLAB内置对应版本的替代。

优化工具箱提供的建模结构并没有涵盖Gurobi的所有特性,例如SOS、半连续变量和一般约束等等。而且,并不是所有的Gurobi参数在选项对象中都有等效的对应项linprogintlinprog.为了使用这些特性,应该使用Gurobi自己的Matlab API。