简化运输。 Excel和Python的网络设计
#python #problemsolving #machinelearning #msexcel

介绍
运输问题是一个经典的优化挑战,它围绕确定从多个来源到众多目的地的商品分配,同时最大程度地减少整体运输成本。

方案
在尘土飞扬的前哨基地,第二次机会回收有两个主要的收集中心A和B,每个收集中心都有一周的拖车的最大能力。收集中心A最多可容纳280个拖车,而收集中心B最多可容纳360个拖车。

该过程始于从收集点移至分类站的拖车,在那里它们将被分类和重新固化。然后,分类的材料将被发送到两个回收厂:复兴的植物和重生植物。复兴工厂的能力为305拖车,重生工厂的容量为325拖车。

要优化商品流,我们需要考虑每个位置之间移动拖车的成本。费用如下:

运输腿 成本 /拖车< / th>
集合a到分类 $ 13.58
收集B到分类 $ 16.54
分类 $ 7.57
对重生的分类 $ 16.46

我们的目标是找到最具成本效益的方式,将拖车从收集中心运送到通过分类站将拖车从收集中心运送到两个回收工厂。但是,必须记住,分类站无法容纳任何拖车。

通过有效地优化这种流程,第二次机会回收可以最大程度地降低成本,降低运输效率低下,并在尘土飞扬的哨所中有助于更可持续的回收过程。

数学问题

Image description

1. 决策变量
目的是找到每条腿之间的拖车数量(正整数)

<数学=“ block”> q t y i qty_{i}

where i - trailer count for every leg j

2.Objective Function :

i=14qtyicostj\sum_{i=1}^{4} qty_{i} *cost_{j}

where cost is the cost per trailer

3.Constraints:
a. The first leg of the network is to ensure that maximum number of trailers from the plants would be capped to the capacity of the collection plant

Leg1qtyiColCapacityiLeg1_qty_{i} \leq Col_Capacity_{i}

b. The second leg of the network is to ensure that maximum number of trailers from the sortation center to plant should the capacity of the collection plant

Leg2qtyiPlantCapacityiLeg2_qty_{i} \geq Plant_Capacity_{i}

c. Flow capacity is to enforce that what sum of trailers inbound to sortation plant should be sum of the trailers leaving / outbound of the sortation plant

Leg1qtyi=Leg2qtyi\sum Leg1_qty_{i} = \sum Leg2_ qty_{i}

方法1:Excel求解器

决策变量是每个运输腿的拖车#。 (在黄色细胞中突出显示)

对象功能是最大程度地降低运输总成本(即#拖车 *单个腿的成本)

约束1:每个离开收集点的拖车<每个收集点的容量(供应容量约束)

约束2:每个回收厂的所有拖车的总和应为回收厂的能力(需求)

约束3:流程约束是所有预告片的总和到sortation = sortation =所有拖车出站的总和

Image description

求解器的结果
目标函数:17249.75

运输腿 拖车
集合a到分类 280
收集B到分类 350
分类 305
对重生的分类 325

方法2:Python纸浆

import pulp as op

# Create the problem
prob = op.LpProblem("TrailerOptimization", op.LpMinimize)

# Decision variables
x1 = op.LpVariable("x1", lowBound=0, upBound=None, cat='Integer')
x2 = op.LpVariable("x2", lowBound=0, upBound=None, cat='Integer')
x3 = op.LpVariable("x3", lowBound=0, upBound=None, cat='Integer')
x4 = op.LpVariable("x4", lowBound=0, upBound=None, cat='Integer')

# Set the objective function
prob += 13.58 * x1 + 16.54 * x2 + 7.57 * x3 + 16.46 * x4

# Add constraints to the environment
prob += x1 <= 280
prob += x2 <= 360
prob += x3 >= 305
prob += x4 >= 325
prob += x1 + x2 == x3 + x4

# Solve the problem (other solvers: prob.solve(op.SOLVERNAME()))
prob.solve()

# The status of the solution
print("Status:", op.LpStatus[prob.status])

# Print the solution values
print('Solution:')
print('Objective value =', op.value(prob.objective))
print('x1 =', x1.varValue)
print('x2 =', x2.varValue)
print('x3 =', x3.varValue)
print('x4 =', x4.varValue)

INTEGER OPTIMAL SOLUTION FOUND Status: Optimal
Solution: Objective value = 17249.75
x1 = 280, x2 = 350, x3 = 305, x4 = 325

摘要
每个工具都带来了自己的一系列优势,您的选择最终将取决于运输优化需求的复杂性和规模。