合理的仓库选址对现代物流管理有着重要影响,通过对仓库进行合理规划,不仅可以节约配送成本,还可以提高客户满意度及企业的核心竞争力
P-中位选址问题(P-Median)是一类典型的组合优化问题,属于NP-hard问题,在设施选址、交通、物流等领域有着较为广泛的应用
本文建立的仓库选址模型考虑了设施点的容量、年建设成本和车辆行驶成本。有容量的仓库选址模型需从候选设施点集中选取部分作为设施点,为需求点提供货物运输服务。保证每个需求点均由设施点提供服务,且设施点服务的总需求量不超过设施点的服务容量限制。在选址问题中,车辆的行驶费用与设施点的建造费用往往是相互矛盾的。建立较少的仓库可节省较多的建设费用,但会增加车辆的交通成本,反之亦然。因此,构建适当数量的仓库可以帮助平衡仓库建设成本与车辆行驶成本。
为便于选址模型建立,给出以下假设:(1)一个设施点可为多个需求点提供服务,但一个需求点仅由一个设施点提供服务;(2)车辆行驶成本与行驶距离之间存在简单线性关系;(3)区域内的需求点拟用离散型变量分布点集N表示,候选设施点从点集M中产生;(4)设施点仓库建设为统一标准。
模型所用符号说明如下:
集合:
N:需求点的集合;
M:设施点的集合;
参数:
dij:i需求点到j设施点之间的距离,i∈N,j∈M;
p:设施点的个数;
B:设施点的建设成本;
r:计算设施点的折现率;
t:新建设一个设施点的使用年限;
k:道路曲折系数;
Di:需求点i的需求量;
G:设施点最大可服务的容量。
决策变量:
基于上述假设、定义的参数和决策变量,将仓库选址问题的数学模型表示为:
约束条件:
目标函数(1)为设施点的年建设成本与车辆行驶成本之和。固定资产的价值可能会随着时间而变化。在仓库的使用年限内,将固定成本折算为年成本更为合理。贴现率r常用来表示建筑成本的当前价值与未来价值的关系
免疫优化算法是一种基于生物免疫系统的智能优化算法。在该算法中,模型中的目标函数和解分别对应于生物免疫系统中的“抗原”和“抗体”
Fig.1 Flow chart of immune optimization algorithm
考虑到有容量仓库选址模型的具体特征,设计改进的免疫优化算法,使其更适合有容量的仓库选址模型,并克服经典免疫算法易陷入局部最优解的问题。改进的免疫优化算法主要由3部分构成:(1)初始化:确定解的表达形式,随机产生初始抗体,将满足条件的一定数量的抗体保存,以便算法能够快速地寻优迭代;(2)抗体评价:抗体评价是通过计算抗体的亲和力评价抗体优劣,亲和力计算包括抗体与抗原的亲和值、抗体密度。将质量高的若干抗体存入记忆库中,以便算法快速收敛到最优解;(3)遗传操作:在遗传操作中,利用单点交叉、二点交叉、变异算子生成子代抗体,既加强了对有希望空间的搜索利用,又能保持种群的多样性,使其快速收敛到最优解。
仓库选址模型的选址方案可以形成长度为l的抗体(l为开放设施点的数量),每个抗体表示开放设施点的序列,即解的序列。对于m个候选设施点中选取l个开放设施的选址问题,假设m个候选设施点的编号分别为1,2,…,m (m>1),则抗体l=[M1,M2,…,Ml]表示一个可行的解决方案,其中,M1,M2,…,Ml表示1,2,…,m中不重复的l个序号。
与经典免疫优化算法相同,初始解首先通过洗牌方式产生:将候选设施点集1,2,…,m (m>1)的顺序打乱,随机选择两个不同位置的数字并进行交换,执行
抗体与抗原之间的亲和值表示抗体对抗原的识别程度。通过式(8)计算抗体与抗原间的亲和值,即适应度值。
抗体间的相似值表示它们之间的相似性。本文采用Smith等
其中,tk,v为抗体k、v之间的相同位数,l为每个抗体的长度。例如,抗体xk=[53 23 12 45 61 20 37 56 24 65 34 1]和xv=[25 39 53 32 11 47 12 16 15 19 45 5]的相同位数为3,则xk和xv之间的Sk,v为0.25。
抗体密度φk,即抗体浓度,表示群体中相似抗体的比例。
如果Sk,v>R,则Bk,v=1,否则Bk,v=0。R是预定义的阈值
通过式(11)可计算抗体的期望繁殖概率,式(11)由抗体的亲和值和抗体密度两部分构成。
其中,η为[0,1]区间内的常数。
由式(11)可知,抗体与抗原的亲合值越大,期望繁殖概率越高;抗体密度越大,期望繁殖概率越小。因此,式(11)不仅可以鼓励选择适应度值好的抗体,而且可以抑制抗体间的密度,从而确保种群的多样性。当免疫优化算法抑制高密度的抗体时,部分高密度的抗体可能已接近于最优解,这样会导致已求得的最优解丢失。因此,本文采用精英保留策略:在更新记忆库时,先将与抗原亲和值高的P个抗体存入记忆库中,保留抗体群中精英个体的优秀特征;再提取前P1个抗体作为父代群体,按照期望繁殖概率进行选择和遗传操作,以保持优良抗体的特性。
通过轮盘赌的机制进行选择操作,轮盘选择法是一种比较受欢迎的选择方法。根据抗体的期望繁殖概率,在父代群体P1中选择两个抗体。期望繁殖概率越大,被选择的概率就越高。
交叉在遗传操作中起着至关重要的作用,它可以提高抗体间的差异度,以便算法快速收敛到最优解。考虑是在整数编码的遗传操作环境下,本文使用时间复杂度低的两种交叉操作方式:单点交叉和两点交叉。对于两种交叉方式的参数选择,设置交叉率的范围为θ∈[θmin,θmax],随机生成[0,1]之间的随机数γ,若γ≤θ,则选择单点交叉,反之,选择两点交叉操作。
单点交叉:给定两个抗体parent1、parent2,首先在2和l-1之间随机选择一个交叉点q。交换两个抗体在q点之后的元素,得到parent1,、parent2,。若parent1,中更改的序号r在parent1中已存在,则找到parent1中序号r所在的位置R,并找到parent2中R位置的序号r,,将parent1,中的序号r改为r,。重复此步骤,直到抗体中无重复序号,得到子代抗体child1和child2。
单点交叉操作如图2所示。对于亲本抗体parent1=[102 21 13 9 17 6 23 4]和parent2=[11 8 20 1 15 12 21 14 5],随机选择交叉点q=6。将两个抗体第6个位置后的元素交换得到parent1,=[10 2 21 13 9 12 21 14 5],parent2,=[11 8 20 115 17 6 23 4]。在parent1,中有重复元素21,因此找到parent1中元素21所在的第3个位置,并找到parent2中位置3的序号为20,将parent1,第7个位置的元素改为20。最后,得到无重复元素的子代抗体child1=[10 2 21 13 9 12 20 145]和child2=[11 8 20 1 15 17 6 23 4]。
图2 单点交叉例子
Fig.2 An example of one-point crossover
两点交叉:给定两个亲本抗体parent1、parent2,首先在2和l-1之间随机选择两个不同的交叉点q1、q2,交换两个抗体交换q1和q2之间的元素,得到抗体parent1,、parent2,。与单点交叉相同,需要消除子代抗体中的重复元素,得到子代抗体child1、child2。
两点交叉操作如图3所示。对于亲本抗体parent1=[102 21 13 9 17 6 23 4]和parent2=[11 8 20 1 15 12 21 14 5],随机选择两个交叉点q1=4,q2=6。将两个抗体q1和q2之间的元素交换,得到parent1,=[10 2 21 1 5 12 6 23 4],parent2,=[11 8 20 13 8 17 19 14 5]。parent2,中有重复元素8,因此找到parent2中元素8所在的第2个位置,并找到parent1中第2个位置的元素为2,将parent2,第5个位置的元素改为2。最后,得到无重复元素的子代child1=[10 2 21 1 5 12 6 23 4]和child2=[11 8 20 13 2 17 19 14 5]。
突变指通过在抗体中引入随机变异以增加种群多样性,消除算法在无希望区域的停滞,探索新搜索区域的过程
在实现突变的过程中,还应考虑保护优秀解的特征,因为在迭代过程中,可能已求得一些解接近于最优解,直接对解执行突变操作,可能会丢失已求得的优秀解
Fig.3 An example of two-point crossover
Fig.4 An illustration of the mutation withμ=3,p=3 and N={1,2,⋯,12}
图4 μ=3,l=3,N={1,2,…,12}的突变操作例子
以上海市S物流公司为案例,根据实地调研,S物流公司每天由仓库向各网点运输货物。该公司在上海市共有51个网点分布,因此获取51个需求点的坐标与需求量,并选取15个候选仓库点,需求点的需求量为每天运输的车辆数。模型中各参数如表3所示。需求点与设施点的相关数据如表1、表2所示。
根据经纬坐标计算两点之间的距离,使用式(12)将经纬距离转换为两个节点i和j之间的实际行驶距离dij:
其中,(xi,yi)、(xj,yj)为两个节点的经度和纬度坐标,6 370为地球半径(km)。通过式
参数的合理设置对算法的有效性和计算效率有着重要影响,算法中的参数:种群规模P=P1+P2(P1为父代群体数量,P2记忆库容量)、迭代次数iter、记忆库容量P2、交叉率的区间[θmin,θmax]、期望繁殖概率评估参数η、突变率μ需要进行合理设置。参数调优和参数控制是元启发式算法中确定参数值的两种常用方法
迭代次数在算法中起重要作用,迭代次数设置较高可能会浪费算法运行时间,迭代次数设置较低可能会提前结束搜索过程,无法找到最优解。首先使用精确软件CPLEX分别对4个案例进行求解,并得到最优值;然后使用本文设计的免疫优化算法对4个案例分别独立运行10次,取得平均结果与平均运行时间。表4给出了4个案例的规模与求解情况,包括每个案例变量个数、约束条件个数、最优解(Best)、结果平均值(BOV)、10次求解中找到最优解的数量(Found)、结果与最优值的偏离程度(APD=((BOV-best) best)×100%)、运行平均时间(Time(s))、求得最优解的迭代次数(Iters)。
表1 需求点坐标与需求量
Table 1 Demands and coordinates of each demand node
表2 设施点坐标
Table 2 Coordinates of each facility node
表3 模型中的其他参数
Table 3 Other parameters in the model
由表4结果可知,4个案例在150次迭代内均求得了最优或接近最优解。因此,本文设置迭代次数Iters=150。
设置种群规模,取6个不同的参数值进行测试。表5给出了不同的种群规模下,4个案例进行10次运行的平均测试结果,包括种群规模、平均运行时间和APD(%)。从表5可以看出,当种群规模大于等于30时,运行时间和解的质量较好。随着种群规模的增大,算法计算时间也越长。考虑到解的质量和计算时间,本文设置种群规模P=30。
Table 4 Test results from 10 runs in 4 cases
Table 5 Test results of population size
记忆库用于存储每次迭代产生的精英抗体。精英抗体的数量在种群中占有一定比例。记忆库容量设置过大时,算法容易陷入局部最优;记忆库容量设置过小时,寻找最优解的计算时间会增加。因此,设置合理的记忆库容量,对保留精英抗体的特征与维持种群的多样性具有重要意义。通过设置6个不同的比例,确定最合适的记忆库容量。表6给出了不同的记忆库容量值,4个案例运行10次的平均测试结果,其中,[X]表示不大于X的最大整数。由表6可以看出,当记忆库容量为[0.35*(P)]时,可以得到较好的解决方案。因此,设置P2=[0.35*(P)],即P=30时,P2=10。
Table 6 Test results of memory capacity
交叉率用于决定抗体的交叉操作为两点交叉或一点交叉,这对决定如何保留亲本特征较为重要。在算法运行时,与固定交叉率相比,可变的交叉率可以有更大的灵活性去探索更有前景的搜索区域。通过设置18个不同的取值区间,确定最合适的交叉率区间。表7给出了不同的交叉区间下,4个案例运行10次的平均测试结果。由表7所示的测试结果可以看出,在区间[0.5,1]和[0,0.9]内,计算得到的APD(%)值和计算时间较好。
Table 7 Test results of crossover rate
变异是遗传操作的主要算子之一,通过变异可以搜索新的区域、逃离当前局部最优情况。确定合适的突变率可以决定抗体变异强度。突变率和交叉率一样重要,会对改进免疫优化算法的计算效率产生较大影响。设置较小的突变率容易在寻优过程中陷入局部最优,设置较大的突变率会失去已得到的优秀特征。表8给出了4个案例在不同突变率下运行10次的平均测试结果。从表8可以看出,当突变率为0.5和0.6时,免疫优化算法的性能更好,可以在较短时间内求得较好的解。
Table 8 Test results of mutation rate
期望繁殖概率表示对抗体进行评估,参数η用于为抗体对抗原的识别程度、抗体密度赋予不同权重,以此得到抗体的期望繁殖概率。如表9所示,当参数η设置为0.8或0.85时,算法运行时间较短,且APD(%)较低,求得解的质量较高。
Table 9 Test results of parameterη
不同的参数组合对算法性能也有很大影响。如上所述,交叉率、突变率和参数η有多个较优值,将不同的参数进行组合,得到8种组合方式。使用每种组合方式对4个案例各进行10次运行求解,得到平均运行时间与APD(%)值。不同参数组合的测试结果如表10所示,从测试的运行时间与APD(%)值可以看出,当参数组合[ϑmin,ϑmax]=[0,0.9]、μ=0.5、η=0.8时,算法求解时间与解的质量最优。
Table 10 Test results of different parameter combinations
基于上述讨论和测试,算法参数设置情况为:迭代次数Iters=150、种群规模P=30、记忆库容量P2=10、交叉率区间[ϑmin,ϑmax]=[0,0.9]、突变率μ=0.5、抗体评估参数η=0.8。
通过上述改进的免疫优化算法及参数设置,对S物流公司的案例进行求解分析。实验环境为Intel(R)Core i5-8250u CPU@1.60GHz 8.00GB内存,操作系统为64位Windows 10,使用Matlab R2017b进行编程。求解得到目标函数为9.116 06×105,运行时间为45.70s。所选择的设施点为3、5、6、8、9、10、11、12、13、15,需求点与设施点分布情况如图5所示(彩图扫OSID码可见)。图5中的黄色圆点为需求点,红色星星为所选的设施点,绿色圆点表示未被选择的设施点,连线表明需求点与设施点之间的关系。从图5可以看出,每个需求点均有指定的设施点进行服务,且需求点均被分配给距离较近的设施点。表11为设施点所服务的需求点和服务的总需求量,可以看出,每个设施点服务的总需求量均不超过服务容量限制。因此,本文的仓库选址模型有效可行,能够解决物流公司的仓库选址与需求分配问题,并有效降低车辆成本与固定成本,提高企业对车辆及仓库的控制。
Table 11 Relationship between facility points and demand points
Fig.5 Distribution of facility and demand points
为了验证改进免疫优化算法的有效性,本文使用改进免疫优化算法的求解结果与软件CPLEX精确求得的精确解进行对比分析。如表12所示,免疫优化算法与CPLEX求解得到的结果相同,且免疫优化算法运行时间更短。因此,免疫优化算法可有效地解决仓库选址问题。
Table 12 Comparison between improved immune optimization algorithm and CPLEX
为了验证改进免疫优化算法的求解性能,将其优化结果与经典免疫优化算法的求解结果进行对比分析。图6和图7分别为改进的免疫优化算法与经典免疫优化算法的收敛曲线。由图6和图7可以看出,改进的免疫优化算法无论是收敛速度,还是结果准确度都优于经典免疫优化算法。
Fig.6 Convergence curve of classical immune algorithm
Fig.7 Convergence curve of improved immune algorithm
本文结合仓库设施选址特点,建立了考虑容量约束的仓库选址模型。根据选址模型特点,设计了改进的免疫优化算法对案例进行求解。在算法中设计了两种交叉算子和变异算子,使得算法可快速收敛到最优解,降低算法运行时间。本文还对改进免疫优化算法的参数进行详细分析,找到最优参数组合方式,提高算法性能。最后,对案例进行求解,验证了模型和算法的有效性与可行性。本文提出的仓库设施选址方法可为决策人员选择最佳布局方案提供科学合理参考。
在下一步研究中,将进一步细化影响仓库选址的各因素,并考虑服务时间窗的约束,更合理地在模型中体现车辆行驶实际情况,以增加模型求解的准确性和实际应用价值。
【本文标签】
【责任编辑】平文云仓