首页 > 编程语言 >供应链产能受限型选址模型——Python实现

供应链产能受限型选址模型——Python实现

时间:2023-07-13 15:33:43浏览次数:40  
标签:设施 Python text sum 受限 供应链 选址 forall quad

选址问题是运筹学中非常经典的问题。选址问题是指在确定选址对象,选址目标区,成本函数以及存在何种约束条件的前提下,以总物流成本最低或总服务最优或社会效益最大化为总目标,以确定物流系统中物流节点的数量、位置,从而合理规划物流网络结构。设施选址问题(Facility Location Problem)自20世纪60年代初期以来,在运筹学中一直占据着中心位置。它来自于工厂、仓库、超市、学校、医院、图书馆、火车站、代理服务器、传感器等位置的确定问题。

一、设施选址问题

1.1 无容量设施选址方法

线性规划舍入(LP rounding)法。此类技巧整体思路为建立问题的整数线性规划,松弛得到线性规划。通过求解线性规划得到分数解,再将其舍入成整数解。由于算法设计是在松弛线性规划的分数最优解基础上进行的,在分析时有下界门槛,利于得到近似比。但同时, 也由于求解线性规划,丢失了问题自身的组合结构。

原始对偶(primal-dual)法。此类技巧整体思路为建立问题的整数线性规划, 松弛得到线性规划。此时不需要求解松弛规划,而是建立松弛规划的对偶规划。利用对偶上升的过程构造对偶规划可行解。进一步通过对偶变量与整数规划的关系构造原始整数可行解。原始对偶技巧具有较好的可移植性, 在很多选址的拓展问题有较好的应用。一般来说, 这类技巧所得的近似比较高。

局部搜索(local search)法。此类技巧整体思想为以任意可行解为初始解,定义在当前解的基础上进行增加一个设施、减少一个设施和交换一对设施三类运算。如果三类运算可以改进当前解,进行更新,否则算法终止。局部搜索技巧结构简单,易于实现。但同时,分析过程复杂,难移植且近似比较高。

1.2 带容量限制的设施选址

实际问题的选址环境由于资源有限,顾客需求丰富等原因会复杂得多,这样出现了大量选址的拓展问题。

(a)带软容量限制的设施选址问题: 每个设施都有容量限制,但可以通过支付多倍的设施费用得到多倍的容量从而对顾客提供服务。该问题的目标为选择每个设施开设的次数, 连接顾客到开设设施上且不违背设施的容量限制,使得开设费用和服务费用总和最小。
(b)带硬容量设施选址问题:每个设施都有容量限制, 且设施的容量不能通过多次支付费用获得。该问题的目标为选择开设一些设施, 连接顾客到开设的设施上且不违背设施的容量限制,使得开设费用和服务费用总和最小。
(c)带惩罚的设施选址问题:在选址中,可以对于某些距离较远的顾客不进行服务。由于不服务会导致利润的损失,或者说成本的上升。因此,每个顾客有不被服务的惩罚成本。该问题的目标为选择开设哪些设施,惩罚哪些顾客,使得开设费用、服务费用和惩罚费用总和最小。
(d)带异常点的设施选址问题:在选址中,商家可以设置顾客异常点的个数。在选址中允许有至多个顾客不被服务,同时选择选择开设哪些设施,服务哪些顾客使得开设费用和服务费用总和最小。
(e)多层设施选址问题:顾客需求的复杂会导致选址是一个“流水线”过程,需要通过多个步骤完成,这样产生了多层设施选址问题。在每一步中都需要选择一些设施开设,每个顾客的需求由每一阶段开设的设施组成的一组开设设施满足,最终使得开设费用和服务费用总和最小。

设施选址的其他变形 根据实际生产生活中的需求,设施选址问题还衍生了一些重要拓展问题, 如k-中位问题、随机设施问题、在线设施选址问题、容错设施选址问题、整合配送网络设计问题等等。

二、整数规划问题示例

