遗传算法-循环取货路径规划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法-循环取货路径规划
循环取货路径问题模型
相关数据:
车辆载重量Q=50立方米
单位车辆启用成本T=200元
单位距离行驶成本C=2元/千米
车辆最大行驶里程=350km
车速60km/h
各点之间的距离和行驶;送取货量;允许最早开始服务时间;最迟开始服务时间;服务时间见Excel
假设条件
1.一辆车只服务一条网络,从生产基地出发,最终回到生产基地。
2.每个仓库点只能由一辆车完成送取货任务,并且只能被访问一次。
3.每条线路上的每个节点,配送量和取货量之和不得超过车载量。
4.每个仓库点的送取量已知且不可分割,不考虑临时增减的情况,在一定时期内保持稳定。
5.每个仓库节点的送货作业先于取货作业进行。
6.每个仓库节点所取的货物是可以混装的。
7.车型一致,且每辆车的载重量已知。
8.生产基地,周转箱清理中心以及送取货仓库的位置已知。
9.在循环取货的整个运作过程中,装卸的总重量超过车辆最大载重量,装卸的总容积不超过车辆最大容积。
10.单位运输成本与车辆的载重量无关且已知。
11.取货过程中车辆保持匀速行驶,不考虑堵车现象。
12.所以仓库节点的取货量、送货量和时间窗已知。
13.假设取货车辆从生产基地出发的时间为0。
4.2.2 相关参数及说明
为了方便构造数学模型
将生产基地编号为0,周转箱清理中心编号为 1 ,三方仓取货点编号为2,3,4,……, n,均用i表示,i=0,1,2,……,n;
生产基地派出载重量为的k辆车,k=1,2,3,……,m;
d ij :表示从取货点i 到取货点j 之间的距离;
a i :表示第i 个仓库节点的单次取货量;
b i :表示第i 个仓库节点的单次送货量;
ET i :表示取货节点处允许最早开始服务的时间;
LT i :表示取货节点处允许最迟开始服务的时间;
s i :表示取货节点去送货的服务时间;
e i :表示取货车辆到达取货节点的时间;
r ij :表示从取货点i 到取货点j 之间的行驶距离;
C:表示送货车辆的单位运输成本;
Q:表示送货车辆的载重量;
T:表示车辆的启动成本;
W:表示车辆最大的行驶里程数
决策变量
x ijk :{x ijk =1 车辆k 直接从节点i 服务到节点j
x ijk =0 车辆k 不直接从节点i 服务到节点j , x 01k =1
y ijk :表示车辆k 从节点i 直接到节点j 时的载重量
u ijk :表示取货车辆离开i ,访问取货点j 之前的车辆运货量
z ik :表示车辆k 服务完取货点i 处的时间,如何车辆k 未服务取货点i 处,则z ik =0
目标函数
目标函数是设定主要考虑
车辆运输成本最小化,包括了车辆启动成本和运输成本
minf 1=C ∑∑∑x ijk m k=1n j=0n i=0d ij +T ∑x 01k m
k=1
满足三方仓时间窗的要求
软时间窗惩罚函数
f (e i )={
p (ET i −e i ),e i <ET i 0,ET i ≤e i ≤LT i q (e i −LT i ), e i >LT i
f (e i )= pMAX (ET i −e i ,0)+ qMAX (e i −LT i ,0)
minf =C ∑∑∑x ijk m k=1n j=0n i=0d ij +T ∑x 01k m
k=1
+pMAX (ET i −e i ,0)
+qMAX (e i −LT i ,0)
约束条件
a i ,
b i ≥0
表示三方仓出取货量和送货量都是大于等于0的。
y ijk ≥0
表示车辆k 从节点i 直接到节点j 时的载重量一定大于等于0
x 01k =1 k ∈{1,2,3,……,m }
表示取货车辆一定从生产基地出发至周转箱清理中心。
∑x 1jk n
j=2
=1 k ∈{1,2,3,……,m}
表示取货车辆从周转箱清理中心前往三方仓进行取货。
∑∑x ijk n
i=1
m k=1=1 i ∈{1,2,3,……,n },j ∈{2,3,4,……,n },i ≠j 表示每一个三方仓都要被取货车辆访问,并且只能够被访问一次。
y ijk ≤Qx ijk i,j ∈{1,2,3,……,n },k ∈{1,2,3,……,m },i ≠j 表示任何一点的车载量不能车辆的最大载重量
∑y 1jk n j=2=b i ∑∑x ijk n
j=1
n i=0 i,j ∈{1,2,3,……,n },k ∈{1,2,3,……,m },i ≠j 表示从周转箱清理中心出发时的载重量为本次配送路线中所以送货点的送货量总和
∑y i0k n i=1=a i ∑∑x ijk n
j=1
n i=0 i,j ∈{1,2,3,……,n },k ∈{1,2,3,……,m },i ≠j 表示返回生产基地时的载重量为本次配送路线中所有取货点的取货量总和
∑y ijk n i=0+(a i −b i )∑x ijk n i=0=∑y jik n
i=0
i,j ∈{1,2,3,……,n },k ∈{1,2,3,……,m },i ≠j
表示车辆在送取货路径上任意点的载重量满足在该点取货需求量与送货需求量代数求和的恒等式关系。
遗传算法
参数设置
染色体长度21
种群大小200
最大迭代次数300
交叉概率0.9
变异概率0.01
1,染色体编码与解码
1)采用整数编码
直接使用三方仓送取货点的序列作为染色体
2)此时染色体解的表示为一串代表不同三方仓节点排列顺序的数字序列。
但只通过节点序列并不能反应出实际中车辆的安排情况,即安排几辆车访问哪些客户节点。
因此,需要在输出解的序列中插入代表配送中心的标识“0”和周转箱清理中心“1”来分隔不同车辆的走行路径。
进行分隔时需要考虑每条路径车载量限制条件以及车辆行驶距离限制条件。
2.适应度值的计算
取目标函数的倒数 fitness =1/minf
minf =C ∑∑∑x ijk m k=1n j=0n i=0d ij +T ∑x 01k m
k=1
+pMAX (ET i −e i ,0)
+qMAX (e i −LT i ,0)
3.选择操作
轮盘赌选择算子
4.交叉操作
部分匹配交叉法
5.变异操作
1)随机产生1-0的数字,判断是否小于变异率,若小于变异率则变异,否者不变异。
2)假设A{1,2,3,4,5} 需要变异,则再随机产生两个变异的位置,假设产生的变异位位2,4 则只需把2,4 位置对应的客户点交换位置A{1,4,3,2,5}。