附加器

优化求解器Gurobi的MVar类矩

发布时间:2022/7/18 15:24:13   
白癜风症状特点是什么 http://m.39.net/pf/a_4381149.html

作者

刘兴禄,清华大学博士在读

修宇璇,清华大学博士在读

优化求解器的建模方式:以gurobi为例

Gurobi的MVar(矩阵形式变量对象)

一个线性规划的例子:Wyndor玻璃厂

问题的建模

基于Gurobi进行按矩阵形式建模:完整代码

将Var对象转成MVar对象

`Model.getA()`函数的使用

基于矩阵形式建模的对偶问题的书写及建模

基于Gurobi进行按矩阵形式进行对偶问题的建模并求解

小结

本文涉及到的模型(LP,MIP)均是为了说明问题,即使是MIP,我们也将其当作LP看待。

LP:linearprogramming,线性规划;MIP:mixedintegerprogramming,混合整数(线性)规划。1优化求解器的建模方式:以gurobi为例

我们考虑如下的线性规划问题

该模型有2个决策变量

,3个约束。

如果我们使用Gurobi对其进行建模,一般有下面3(或者说4)种方法:

按行建模:逐行进行建模。通过使用quicksum或者创建表达式LinExpr对象结合addTerms,拼凑表达式,最后使用Model.addConstr完成添加约束的操作,从而完成建模;按列建模:逐列进行建模。通过创建Column对象,使用addTerms函数拼凑好Column对象,最后使用Model.addVar函数直接完成建模。按非零系数建模:类似于逐列进行建模,可以使用addTerms拼凑表达式。具体实现跟按行建模类似。按矩阵方式建模:通过拼凑约束系数矩阵

,然后将决策变量转化为MVar的对象,最后直接使用重载运算符

完成约束的添加,即如Model.addConstr(A

x==b),就可以完成建模。

前3种建模方法我们已经在之前的推文中有所涉及,见推文:

优化

手把手教你用Python调用Gurobi求解VRPTW

优化

视频详解Python调用Gurobi的应用案例:TSP

论文代码复现

无人机与卡车联合配送(Python+Gurobi)

优化

史上最数学题求解的新尝试:一种求解器的视角(Python调用Gurobi实现)

优化

寻找新的建模视角——从直观解释对偶问题入手:以CuttingStockProblem的对偶问题为例

本文主要来介绍第四种:按矩阵方式建模。主要内容包括:

按矩阵方式建模的详细案例和代码;按矩阵方式建模,并通过求解器轻松得到对偶问题的例子和代码。

在介绍具体内容之前,笔者首先指出按照矩阵建模的好处和不足(仅列举部分):

优点:

添加约束代码量少,只需要拼凑好系数矩阵,即可一行代码搞定约束的添加;便于直接得到对偶问题的系数矩阵(

),从而快速得到对偶问题的具体形式。

缺点:

对于约束系数稀疏的模型,会占用不必要的内存来存储那些系数为0的部分,模型较大时,有可能导致内存溢出;虽然可以得到对偶问题的具体形式,但是对偶问题的公式形式却不能得出(这个严格来讲不算是这种建模方式的缺点)。不方便对每个决策变量赋予独一无二的变量名。

Gurobi提供了矩阵形式建模的API,下面我们就基于上述小例子来介绍Gurobi的矩阵建模。

2Gurobi的MVar(矩阵形式变量对象)

Gurobi的MVar可以查看手册中的相关内容:



转载请注明:http://www.aideyishus.com/lkcf/929.html

------分隔线----------------------------

热点文章

  • 没有热点文章

推荐文章

  • 没有推荐文章