2.1 背包问题

设有一个背包,其最大承重为 \(b\) ,考虑 \(n\) 件物品,其中第 \(j\) 件重量为 \(a_j\) ,其价值为 \(c_j\) 。问 如何选取物品装入背包中,使得背包内物品的总价值最大?
设决策变量 \(x_j=\left\{\begin{array}{l}1, \text { 若选第 } j \text { 件物品 } \\ 0, \text { 若不选 }\end{array}\right.\)
则背包问题可以表示为下列整数规划:

\[\begin{gathered} \max _x \sum_{j=1}^n c_j x_j \\ \text { s.t. } \sum_{j=1}^n a_j x_j \leq b \\ x \in\{0,1\}^n \end{gathered} \]

2.2 广义指派问题

设有 \(m\) 台机器, \(n\) 个工件,第 \(i\) 台机器的可用工时数为 \(b_i\) ,第 \(i\) 台机器完成第 \(j\) 件工件需 要的工时数为 \(a_{i j}\) ,费用为 \(c_{i j}\) 。问如何最优指派机器生产。
设决策变量 \(x_{i j}=\left\{\begin{array}{l}1, \text { 若第 } i \text { 机器加工第 } j \text { 件工件 } \\ 0, \text { 其他 }\end{array}\right.\)
则广义指派问题可以表示为下列整数规划:

\[\begin{gathered} \min _x \sum_{i=1}^m \sum_{j=1}^n c_{i j} x_{i j} \\ \text { s.t. } \sum_{j=1}^n a_{i j} x_{i j} \leq b_i, \forall i=1, \cdots, m \\ \sum_{i=1}^m x_{i j}=1, \forall j=1, \cdots, n \\ x_{i j} \in\{0,1\} \end{gathered} \]

2.3 集合覆盖问题

设某地区划分为若干个区域,需要建立若干个应急服务中心 (如消防站,急救中心等),每个中心 的建立都需要一笔建站费用,设候选中心的位置已知,每个中心可以服务的区域预先知道,问如何 选取中心使得应急服务能覆盖整个地区且使得建站费用最小。
记 \(M=\{1, \cdots, m\}\) 为该地区中的区域, \(N=\{1, \cdots, n\}\) 是可选的中心,设 \(S_j \subseteq M\) 为中心 \(j \in N\) 可以服务的区域集合, \(c_j\) 是中心建站费用,定义0-1关联矩阵 \(A=\left(a_{i j}\right)\) ,其 中,若 \(i \in S\) ,则 \(a_{i j}=1\) ,否则 \(a_{i j}=0\)
设 \(x_j=\left\{\begin{array}{l}1, \text { 选中心 } j \\ 0, \text { 不选 }\end{array}\right.\)
则问题可以表示为:

\[\underset{x}{\min}\sum_{j=1}^n{c_jx_j} \\ s.t.\ \ \sum_{j=1}^n{a_{ij}x_j}\ge 1,\ \ \forall i=1,\cdots ,m\\ x\in \left\{ 0,1 \right\} ^n \]

二、产能受限型工厂选址模型模型

管理者利用该模型将需求在现有生产设施间进行分配。虽然生产设施的地点和产能变化很少,但随着需求和成本的变化,分配给每个设施的需求可以更频繁地改变。需求分配模型需要以下输入:
\(n\) 是工厂地点的数量
\(m\) 是市场或需求点的数量
\(D_j\) 是市场j的年需
\(K_i\) 是工厂i的产能
\(c_{ij}\) 是工厂i运送单位产量到市场j的成本
\(x_{ij}\) 是工厂i运送单位产量到市场j的数量

需求分配问题可以表述为以下线性规划问题:

\[\min \left(\sum_{i=1}^n \sum_{j=1}^m c_{i j} x_{i j}\right) \]

约束条件为:

\[\begin{gathered} \sum_{i=1}^n x_{i j}=D_j, \quad j=1,2, \ldots, m \\ \sum_{j=1}^m x_{i j} \leq K_i, \quad i=1,2, \ldots, n \\ 0 \leq x_{i j} \quad i=1,2, \ldots, n\quad j=1,2, \ldots, m \end{gathered} \]

原文链接:https://blog.csdn.net/weixin_56917624/article/details/130064118

\[y_{i}= \begin{cases} 1, & 工厂选址在地点i\\ 0, & 其他\end{cases} \]

\[x_{ij}= \begin{cases} 1, & 如果市场j需求由工厂i来供应\\ 0, & 其他\end{cases} \]

\[\min \left(\sum_{i=1}^n f_i y_i+\sum_{i=1}^n \sum_{j=1}^m D_j c_{i j} x_{i j}\right) \]

约束条件为:

\[\begin{gathered} \sum_{i=1}^n x_{i j}=1, \quad j=1,2, \ldots, m \\ \sum_{j=1}^m D_j x_{i j} \leq K_i y_i, \quad i=1,2, \ldots, n \\ x_{i j}, y_i \in\{0.1\} \end{gathered} \]

三、案例分析-Python

某供应链企业欲重构北美洲、南美洲、欧洲、非洲和亚洲这5个区域的全球化供应网络,收集到成本(单位:千美元)和需求(单位:百万)数据如下表所示:

产 地 北美洲B1 南美洲B2 欧洲B3 亚洲B4 非洲B5 固定成本 最高供应量H
北美洲A1 81 92 101 130 115 9000 20
南美洲A2 117 77 108 98 100 6750 20
欧 洲A3 102 105 95 119 111 9750 20
亚 洲A4 115 125 90 59 74 6150 20
非 洲A5 142 100 103 105 71 6000 20

每个区域的年需求见表中最后一行,中间区域(第2列到第6列)包含了在一个区域组织生产来满足每一个区域的需求所需的生产、库存和运输可变成本(包括税收和关税),如北美洲生产100万单位产品然后到南美洲销售的可变成本是92000美元;对于每个可供选择的工厂都需固定成本见表中(第7列),他们都可生产2000万单位的产品,如在北美洲兴建一个工厂所需的固定成本为9000000美元,最高生产能力为2000万。试问选择哪些工厂生产产品,使得整个供应网络运作的总成本最小?







参考文献

  1. OM | 设施选址问题简介
  2. 补充3 需求分配和工厂选址模型

| \begin{aligned}
& \min \sum_i f_i y_i+\sum_{i, j} c_{i j} x_{i j} \quad \min \sum_i f_i y_i+\sum_{i, j} c_{i j} x_{i j} \
& \text { s.t. } \sum_i x_{i j} \geq 1, \quad \forall j \quad \stackrel{\text { 松他 }}{\longrightarrow} \text { s.t. } \sum_i x_{i j} \geq 1, \quad \forall j \
& x_{i j} \leq y_i, \quad \forall i, j \quad x_{i j} \leq y_i, \quad \forall i, j \
& x_{i j}, y_i \in{0,1}, \quad \forall i, j \quad x_{i j}, y_i \geq 0, \quad \forall i, j \
& \text { 个舍入 } \
&
\end{aligned} | |

\[\begin{aligned} & \min \sum_i f_i y_i+\sum_{i, j} c_{i j} x_{i j} \quad \min \sum_i f_i y_i+\sum_{i, j} c_{i j} x_{i j} \\ & \text { s.t. } \sum_i x_{i j} \geq 1, \quad \forall j \quad \stackrel{\text { 松他 }}{\longrightarrow} \text { s.t. } \sum_i x_{i j} \geq 1, \quad \forall j \\ & x_{i j} \leq y_i, \quad \forall i, j \quad x_{i j} \leq y_i, \quad \forall i, j \\ & x_{i j}, y_i \in\{0,1\}, \quad \forall i, j \quad x_{i j}, y_i \geq 0, \quad \forall i, j \\ & \text { 个舍入 } \\ & \end{aligned} \]

标签:设施,Python,text,sum,受限,供应链,选址,forall,quad
From: https://www.cnblogs.com/haohai9309/p/17550308.html

相关文章

  • python 迭代器
    目录python迭代器迭代器python迭代器迭代器#迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象#迭代器从集合的第一个元素开始访问,直到所有的元素被访问结束#迭代器只能前进不能后退#可以被next()函数调用并不断返回下一值的对象称为迭代器Iterator......
  • 如何实现python直方图的具体操作步骤
    Python直方图直方图是数据可视化中常用的一种图形表示方式,它可以将数据按照一定的范围分成若干个区间,并统计每个区间内数据的个数。Python提供了多种库和函数来绘制直方图,使得数据分析和数据挖掘更加方便和直观。matplotlib库绘制直方图在Python中,最常用的绘图库之一就是matplot......
  • 解决python正则匹配以某汉字开头,以}结尾的具体操作步骤
    Python正则匹配以某汉字开头,以}结尾前言在文本处理过程中,我们经常需要使用正则表达式来进行模式匹配,以找到特定的文本。Python中的re模块提供了正则表达式的支持,可以应用于各种文本处理任务中。本文将介绍如何使用Python的正则表达式来匹配以某汉字开头,以}结尾的文本。正则表达......
  • python正则表达式中怎么引用变量 这个问题怎么解决?
    项目方案:使用Python正则表达式引用变量1.简介Python正则表达式是一种强大的文本处理工具,可以用于匹配、搜索、替换和验证字符串。在正则表达式中,有时候需要使用变量来引用匹配结果或者动态地构建正则表达式模式。本项目方案将介绍如何在Python正则表达式中引用变量,以及如何使用......
  • 解决python找色脚本的具体操作步骤
    Python找色脚本实现步骤作为一名经验丰富的开发者,很高兴能帮助你学习如何实现Python找色脚本。下面我将详细介绍整个实现过程,并提供相应的代码和注释。步骤一:导入必要的库在开始之前,我们需要导入一些必要的库,以便在脚本中使用它们。这些库包括:importcv2importnumpyasnp......
  • python学习笔记:第九章异常
    1.1异常是什么python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被处理,程序将终止并显示一条错误信息。我们可以通过各种方法引发和捕获错误,并采取对应措施。1.2将“错误”变成异常自主地引发异常1.2.1raise语句我们通过预测异常可能发生的位置,通过ra......
  • Python操作文件
    1.os模块用法os.getcwd():获取当前工作路径os.chdir():改变当前工作路径os.makedirs():创建新文件夹os.path.join():文件路径进行拼接os.path.abspath(path):将返回参数的绝对路径的字符串os.path.isabs(path):判断参数是否为绝对路径os.path.relpath(path,start):将返回从star......
  • 如何实现s3 python boto的具体操作步骤
    用Python和Boto库连接S3存储桶简介AmazonS3(简称S3)是一种高度可扩展的云存储服务,可用于在云中存储和检索数据。S3提供了可靠性、安全性和高扩展性,使其成为许多开发人员和企业的首选。Python是一种流行的编程语言,提供了许多库和工具来简化对S3存储桶的访问和操作。其中,Boto是一种P......
  • 解决财报分析 PDF python的具体操作步骤
    财报分析PDFpython背景介绍财报分析是金融和会计领域的重要任务之一。财报是公司对外公布的财务信息的集合,通常以PDF的形式发布。为了从财报中提取有用的数据和进行深入分析,我们可以使用Python编程语言和相关的库来处理PDF文件。本文将介绍如何使用Python处理财报PDF并进行分析......
  • python实现迪杰斯特拉算法
    Dijkstra算法可以计算出在有权图中从某个起点出发到其他任何一点的最短路径长度算法思想:迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。定义起点s,终点t,集合U表示还没有找到起点到该点的最短路......