我想访问Gurobi Variable的值

时间:2018-05-23 15:13:24

标签: python gurobi

我想在这里访问gurobi变量self.a和self.b的值,但是它返回0.0。如何访问这些变量的值。代码在

之下
from gurobipy import GRB, Model

class abc(object):
    def __init__(self):
        self.model = Model()

    def creatingvarriables(self):
        self.a = self.model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="y_")
        self.b = self.model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="q_")
        self.model.update()

    def constraint1(self):
        lhs1 = self.model.getVarByName("y_")
        lhs1 = 2
        rhs1 = self.model.getVarByName("q_")
        rhs1 = 3
        self.model.update()
        self.model.addConstr(lhs1, GRB.LESS_EQUAL, rhs1)

    def printvalues(self):
        self.model.optimize()
        #self.model.printAttr('')
        print self.a.X
        print self.b.X

if __name__ == "__main__":
    newobject = abc()
    newobject.creatingvarriables()
    newobject.constraint1()
    newobject.printvalues()

2 个答案:

答案 0 :(得分:0)

您可以通过调用变量的*.X属性来访问它的值,如GUROBI's documentation中所述。作为参考,指向属性的直接链接:X Attribute

答案 1 :(得分:0)

您正在通过X属性正确访问变量值。您对零解决方案感到困惑的原因是方法constraint1中的错误:

lhs1 = self.model.getVarByName("y_")
lhs1 = 2
rhs1 = self.model.getVarByName("q_")
rhs1 = 3
self.model.update()
self.model.addConstr(lhs1, GRB.LESS_EQUAL, rhs1)

首先分配给创建变量的lhs1rhs1引用,然后用数字覆盖它们。实际上,您正在添加约束2 <= 3,该约束与y_q_无关。因此,将y_q_设置为零是最佳解决方案。