Python PuLP Перезапись ранее поставленной цели. и __dummy = None

Я построил довольно сложный MIP на Python PuLP. Очевидно, для меня это слишком сложно. Когда я запускаю его, появляется следующее предупреждение:

UserWarning: перезапись ранее установленной цели. warnings.warn («Перезапись ранее поставленной цели.»)

Проблема выполняет некоторые вычисления, но не находит ожидаемого решения.

LpStatus[prob.status] возвращает Optimal

prob.objective возвращает None

Когда я печатаю prob.variables() с

for v in prob.variables():
    print(v.name, "=", v.varValue)

Я получаю __dummy = None между другими переменными.

Может ли кто-нибудь объяснить, что означает __dummy = None в этом контексте? Где искать решение? Я был почти уверен, что у меня только одна целевая функция.


person Axel    schedule 10.10.2017    source источник


Ответы (1)


Хорошо, я нашел решение. Я действительно переписал целевую функцию, не заметив этого.

Вот фрагмент кода, вызвавший предупреждение:

for i in range(len(items)):
        for l in range(L):
            prob += delta[0-l] == 0

переменная дельта - это список списков. Первый индекс отсутствовал, поэтому программа сравнила список с нулем. Поскольку это невозможно, уравнение всегда возвращает false (может быть закодировано как ноль), которое затем интерпретируется как целевая функция.

Это решило проблему:

for i in range(len(items)):
        for l in range(L):
            prob += delta[i][0-l] == 0

Теперь он добавляет уравнения вместо значений к проблеме.

Надеюсь, это поможет любому, кто столкнется с подобной проблемой.

person Axel    schedule 10.10.2017