需要求解的线性规划
from gurobipy import *
'''定义了一个线性松弛问题,并用Gurobi求解'''
initial_LP = Model('initial LP') # 定义变量initial_LP,调用Gurobi的Model,选择Initial Programming(整数规划)模型
x = {} # 创建一个空字典来存储决策变量
for i in range(2): # 创建两个决策变量
# 下界lb为0,上界ub为正无穷,变量类型vtype为连续型,变量名称name为x0和x1
x[i] = initial_LP.addVar(lb=0,ub=GRB.INFINITY, vtype=GRB.CONTINUOUS,name = 'x_'+str(i))
initial_LP.setObjective(100*x[0]+150*x[1],GRB.MAXIMIZE) # 目标函数,设置为最大化MAXIMIZE
initial_LP.addConstr(2*x[0]+x[1]<=10) # 约束条件1
initial_LP.addConstr(3*x[0]+6*x[1]<=40) # 约束条件2
initial_LP.optimize() # 调用求解器
for var in initial_LP.getVars():
print(var.Varname,'=',var.x)
输出结果截图
输出信息解释:
Set parameter Username: 这是一个提示,通常在你的 Gurobi 环境中需要设置用户名
Gurobi Optimizer version 10.0.3 build v10.0.3rc0 (win64): 这是 Gurobi 优化器的版本信息,指出你使用的是版本 10.0.3
CPU model: AMD Ryzen 5 6600H with Radeon Graphics, instruction set [SSE2|AVX|AVX2]: 这部分提供了计算机的 CPU 模型信息,以及支持的指令集
Thread count: 6 physical cores, 12 logical processors, using up to 12 threads: 这部分提供了有关计算机处理器的信息,包括物理核心数量和逻辑处理器数量,以及正在使用的线程数
Optimize a model with 2 rows, 2 columns and 4 nonzeros: 这部分提供了线性规划问题的规模信息。问题包含 2 个约束(rows),2 个变量(columns),以及 4 个非零元素
Model fingerprint: 0x60e6e1b1: 这是问题的唯一标识,可以用于识别不同的问题实例
Coefficient statistics: 这一部分提供了与问题的系数统计信息,包括矩阵范围、目标函数范围、边界范围以及右侧(约束右手边)范围
Iteration Objective Primal Inf. Dual Inf. Time: 这一部分是 Gurobi 求解线性规划问题时的迭代信息。其中包括了每次迭代的目标值、主问题不可行度、对偶问题不可行度和用时
Primal Inf(主问题不可行度):当 Primal Inf 的值为零时,表示找到了一个可行的解决方案,即问题的所有约束条件都得到满足。如果 Primal Inf 的值大于零,这意味着问题不是可行的,即无法找到满足所有约束条件的解决方案。Primal Inf 的绝对值越大,表示问题的不可行度越高
Dual Inf(对偶问题不可行度):当 Dual Inf 的值为零时,表示对偶问题的解是可行的,这通常是好的。如果 Dual Inf 的值大于零,这意味着对偶问题是不可行的,这可能会影响原始问题的最优解