Предоставление ограничений в оптимизации с использованием Pulp

В настоящее время я работаю над проблемой оптимизации с использованием модуля Pulp в Python. Я хочу, чтобы мои переменные были целым числом, кратным 7500. Поэтому я создал константу, как указано ниже, но она показывает ошибку.

import pandas as pd
import numpy as np
from pulp import *

prob = LpProblem('Cost minimization' , LpMinimize)
X = LpVariable.dicts('',tsap.varName, lowBound=0, upBound=None,     cat=LpInteger)
prob += lpSum( X[i] * j for i,j in zip(tsap.varName, tsap.coeff)),'Total cost'

l=7500

for i in X:
prob += i % l == 0

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-73548ad8b39f> in <module>()
        1 for i in X:
  ----> 2     prob += i % l == 0
        3 

TypeError: not all arguments converted during string formatting

Есть ли способ достичь желаемой цели?


person Achlys    schedule 06.07.2017    source источник
comment
Вы пытаетесь использовать оператор по модулю, чего нельзя сделать в линейном программировании. Но вы могли бы установить фиктивную LpVariable, k, которая должна быть целым числом, а затем добавить ограничение, что i == 7500*k.   -  person thomaskeefe    schedule 06.07.2017


Ответы (1)


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

Однако простое решение состоит в том, чтобы сохранить целое число X[i], а затем в ваших ограничениях использовать 7500*X[i] и соответствующим образом сообщить о решении.

person Stuart Mitchell    schedule 06.07.2017