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={1,0,服务站 j 被选中服务站 j 未被选中
y
i
j
=
{
1
,
需
求
点
i
由
服
务
站
j
服
务
0
,
需
求
点
i
不
由
服
务
站
j
服
务
y_{ij} = \\begin{cases} 1,& 需求点\\ i\\ 由服务站\\ j\\ 服务\\\\ 0,& 需求点\\ i\\ 不由服务站\\ j\\ 服务 \\end{cases}
yij={1,0,需求点 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} mini∈M∑j∈N∑widijyijs.t.:⎩⎪⎪⎪⎨⎪⎪⎪⎧∑j∈Nxj=P∑j∈Nyij=1,∀iyij−xj≤0,∀i,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={1,0,服务站 j 被选中服务站 j 未被选中
y i j = { 1 , 需 求 点 i 由 服 务 站 j 服 务 0 , 需 求 点 i 不 由 服 务 站 j 服 务 y_{ij} = \\begin{cases} 1,& 需求点\\ i\\ 由服务站\\ j\\ 服务\\\\ 0,& 需求点\\ i\\ 不由服务站\\ j\\ 服务\\end{cases} yij={1,0,需求点 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 选址问题的主要内容,如果未能解决你的问题,请参考以下文章