最近在研究选址问题,顺便就做了一个归纳整理。
这篇文章是第一部分,关于传统的、基于统计学的选址。
之后会有另一篇,是关于机器学习、深度学习在现代的选址问题的应用。
以下内容纯理论~~
1 选址问题
【来自百度】选址问题是运筹学中经典的问题之一。选址问题在生产生活、物流、甚至军事中都有着非常广泛的应用,如工厂、仓库、急救中心、消防站、垃圾处理中心、物流中心、导弹仓库的选址等。选址是最重要的长期决策之一,选址的好坏直接影响到服务方式、服务质量、服务效率、服务成本等,从而影响到利润和市场竞争力,甚至决定了企业的命运。好的选址会给人民的生活带来便利,降低成本,扩大利润和市场份额,提高服务效率和竞争力,差的选址往往会带来很大的不便和损失,甚至是灾难,所以,选址问题的研究有着重大的经济、社会和军事意义。
所谓选址问题,就是指在规划区域里选择一个或多个设施的位置,使得目标最优。
PS:这个“设施”可以是工厂、饭店等实体,为了统一,我们都称呼它为设施。
从它的定义,我们可以抓住四个要素:设施、规划区域、位置(距离)、目标,我们来一个个分析:
1.1 设施
按照设施的空间维度划分,可以将选址问题分为:
- 立体选址问题:设施的高度不能被忽略,如集装箱装箱问题。
- 平面选址问题:设施的长、宽不能被忽略,如货运站的仓位布局问题。
- 线选址问题:设施的宽度不能被忽略,如在仓库两边的传送带布局问题。
- 点选址问题:设施可以被简化为一个点,绝大多数时候我们遇到的都是这类问题。
还有,按照设施的规划数量划分,可以将选址问题分为:
- 单设施选址
- 多设施选址
1.2 规划区域
按照规划区域的结构划分,可以将选址问题分为:
- 连续选址问题:设施可以在给定范围的任意位置选址,设施的候选位置为无穷多。
- 离散选址问题:设施的候选位置是有限且较少的,实际中最常遇到这类问题。
- 网格选址问题:规划区域被划分为许多的小单元,每个设施占据其中有限个单元。
1.3 位置
或许说距离会更合适,因为我们确定设施位置的目的,就是为了获得设施与其他需求点的距离。
按照设施与需求点位置的关系,可以将所要获取的距离分为:
- 间接距离
如下赋权有向图,从点v1到点v7有许多条路径,上面的数字代表了距离,不考虑中途的成本、时间等因素,如何选择路线使得距离最短?(学过运筹学的同学应该都知道标号法吧)
- 直接距离:
如果没有向上图那样特别给出,我们需要根据两点坐标自行计算,一般可以选择Lp距离作为两点之间的距离,又称闵式距离(Minkowski Distance)。Lp距离计算方式如下:
d = (Σ(x1i-x2i)p)1/p
特别地,当:
- p=1:L1范式,又称曼哈顿距离,在二维平面上 d=|x1-x2|+|y1-y2|。假设在曼哈顿街区乘坐出租车从 P 点到 Q 点,白色表示高楼大厦,灰色表示街道,则下图中红线、蓝线、黄线的行驶距离都是一样的,都是曼哈顿距离。
- p=2:L2范式,又称欧氏距离,定义于欧几里得空间中,是最常见的距离度量方式,在二维平面上 d=((x1-x2)2+(y1-y2)2)1/2,即两点间的直线距离,上图中的绿线。
上面两种距离用得最多,再介绍一个不太常用的距离:- p=∞:切比雪夫距离(Chebyshev distance),在二维平面上 d=max(|x1-x2|, |y1-y2|)。玩过国际象棋的都知道,国王走一步能够移动到相邻的8个方格中的任意一个位置,那么国王从格子(x1,y1)走到格子(x2,y2)最少的步数就是切比雪夫距离。可以试试看,下图已经标注国王到达任意位置所需要的步数。
1.4 目标
我们的目标是找到最好的位置,那么什么是最好的位置呢,换句话说,该如何量化这个目标呢?距离最短、费用最少、利润最大,或者其他定制的目标?
按照目标的数量,可以将选址问题分为:
- 单目标选址问题:这个很好理解。
- 多目标选址问题:实际的问题往往都是多目标规划问题,比如既想距离尽可能短,又想要费用尽可能少,如何均衡这些多目标呢。
2 三个基本问题与模型
可能洋洋洒洒看了上面一堆,对于选址问题还是没有一个清晰的概念,所以我整理了三个选址问题中的基本问题。而目前选址问题里的一些难题,都是它们的拓展(或者说延伸),比如无容量限制设施选址问题。
2.1 P中值问题 P-Median Problem
研究:在备选设施集合里,如何选择p个设施,使所有需求点得到服务,并且需求点到其最近设施的加权距离总和最小。
这是一个MinSum问题,可由以下整数规划模型表示:
应用场景:在物流领域应用得非常广泛,加权距离代表了运输成本,目标是总成本最少。
2.2 P中心问题 P-Center Problem
研究:在备选设施集合里,如何选择p个设施,使所有需求点得到服务,并且每个需求点到其最近设施的最大距离最小。
这是一个MinMax问题,可由以下整数规划模型表示(符号说明与上面类似):
应用场景:应急设施的选址,比如警局、消防局、医院,要求尽可能快地到达任意位置。
2.3 覆盖问题 Covering Problem
覆盖问题分为最大覆盖问题和集覆盖问题两类。
- 集覆盖问题
研究:在备选设施集合里,已知每个设施的服务范围,如何选择设施,使所有需求点得到服务,并且设施数p最小或成本最小。
- 最大覆盖问题
研究:在备选设施集合里,已知每个设施的服务范围,如何选择p个设施,使得服务的需求点数最多或需求量最大。
应用场景:追求覆盖面的场景,比如移动基站的选址、物流中心的选址。
3 算法
对于算法的解释,我总是比较偷懒的,因为解释起来很麻烦,所以就做个总结,感兴趣的话再自行搜索哈。
按照求解的方式,可以分为:
3.1 定性求解
“定性”很好理解,不要求具有统计意义,但是凭借研究者的经验以及有关的技术,能有效地洞察研究对象的性质,以及可能带来的影响等。
一般是如下步骤:
- 建立一套基于某些指标的、普适的评价体系
- 对给定的多种方案进行综合评价
- 基于评价结果,选出相对最优方案
常用的评价方法有:加权因素评分法、模糊综合评判法、风险型方法、德尔菲法(Delphi)
定性方法有着明显的缺点——受主观影响极大。可实际过程中,很多东西都是无法定量的,比如政策、环境的影响~因此定性分析具有非常强的实际意义,往往与定量分析相辅相成。
3.2 定量求解
解析解
求解纯数学模型,找到最优方案。
上述三个基本问题都是NP-Hard问题,在规模较小时可行,但随着规模的增大,在多项式时间内无法获得解析解。近似解
常用的有松弛算法:将约束吸收到目标函数中。启发式算法
在状态空间不断搜索局部最优,并更新状态,循环往复直至无法再更新。仿真法
对于大型、复杂的选址问题,通过仿真重现系统活动。其他……
有一些算法被证明是可以较好地逼近最优解,比如模拟退火、遗传算法、神经网络等。
3.2.1 贪婪取走启发式算法
给大家介绍一个效率挺高的算法,不一定最好,但我看了还不错,很多作者靠它水了一些文章哈哈哈~
目标是从N个备选位置里,选择p个位置建设施,使得目标最优。
- 步骤1:初始化p个设施的位置,并计算目标函数值。
- 步骤2:选择一个设施点i,i∈p,和一个设施点j,j∉p,交换组合新设施集合,计算目标函数。
- 步骤3:循环步骤2,找到最优交换组合,使得目标函数值减小最多,永久交换并更新状态。
- 步骤4:循环步骤3,直到再也无法找到最优交换组合。
该算法的优点和缺点:
优点
可并行,运算快。缺点:由于每次都找局部最优,因此算法的效果受初始位置影响很大。解决方法是循环整个算法n次,再选择最优组合。
因为时间太短,没时间研究得太深,其他算法就不班门弄斧了~
下回试试用Python解决几个实际问题。