Я продолжаю получать ошибку в своем коде целлюлозы (размер лота с линейным программированием), что не так? - PullRequest
0 голосов
/ 05 марта 2020

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

from pulp import *

prob = LpProblem("Lot_Sizing_Problem", LpMinimize)

period = []
for i in range(H):
    period.append(i)

order = LpVariable.dicts('order', period, lowBound = 0, upBound = 1, cat='integer'),
orderamount = LpVariable.dicts('orderamount', period, lowBound = 0, cat='integer'),
inventory = LpVariable.dicts('orderamount', period, lowBound = 0, cat='integer'),

prob += lpSum([A*period[i]+h*(inventory[i]+orderamount[i]-D[i]) for i in period])

prob += (inventory[i+1] for i in period) == inventory[i]+orderamount[i]-D[i]
prob += (orderamount[i] for i in period) <= M*order[i]
prob += (orderamount[i] for i in period) == D[i] - inventory[i]

prob.solve()

Я получаю эту ошибку: TypeError: неподдерживаемые типы операндов для +: 'dict' и 'dict'

Это некоторые примеры значений, которые нужно вставить, результат должен быть 102,0: Это значения значений: (Временной горизонт: H, стоимость удержания : h, фиксированная стоимость установки: A, производственная мощность: C, список спроса: D и большой M: M)

H=10
h=0.5
A=10
C=18
D=[12,10,13,14,13,15,17,20,19,14]
M=C

Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

Было довольно много ошибок.

from pulp import *

prob = LpProblem("Lot_Sizing_Problem", LpMinimize)

H=10
h=0.5
A=10
C=18
D=[12,10,13,14,13,15,17,20,19,14]
M=100

period = list(range(H))

order = LpVariable.dicts('order', period, lowBound = 0, upBound = 1, cat='integer')
orderamount = LpVariable.dicts('orderamount', period, lowBound = 0, cat='integer')
inventory = LpVariable.dicts('inventory', period, lowBound = 0, cat='integer')

prob += lpSum([A*period[i]+h*(inventory[i]+orderamount[i]-D[i]) for i in period])

for i in period:
  if i<H-1:
    prob += inventory[i+1]  == inventory[i]+orderamount[i]-D[i]
  prob += orderamount[i]  <= M*order[i]
  prob += orderamount[i]  == D[i] - inventory[i]

prob.solve()

Обратите внимание, что использование dicts для индексации по целым числам не является нормальным подходом. Итак, я бы, наверное, написал:

order = [LpVariable(...) for i in period]

et c.

...