Python小白的数学建模课-07 选址问题

Posted youcans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python小白的数学建模课-07 选址问题相关的知识,希望对你有一定的参考价值。


选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型。

小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型。

进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法。

欢迎关注『Python小白的数学建模课 @ Youcans』系列,每周持续更新



1. 选址问题

选址问题是指在某个区域内选择设施的位置使所需的目标达到最优。选址问题也是一种互斥的计划问题。

例如投资场所的选址:企业要在 m 个候选位置选择若干个建厂,已知建厂费用、运输费及 n 个地区的产品需求量,应如何进行选址。

选址问题是运筹学中经典的问题之一,选址问题在生产生活、物流、甚至军事中都有着非常广泛的应用,如工厂、仓库、急救中心、消防站、垃圾处理中心、物流中心、导弹仓库的选址等。更重要的,选址问题也是数模竞赛的热点问题。

选址是重要的长期决策,选址的好坏直接影响到服务方式、服务质量、服务效率、服务成本等,从而影响到利润和市场竞争力,选址问题的研究有着重大的经济、社会和军事意义。

选址问题有四个基本要素:设施、区域、距离和优化目标。

1.1 设施

选址问题中所说的设施,在具体题目中可以是工厂、仓库、服务站等形式。

1.2 区域

选址问题中所说的区域,在具体题目中可以是工厂、车间的内部布局,也可以是给定的某个地区、甚至空间范围。

按照规划区域的特征,可以分为连续选址问题和离散选址问题。连续选址问题,设施可以布局在区域内的任意位置,就要求出最优选址的坐标;离散选址问题,只能从若干候选位置中进行选择,运筹学中的选址问题通常是这类离散选址问题。

1.3 距离

选址问题中所说的距离,是指设施到服务对象之间的距离,在具体题目中也可以是某个选址位置的服务时间、成本、覆盖范围。如果用图论方法求解,通常就是连接顶点的边的权值。

当问题所关注的是设施到服务对象之间的距离时,如果问题给出的不是顶点之间的距离,而是设施的位置坐标,要注意不是只有欧式距离,对于不同问题也可能是球面距离、曼哈顿距离、切比雪夫距离。

1.4 优化目标

选址问题要求选择最好的选址位置,但选址位置只是决策变量,选择的最终目的通常是实现加权距离最短、费用最小、利润最大、时间最短,这才是优化问题的目标函数。

按照目标函数的特点,可以分为:中位问题,要求总成本最小;中心问题,服务于每个客户的最大成本最小;反中心问题:服务于每个客户的最小成本最大。


Python小白的数学建模课 @ Youcans』
Python小白的数学建模课-01.新手必读
Python小白的数学建模课-02.数据导入
Python小白的数学建模课-03.线性规划
Python小白的数学建模课-04.整数规划
Python小白的数学建模课-05.0-1规划
Python小白的数学建模课-06.固定费用问题
Python小白的数学建模课-07.选址问题




2. 常见选址问题及建模

2.1 P-中位问题(P-median problem)

P-中位问题,假设有 N 个候选服务站和 M 个需求点,要从 N 个候选服务站中选择 P 个,使所有需求点到最近的服务站的加权距离 d i j d_{ij} dij 的总和最小。需求点 i 的权值,通常是指该需求点的需求量。

