我想在这里访问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()
答案 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)
首先分配给创建变量的lhs1
和rhs1
引用,然后用数字覆盖它们。实际上,您正在添加约束2 <= 3
,该约束与y_
和q_
无关。因此,将y_
和q_
设置为零是最佳解决方案。