如何在运输优化问题中限制DCs?

2024-06-28 20:09:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在典型的运输优化问题中,我们对给定的来源(配送中心)和需求(商店)点进行成本优化

在下面的示例中,我们如何添加附加约束以限制配送中心(DC)的数量

即。 问题:

if dc_lim=10 
total_available_DCs=30
Then Total DCs in optimize network<=dc_lim.

当前代码:

model = ConcreteModel()
model.dual = Suffix(direction=Suffix.IMPORT)

# Step 1: Define index sets
CUS = list(I) # Stores
SRC = list(Supply.keys()) # DCs (Distribution Centres)
K=list(Products)

# Step 2: Define the decision 
model.x = Var(CUS, SRC,K, domain = NonNegativeReals)

# Step 3: Define Objective
model.Cost = Objective(
    expr = sum([T[c,s,k]*model.x[c,s,k] for c in CUS for s in SRC for k in K if (c,s,k) in T]),
    sense = minimize)

# Step 4: Constraints
#Supply Constraint
model.src = ConstraintList()
for s in SRC:
    model.src.add(sum([model.x[c,s,k] for c in CUS for k in K if (c,s,k) in T]) <= Supply[s])

#Demand Constraint
model.dmd = ConstraintList()
for c in CUS:
    for k in K:
        model.dmd.add(sum([model.x[c,s,k] for s in SRC  if (c,s,k) in T]) == Demand[c,k])

        
results = SolverFactory('glpk').solve(model)


Tags: insrcformodelifstepdc中心
1条回答
网友
1楼 · 发布于 2024-06-28 20:09:35

最好是看数学,而不是一堆代码。我们开始吧

min sum((c,s,k), T(c,s,k)*x(c,s,k))
    sum((c,k), x(c,s,k)) ≤ supply(s)    ∀s
    sum(s, x(c,s,k)) = demand(c,k)      ∀c,k
    x(c,s,k) ≤ M(c,s,k)*y(s)            ∀c,s,k     "if closed don't ship from DC" 
    sum(s,y(s)) ≤ limit                            "limit number of open DCs" 
    y(s) ∈ {0,1}                                   "DC is open or closed"
    x(c,s,k) ≥ 0 
    M(c,s,k) = min(supply(s),demand(c,k))          "constants" 

将其转录成代码是微不足道的

相关问题 更多 >