这是一个 MinSum 问题,定义决策变量 x j x_j xj 为选中的服务站, y i j y_{ij} yij 将各需求点匹配到最近的服务站:
x j = { 1 , 服 务 站   j   被 选 中 0 , 服 务 站   j   未 被 选 中 x_j = \\begin{cases} 1,& 服务站\\ j\\ 被选中\\\\ 0,& 服务站\\ j\\ 未被选中 \\end{cases} xj={10 j  j 
y i j = { 1 , 需 求 点   i   由 服 务 站   j   服 务 0 , 需 求 点   i   不 由 服 务 站   j   服 务 y_{ij} = \\begin{cases} 1,& 需求点\\ i\\ 由服务站\\ j\\ 服务\\\\ 0,& 需求点\\ i\\ 不由服务站\\ j\\ 服务 \\end{cases} yij={10 i  j  i  j 
可以建立数学模型如下:

m i n    ∑ i ∈ M ∑ j ∈ N w i d i j y i j s . t . :    { ∑ j ∈ N x j = P ∑ j ∈ N y i j = 1 , ∀ i y i j − x j ≤ 0 , ∀ i , j x j ∈ { 0 , 1 } ,    y i j ∈ { 0 , 1 } min\\;\\sum_{i \\in M}\\sum_{j \\in N} w_i d_{ij}y_{ij}\\\\ s.t.:\\;\\begin{cases} \\sum_{j \\in N} x_{j} = P\\\\ \\sum_{j \\in N} y_{ij} = 1,\\forall i\\\\ y_{ij} - x_j \\leq 0,\\forall i,j\\\\ x_{j} \\in \\{0,1\\}, \\;y_{ij} \\in \\{0,1\\} \\end{cases} miniMjNwidijyijs.t.:jNxj=PjNyij=1iyijxj0i,jxj{0,1},yij{0,1}

其中:j 为服务站,i 为需求点, w i w_i wi 为需求点 i 的需求量, d i j d_{ij} dij 为需求点 i 到服务站 j 的距离。


2.2 P-中心问题

P-中心问题,假设有 N 个候选服务站和 M 个需求点,要从 N个候选服务站中选择 P个,使任一需求点到最近的服务站的最大距离最小。

这是一个 MinMax 问题,需要最小化任何需求点与其邻近设施点的最大距离。P-中位问题追求总和最小,可以理解为发展经济总量优先;P-中心问题关注最差个体的最好结果,可以理解为优先进行扶贫。

定义决策变量 x j x_j xj 为选中的服务站, y i j y_{ij} yij 将各需求点匹配到最近的服务站:
x j = { 1 , 服 务 站   j   被 选 中 0 , 服 务 站   j   未 被 选 中 x_j = \\begin{cases} 1,& 服务站\\ j\\ 被选中\\\\ 0,& 服务站\\ j\\ 未被选中\\end{cases} xj={10 j  j 

y i j = { 1 , 需 求 点   i   由 服 务 站   j   服 务 0 , 需 求 点   i   不 由 服 务 站   j   服 务 y_{ij} = \\begin{cases} 1,& 需求点\\ i\\ 由服务站\\ j\\ 服务\\\\ 0,& 需求点\\ i\\ 不由服务站\\ j\\ 服务\\end{cases} yij={10 i  j  i  j 

可以建立数学模型如下:

m i n    D s . t . :    { ∑ j ∈ N w i d i j y i j ≤ D , ∀ i ∑ j ∈ N x j = P ∑ j ∈ N y i j = 1 , ∀ i y i j − x j ≤ 0 , ∀ i , j x j ∈ { 0 , 1 } ,    y i j ∈ { 0 , 1 } min\\; D\\\\ s.t.:\\;\\begin{cases} \\sum_{j \\in N} w_i d_{ij} y_{ij} \\leq D, \\forall i\\\\ \\sum_{j \\in N} x_{j} = P\\\\ \\sum_{j \\in N} y_{ij} = 1, \\forall i\\\\ y_{ij} - x_j \\leq 0, \\forall i,j\\\\ x_{j} \\in \\{0,1\\}, \\;y_{ij} \\in \\{0,1\\} \\end{cases} minDs.t.:以上是关于Python小白的数学建模课-07 选址问题的主要内容,如果未能解决你的问题,请参考以下文章

Python小白的数学建模课-01.新手必读

Python小白的数学建模课-03.线性规划

Python小白的数学建模课-06 固定费用问题

Python小白的数学建模课-12.非线性规划

Python小白的数学建模课-12.非线性规划

Python小白的数学建模课-05.0-1规划