Как узнать значение найденной при решении ЛП пульпы?

Мне было интересно, есть ли способ получить результаты LP (линейной программы), найденные при решении вашей проблемы. Значения, которые я ищу, - это не то, какой процент каждого элемента следует использовать, а значение, найденное для каждого из ваших ограничений. Я просмотрел документацию и строки документации для модуля целлюлозы и не нашел способа получить значения.

Сайт, который я просмотрел, чтобы проверить, есть ли способ:

https://pythonhosted.org/PuLP/pulp.html


person Community    schedule 11.04.2018    source источник
comment
Вы имеете в виду во время решения или когда оно закончилось?   -  person user3053216    schedule 12.04.2018
comment
Когда он закончился.   -  person    schedule 12.04.2018


Ответы (1)


Не уверен, что полностью понял ваш вопрос. Я предполагаю, что вы спрашиваете, как найти значение ограничения массы.

Пусть проблема будет вашей линейной задачей.
Вы можете получить значение ограничения двумя способами:

    # iterate over the variables of the constraint and sum their values
    # I'm not considering here the possibility that varValue may be None
    for constraint in prob.constraints:
        constraint_sum = 0
        for var, coefficient in prob.constraints[constraint].items():
            constraint_sum += var.varValue * coefficient
        print(prob.constraints[constraint].name, constraint_sum)

В противном случае напрямую с помощью атрибута значения, но если ограничение имеет правую сторону, вы должны обратить внимание и рассмотреть его, поскольку значение ограничения будет учитывать его.

    # getting the value of the constraint  
    for constraint in prob.constraints:
        print(prob.constraints[constraint].name, prob.constraints[constraint].value() - prob.constraints[constraint].constant)

Действительно, именно так реализован метод value() в LpAffineExpression, суперклассе LpConstraint: https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py

def value(self):
    s = self.constant
    for v,x in self.items():
        if v.varValue is None:
            return None
        s += v.varValue * x
    return s
person abc    schedule 12.04.2018