gurobi pi属性使用注意

con.getAttr(GRB.Attr.Pi)

变量类型不能是vtype=GRB.BINARY,否则无法访问pi属性,注意,认真看文档

只适用于连续模型:

pi就是dual price

默认目标函数是计算最小值时:

对于<=的约束条件,dual price是<=0的,对于>=0的约束条件,dual price是>=0的,对于=0的约束条件,dual price不受约束。

当目标函数是计算最大值时:

对于<=的约束条件,dual price是>=0的,对于>=0的约束条件,dual price是<=0的,对于=0的约束条件,dual price不受约束。

示例:

from gurobipy import *
dualArray=[]
try:

    # Create a new model
    m = Model("mip1")

    # Create variables
    x1 = m.addVar( name="y1")
    x2 = m.addVar( name="y2")
    x3 = m.addVar( name="y3")
    x4 = m.addVar( name="y4")
    # Set objective
    m.setObjective(x1 + x2 + x3 +x4, GRB.MINIMIZE)


    m.addConstr(x1 >= 50, "c0")
    m.addConstr(x2 >= 65, "c1")
    m.addConstr(x3+ 4*x4>= 80, "c2")
    m.optimize()
    
    c = m.getConstrs()  
    for v in m.getVars():
        print('%s = %g' % (v.varName, v.x))
    for i in range(m.getAttr(GRB.Attr.NumConstrs)):
      dualArray.append( c[i].getAttr(GRB.Attr.Pi))#GRB.Attr.SlackGRB.Attr.Pi  #con[i].getAttr(GRB.attr.Pi)

    print('Obj: %g' % m.objVal)
    print('pi:',dualArray)
except GurobiError as e:
    print('Error code ' + str(e.errno) + ": " + str(e))

except AttributeError:
    print('Encountered an attribute error')
要开始在Python中使用Gurobi的线性优化包,首先要确保Gurobi Python接口(`gurobipy`)已经成功安装。按照你的描述,Gurobi 7.0.2的`gurobipy`文件夹位于`D:\Software\gurobi702\win64\python27\lib\gurobipy`。 **步骤1**: 导入gurobipy模块 确保Python环境可以访问到这个文件夹,通常这可以通过在命令行或交互式环境中添加`gurobi`可执行文件所在的目录到`PYTHONPATH`环境变量来实现。如果你不确定怎么做,可以在代码中尝试导入: ```python import sys # 添加Gurobi安装路径到sys.path sys.path.append('D:\\Software\\gurobi702\\win64\\python27\\lib') # 然后再次尝试导入gurobipy try: import gurobipy as gp except ImportError as e: print(e) ``` **步骤2**: 创建模型并设置参数 创建一个`Model`对象,并配置所需的Gurobi参数: ```python model = gp.Model() # 设置Gurobi参数,例如MIPGap(整数解的目标差距) mip_gap = 0.01 model.setParam(gp.GRB.MIPGap, mip_gap) # ... ``` **步骤3**: 定义决策变量和约束 定义模型的变量和线性不等式约束: ```python # 创建决策变量 x = model.addVar(name='x', lb=0, ub=None, vtype=gp.GRB.CONTINUOUS) # 添加约束 c = 2 * x <= 10 # ... ``` **步骤4**: 求解模型 调用`model.optimize()`求解模型: ```python model.optimize() ``` 如果导入时遇到错误`ImportError: No module named gurobipy`,可能是路径设置不正确,或者`gurobipy`模块未被正确安装。请检查上述步骤,确认`gurobipy`已经被Python识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值