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

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

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

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

1 ответ

Решение

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

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

    # 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:
        sum = 0
        for var, coefficient in prob.constraints[constraint].items():
            sum += var.varValue * coefficient
        print(prob.constraints[constraint].name, sum)

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

    # 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
Другие вопросы по тегам