欢迎来到知嘟嘟! 联系电话:13095918853 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13095918853
知嘟嘟经纪人
收藏
专利号: 201911203002X
申请人: 浙江工业大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2023-12-11
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种带时间窗的电动汽车路径规划方法,包括如下步骤:

步骤1,设定相关的参数变量,建立模型:

M:客户数量;

K:车辆数目;

N:充电站数目;

ck1:车辆k的固定使用成本;

ck2:车辆k的可变成本;

Qk:车辆k的额定载重;

Dk:车辆k的额定行驶里程;

dij:从节点i到节点j的距离;

qi:节点i的需求量;

t0:所有车辆的出发时间;

车辆k到达节点i的时间;

车辆k从节点i驶出的时间;

ti:在节点i停留的时间;

[ti1,ti2]:节点i的服务时间窗;

v:车辆行驶速度;

μ1:提前惩罚成本;

μ2:延迟惩罚成本;

Ik:车辆k所访问的节点集合;

车辆k在节点i处的剩余的可行驶里程;

车辆k每次从满电状态访问到节点i时的累积行驶里程;

以车辆配送的总成本最低为目标建立目标函数如下:

其中,目标函数的第一部分为配送车辆的固定成本,第二部分为配送车辆的可变成本,第三部分为时间窗惩罚成本;

模型的相关约束如下:

以上模型中,式(1)表示目标函数,即完成配送的最低成本;式(2)表示使用的车辆不能超过当前车辆总和;式(3),式(4)表示一个客户只能被一辆车服务一次;式(5)表示车辆服务客户的需求总量不超过车辆载重;式(6)表示车辆从车场出发并返回原车场;式(7)表示车辆不能从一个车场直接进入另一个车场;式(8)表示车辆必须在规定的时间窗内进入或离开车场和充电站;式(9)表示车辆从本次满电状态到达某个节点处的累积里程;式(10)表示车辆在某个节点处的剩余可行驶里程;式(11)表示车辆不会在行驶途中将电量用尽;式(12)表示车辆进入充电站完成充电或换电之后必须驶出充电站;式(13)表示车辆到达某个节点的时间为到达上一个节点的时间、停留服务时间和行驶时间三者之和;

步骤2,设计编码方式并重新设计相关操作:

步骤2.1,设计编码方式:对于一个共有M个客户,K辆不同车型的电动汽车路径规划问题,将客户的编号设置为1~M,车辆的编号为(M+1)~(M+K);个体的编码由两部分组成,编码的第一部分为车辆的编号,编码第二部分为客户的编号;充电站的编号为(M+K+1)~(M+K+N);

步骤2.2,设计路径检测算子,用来检测车辆的配送路线是否可行;路径检测的操作如下:(1)车辆k的额定行驶里程为Dk,配送路线为Rk,按照顺序访问节点,每次到达一个节点i处,重新计算车辆k的剩余可行驶里程 当访问的节点为充电站时, (2)若访问到每个节点i时都有 并且到达充电站或车场的时间都其在服务时间之内,则Rk可行;否则,Rk不可行;

步骤2.3,设计充电站插入方法,需要进入充电站的车辆k的路线为Rk:步骤2.3.1,取出充电站编号的集合,从中取出一个充电站,依次尝试插入Rk的不同位置得到R′k,再对R′k使用路径检测算子检测;若可行,则计算并记录R′k的配送成本;若不可行,则舍弃R′k;遍历所有可以插入充电站的位置(从车场出发之后到返回车场之前的任意位置);

步骤2.3.2,遍历尝试插入每一个充电站,并记录最低成本的插入方案Rkb;

步骤2.3.3,判断,如果Rkb不为空,则插入成功,将其作为最终的执行方案;否则,插入失败,返回失败信息;

步骤2.4,设计变异算子:设置一个混合搜索算子,其包括逆序邻域搜索算子、1-opt交换搜索算子、2-opt交换搜索算子和3-opt交换搜索算子;需要说明的是,由于设定的猫的位置编码由两部分组成,所以每一部分的变异操作只在该部分的内部进行,并且每次只进行其中一个部分的变异;

