У меня есть некоторый код для управления цепочкой поставок, основанный на затратах, когда попытки поставок удовлетворяют спрос, но это работает только тогда, когда предложение превышает спрос. Есть ли способ, которым я могу оптимизировать его для работы обоими способами (то есть, когда 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
Похоже, ваша модель невозможна, когда спрос превышает предложение из-за ограничения model.demandConstraint
. Количества отгрузки не могут удовлетворить спрос, потому что в противном случае была бы нарушена другая model.supplyConstraint
ограничения model.supplyConstraint
.
Если вы хотите наказать отсутствие удовлетворения спроса, то вы можете определить слабые переменные для соответствующего ограничения и добавить эти термины к цели.
Эта книга может быть хорошим источником для вас: https://www.wiley.com/en-us/Model+Building+in+Mat математический +Programming%2C+5th+Edition-p-9781118443330