python通过Gurobi求解线性规划

文章目录

    • Gurobi
    • Gurobi中主要的变量类型
    • Gurobi使用基本步骤
    • 求解线性规划模型
      • 代码实现

Gurobi

Gurobi是一款强大的商业数学规划求解器,用于解决线性规划(LP)、整数规划(IP)、混合整数规划(MIP)、二次规划(QP)、非线性规划(NLP)等各种优化问题。它具有高效的求解算法、丰富的功能和友好的用户界面,被广泛应用于学术界和工业界。Gurobi采用了最先进的优化算法和技术,具有出色的求解速度和效率。它能够处理大规模、复杂的数学规划问题,并在较短的时间内找到最优解或接近最优解。

Gurobi中主要的变量类型

Gurobi中Model.addVar()用到的变量类型 vtype主要有以下三种

  • 连续变量(Continuous Variables):连续变量可以在其定义的上下界之间取任意实数值。在Gurobi中,连续变量用GRB.CONTINUOUS表示,Gurobi默认是连续变量。
  • 整数变量(Integer Variables):整数变量只能取整数值。在Gurobi中,整数变量用GRB.INTEGER表示。
  • 二进制变量(Binary Variables):二进制变量只能取0或1。在Gurobi中,二进制变量用GRB.BINARY表示。

Gurobi使用基本步骤

在安装Gurobi之后,为了可以在Python中调用Gurobi函数,可以通过以下命令安装Gurobi Python接口:

pip install gurobipy

使用步骤

  1. 引入Gurobi的环境:from gurobipy import *
  2. 建立模型:创建Gurobi模型:Model()
  3. 变量声明:Model.addVar()
  4. 添加目标函数:Model.setObjective()
  5. 添加条件约束:Model.addConstr()
  6. 模型求解:Model.optimize()

求解线性规划模型

python通过Gurobi求解线性规划_第1张图片

代码实现

'''1导入优化包'''
from gurobipy import *  # 在Python中调用gurobi求解包

'''2 建立模型'''
LP = Model("LP_model")  # LP_test为线性规划模型名称,可以直接套用
'''============2.1变量声明=================
lb表示变量的下届,up表示变量的上界,name为变量名称'''
OP = LP.addVar(lb=-GRB.INFINITY, ub=GRB.INFINITY, name="OP")
x1 = LP.addVar(lb=-GRB.INFINITY, ub=GRB.INFINITY, name="x1")
x2 = LP.addVar(lb=-3, ub=GRB.INFINITY, name="x2")

''' ===========2.2设置目标函数=========
#GRB.MINIMIZE表示求最小值的最优解,GRB.MAXIMIZE求最大值的最优解 '''
LP.setObjective(-2 * x1 + 4 * x2, GRB.MINIMIZE)

''' ===========2.3添加条件约束==========='''
LP.addConstr(-3 * x1 + x2 <= 6, "Con1")
LP.addConstr(x1 + 2 * x2 >= 4, "Con2")
LP.addConstr(x1 + 3 * x2 == 4, "Con3")

'''3模型求最优解'''
LP.optimize()
print("输出名为‘LP_Expression’的 .lp文件")
#将程序的运行结果写入以.lp结尾的文件中
LP.write("LP_Expression.lp")
# 输出结果
print('====最优解为========')
 # 输出目标最优值
print('OP is :', LP.ObjVal) 
#输出X1的值
print('x1 is :', x1.x)  
#输出X2的值
print('x2 is :', x2.x)  

程序运行结果

\ Model LP_Exam
\ LP format - for model browsing. Use MPS format to capture full model detail.
Minimize
  0 OP - 2 x1 + 4 x2
Subject To
 Con1: - 3 x1 + x2 <= 6
 Con2: x1 + 2 x2 >= 4
 Con3: x1 + 3 x2 = 4
Bounds
 OP free
 x1 free
 x2 >= -3
End

你可能感兴趣的:(数学建模,python,算法)