步骤2.5,设计解码操作,计算适应度:

步骤2.5.1,按照编码Ls中的客户编码部分的顺序,依次取出未分配的客户i,按照车辆编码部分的顺序取出未分配的车辆k,将客户依次分配给当前车辆k,计算所分配客户的配送总重量,直到超出车辆k的装载量Qk为止,获得车辆k的客户服务序列Rk;

步骤2.5.2,使用路径检测算子对Rk进行检测,若检测结果为不可行,则尝试进入充电站,转步骤2.5.3;否则,不需进入充电站,将服务序列Rk记录在解码序列Ls0中,继续进行下一辆车的任务分配,转步骤2.5.1;

步骤2.5.3,对Rk执行充电站插入算子,若成功,则记录插入充电站之后的服务序列Rk0,并将Rk0记录在解码序列Ls0中,继续进行下一辆车的分配,转步骤2.5.1;否则,保留Rk,转步骤2.5.4;

步骤2.5.4,对Rk进行疫苗接种,接种后服务序列为Rk1;

步骤2.5.5,使用路径检测算子检测Rk1,如果可行,则将Rk1记录在Ls0中,继续进行下一辆车的分配,执行步骤2.5.1;否则,保留Rk,执行步骤2.5.6;

步骤2.5.6,判断Rk中的客户数量m,如果m>1,则从Rk中去除最后一位客户,转步骤

2.5.2;否则,Ls为不可行解,记录该个体的适应度fs=0,并终止该个体的解码操作;

步骤2.5.7,依次进行客户的分配,直到所有的客户都被分配完毕,得到Ls解码后的配送方案的服务序列Ls0,计算个体的适应度fs;

步骤2.6,定义并计算种群的中心位置Lcen:统计种群所有个体的编码的相同位置上出现次数最多的值,将其作为中心位置Lcen中相同位置的编码值;需要说明的是,为避免重复,如果在某个位置上出现次数最多的值不止一个,则优先采用出现顺序靠前且不与前面已确定的编码值相重复的值;

步骤3,种群规模为S,初始化种群、中心位置和疫苗,具体操作如下:步骤3.1,初始化疫苗:分别以每个车场位置为原点,随机从某个客户开始,依次扫过客户,从而得到一个全体客户的排列,该排列即为一个疫苗,获得有关每个车场的疫苗;

步骤3.2,建立二维坐标系,根据各个车场的坐标位置,将所有车场用线段连接起来,形成一个多边形U,计算该多边形的重心U0作为扫描算法的原点O;

步骤3.3,以原点O为扫描原点,随机选择一个客户节点i,从节点i按照顺时针或者逆时针方向依次扫描所有的客户点,记录扫描到的客户序列A;

步骤3.4,个体位置编码的车辆编码部分随机生成,将A作为客户编码部分;

步骤3.5,重复操作步骤3.3和3.4,生成S个个体;个体的位置编码为Ls(s=1,2,3……S),计算适应度为fs,完成种群的初始化;

步骤3.6,找出种群中的适应度最高的个体的位置,记为Lbest,适应度为fbest;

步骤3.7,计算初始种群的中心位置Lcen;

步骤4,根据设定的分组率δ,对种群进行分组,一部分执行搜寻模式,转步骤5,一部分执行跟踪模式,转步骤6;

步骤5,执行搜寻模式,记忆池的容量为P:

步骤5.1,第s只猫的适应度为fs,将其位置Ls复制P份放入记忆池中;

步骤5.2,采用变异算子对每个备份进行搜索,获得新的候选位置Lsp(p=1,2,3,……,P);

步骤5.3,进行解码,计算每个候选位置Lsp的适应度fsp,记录其中最优的适应度为fb,最优位置为Lb;如果fb>fs,则用最优位置为Lb替代当前位置Ls,即令Ls=Lb,fs=fb;否则,保持原来的位置Ls不变;

