Я хочу получить доступ к значению переменной Gurobi - PullRequest
0 голосов
/ 23 мая 2018

Я хочу получить доступ к значению переменных 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 голосов
/ 29 мая 2018

Вы правильно получаете доступ к значениям переменной через атрибут 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_ на ноль является оптимальным решением.

0 голосов
/ 23 мая 2018

Вы можете получить доступ к его значению, вызвав атрибут *.X переменной, как описано в документации GUROBI .Для справки прямая ссылка на атрибут: X Атрибут

...