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


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

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

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


AddPath(fullfile(,'示例','matlab'));

第一步是创建优化问题:

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

变量概率现在是指优化问题对象,我们指定是最大化问题。接下来我们创建三个非负优化变量:XyZ.

x = Optimvar('x','低行',0);Y = Optimvar('Y','Demplbound',0);z = Optimvar('Z','Lownbound',0);

使用这些变量手头,我们现在构建线性表达式,以便设置目标函数,并为其添加两个线性约束概率

prob.objective = x + 2 * y + 3 * z;prob.constraints.cons1 = x + y <= 1;prob.constraints.cons2 = y + z <= 1;

最后,我们创建了一个指南的选项对象概率对线性程序求解器功能的解决方法方法手机万博登录linprog,并打电话给解决方法。

选项= Optimoptions('linprog');sol =解决(prob,选项);

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

优化具有2行,3列和4个非系统系数统计的模型:矩阵范围[1E + 00,1E + 00]物镜范围[1E + 00,3E + 00]界限范围[0e + 00,0e + 00] RHS范围[1E + 00,1E + 00]预计删除2行和3列预定时间:0.03S预定:所有行和列已释放迭代目标原始INF。双伊米。时间0 -4.0000000E + 00 0.000000E + 00 0.000000E + 00 0s在0次迭代中解决和0.05秒最佳目标-4.00000000000 + 00

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

优化工具箱提供的建模构造不涵盖Gurobi,例如SOS,半连续变量和一般约束的所有特征,以命名几个。此外,所有Gurobi参数都有相同的对应物在选项对象中linprogintlinprog.。为了使用此类功能,应该使用Gurobi自己的Matlab API。