步骤5.4,对搜寻模式下的每个个体,执行步骤5.1至5.3,完成搜寻操作;

步骤6,执行跟踪模式,执行跟踪的猫的位置为Ls,跟踪最优位置Lbest和中心位置Lcen;跟踪Lbest的概率为θ,客户对比长度为W(W小于客户数量):步骤6.1,产生一个0-1之间的随机数ran;如果ran<θ,则该个体跟踪最优位置Lbest,转步骤6.2;否则,跟踪中心位置Lcen,转步骤6.3;

步骤6.2,从Lbest客户编码的第一个编号开始,依次与Ls比较W长度内的客户编号;如果在W长度内,Lbest的某一个客户编号在Ls的W长度内出现,则按照出现的顺序依次记录在L′s的客户编码中(从客户编码的第一位开始记录,L′s为待移入的位置),直至Lbest与Ls在W长度内的所有客户比对完毕;剩余的客户编号按照在Ls中的排列依次填入L′s的客户编码的剩余部分;将Ls的车辆编码作为L′s的车辆编码,得到新的位置L′s,用L′s代替Ls,即令Ls=L′s;

步骤6.3,从Lcen客户编码的第一个编号开始,依次与Ls比较W长度内的客户编号;如果在W长度内,Lcen的某一个客户编号在Ls的W长度内出现,则按照出现的顺序依次记录在L′s的客户编码中(从客户编码的第一位开始记录,L′s为待移入的位置),直至Lcen与Ls在W长度内的所有客户比对完毕;剩余的客户编号按照在Ls中的排列依次填入L′s的客户编码的剩余部分;将Ls的车辆编码作为L′s的车辆编码,得到新的位置L′s,用L′s代替Ls,即令Ls=L′s;

步骤6.4,对跟踪模式下的个体,分别执行步骤6.1-6.3,完成跟踪操作;

步骤7,更新种群个体的适应度,并更新种群最优解Lbest和最优适应度fbest;

步骤8,更新种群的中心位置Lcen;

步骤9,对种群最优解进行退火搜索,初始温度E,降温系数为α,初始的当前温度E1=E,终止温度为E2,内循环次数为H;退火搜索之前的最优解为Lbest,其适应度为fbest;设置最优解的副本为Lc,令Lc=Lbest,fc=fbest;

步骤9.1,判断当前代数g是否为设定的退火搜索代数,如果是,继续执行以下步骤;否则,转步骤10;

步骤9.2,执行内循环的前H/2次,每次使用变异算子对Lc的车辆编码部分进行操作得到L′c;如果min{1,exp[-(Z(L′c)-Z(Lc))/E1]}≥random[0,1],则用L′c替代Lc,即令Lc=L′c;记录退火搜索到的最优适应度为fsa,最优解为Lsa;

步骤9.3,执行内循环的后H/2次,每次使用变异算子对Lc的客户编码部分进行操作得到L′c;如果min{1,exp[-(Z(L′c)-Z(Lc))/E1]}≥random[0,1],则用L′c替代Lc,即令Lc=L′c;记录退火搜索到的最优适应度为fsa,最优解为Lsa;

步骤9.4,令E1=E1*α,如果E1≤E2,则模拟退火搜索终止,进行判断:如果fsa>fbest,则替代之前的最优解,令Lbest=Lsa,fbest=fsa;否则,保持原来的最优解不变;如果E1>E2,返回执行步骤9.2;

步骤10,一次迭代结束,更新迭代次数g=g+1;

步骤11,判断是否满足终止条件,若g>G,执行步骤12;否则,进行新一轮迭代,返回执行步骤4;

步骤12,对记录的最优解Lbest进行解码,其适应度的倒数1/fbest为目标函数的值;解码获得的服务序列中,两个相同车辆编号之间的序列即为该车辆的服务序列,输出最优方案。