【问题标题】:How to limit DCs in transportation optimization problem?如何在交通优化问题中限制 DC?
【发布时间】:2021-01-21 16:46:59
【问题描述】:

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

在下面的示例中,我们如何添加额外的约束来限制编号。配送中心(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)

【问题讨论】:

    标签: python optimization mathematical-optimization linear-programming pyomo


    【解决方案1】:

    查看数学而不是一堆代码要好得多。所以我们开始吧。

    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" 
    

    将其转录成代码很简单。

    【讨论】:

    • 嘿@Erwin,感谢您提供有用的见解。我只是有点难以理解,M(c,s,k) = min(supply(s),demand(c,k)),我们将如何定义它?它是包含每个 (c,s,k) 的 's' 或需求 'c,k' 的最小供应量的数组吗?
    • 这是正确的。您可以将 M 设为 Python 数组或列表。
    • 谢谢,刚刚上一期,模型不可行,我认为是因为"x(c,s,k) ≤ M(c,s,k)*y(s) ∀c, s,k" ,这是一个约束吗?
    • limit 增加到 30,看看会发生什么。您需要学习如何调试不可行的模型才能有效地使用优化工具。
    • 很高兴看到操作员如何更新他们的代码以反映这个唯一的数学答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2021-08-09
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多