Оптимизация PYOMO для удовлетворения спроса <спрос

1

У меня есть некоторый код для управления цепочкой поставок, основанный на затратах, когда попытки поставок удовлетворяют спрос, но это работает только тогда, когда предложение превышает спрос. Есть ли способ, которым я могу оптимизировать его для работы обоими способами (то есть, когда supply > demand и supply < demand)?

from pyomo.core import *
model = AbstractModel()
model.warehouses = Set()
model.stores = Set()
model.supply = Param(model.warehouses)
model.demand = Param(model.stores)
model.costs = Param(model.warehouses, model.stores)
model.amounts = Var(model.warehouses, model.stores, 
within=NonNegativeReals)

def costRule(model):
   return sum(
      model.costs[n,i]
      for n in model.warehouses
      for i in model.stores
)

model.cost=Objective(rule=costRule)

def minDemandRule(model, store):
    return sum(model.amounts[i, store] for i in model.warehouses) >= 
model.demand[store]

model.demandConstraint = Constraint(model.stores, rule=minDemandRule)

def maxSupplyRule(model, warehouse):
    return sum(model.amounts[warehouse, j] for j in model.stores) <= 
model.supply[warehouse]

model.supplyConstraint = Constraint(model.warehouses, rule=maxSupplyRule)

Мой вклад:

set warehouses := hyd ban coh;
set stores := cbe mdu cnr whc whe;
param: supply :=
hyd   10
ban   10
coh   10;
param: demand :=
cbe    5
mdu    5
cnr    5
whc    5
whe    5;
param costs:
      cbe mdu cnr whc whe:=
hyd    1   3    2   2    1
ban    4   5    1   1    3
coh    2   3    3   2    1;

Здесь supply = 30 а demand = 25. Это работает, и вывод, который я получаю, является Переменным:

amounts[ban,cbe]:
    Value: 5
amounts[ban,whc]:
    Value: 5
amounts[coh,whe]:
    Value: 5
amounts[hyd,cnr]:
    Value: 5
amounts[hyd,mdu]:
  Value: 5

Но это не работает, когда предложение меньше, чем спрос. Здесь supply = 30 а demand = 40:

param: supply :=
hyd   10
ban   10
coh   10;
param: demand :=
cbe    5
mdu    5
cnr    5
whc    5
whe    20;
param costs:
      cbe mdu cnr whc whe:=
hyd    1   3    2   2    1
ban    4   5    1   1    3
coh    2   3    3   2    1;

Мне нужен желаемый результат, как показано ниже: Переменная:

amounts[ban,cbe]:
  Value: 5
amounts[ban,whc]:
  Value: 5
amounts[coh,whe]:
  Value: 10
amounts[hyd,cnr]:
  Value: 5
amounts[hyd,mdu]:
  Value: 5

 whe_demand =10
  • 0
    Похоже, что форматирование вашего вопроса может потребовать небольшого труда, так как его трудно прочитать в его нынешнем виде.
  • 0
    @QiChen К сожалению об этом. Я думаю, что теперь должно быть хорошо
Теги:
python-3.x
pyomo
python-packaging

1 ответ

0

Похоже, ваша модель невозможна, когда спрос превышает предложение из-за ограничения model.demandConstraint. Количества отгрузки не могут удовлетворить спрос, потому что в противном случае была бы нарушена другая model.supplyConstraint ограничения model.supplyConstraint.

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

Эта книга может быть хорошим источником для вас: https://www.wiley.com/en-us/Model+Building+in+Mat математический +Programming%2C+5th+Edition-p-9781118443330

Ещё вопросы

Сообщество Overcoder
Наверх
Меню