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()

    求解线性规划模型

    代码实现

    '''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
    
    

    作者:vibag

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python结合Gurobi求解线性规划详解

    发表回复