多目标蚁群算法路径规划(二)-----从数据设计到毕业论文系列

多目标蚁群算法路径规划(二)

系列前言(一定要看)

  • 本系列为总结本人近一年多关于启发式算法解决路径规划的相关内容。主要从以下几个主题内容进行系列写作1.常见的数据获取方式与处理过程、2、算法的基础流程3.常见算法改进4.多目标排序5.基于应用场景的改进6.其他相关问题7、批量运行测试数据本系列全程免费提供相关代码。
  • 本系列代码来源主要参考网上相关博客与文献、根据不同实际需求重构的代码。
  • 本文所有提供的代码与文字说明仅供参考,不作为商业目的。
  • 对内容有疑问或是错误部分可以留言或私信。
  • 有偿定制特定功能, qq:1602480875。价格范围60—500。(建议优先看完系列内容,尝试系列中的代码,这些都是免费且能解决大部分问题。),具体代码后续会以完整形式上传百度云。
    更新时间:2021年5月21日

1.1 本章内容说明

  • 体积约束路径规划启发式算法例子分析
  • 算法设计思路解析
  • 分步详细分析代码过程
  • 基于体积/质量约束的变体例子
  • 算法的设计思路与流程
  • 相关代码汇总总结
  • 下期预告

1.2 本章主要分享内容简介(摘要)

  • 本章将以一个基础的体积约束循环发车的路径规划(VRP)例子作为切入点,分析一个该问题的代码实现过程与设计思路。具体讲解代码的每一关键设计过程以及常用改进的关键点比如:收敛性搜索域空间的改变搜索权重的变化车辆运行相关的约束设计(例如:满意度、满载率等)。本章节不会去具体介绍相关启发式算法具体原理,需要根据读者自行学习查找(后续可能更新)。
  • 第二部分讲解基于基础VRP算法的变体解决特点需求规划例子实例内容:现需要求解从起始点出车辆在规定时间内去向不同地点进行服务最后返回起始点,每个地点包含位置、服务时间需求、服务收益。路径规划要求以最大收益作为第一目标,次要目标为寻求最大收益中路径最短的规划方案。

2体积约束路径规划启发式算法例子分析

2.1问题背景简单描述

1.路径规划过程中分为简单的旅行商问题(TSP),即车辆从起点出发走完全
部路径最后返回原点的过程。唯一的约束要求运行的点不能重复,目标函
数是寻找短路径。

2.由于实际问题的种类差异需要求对求解问题设定不同的约束条件。在
此背景下演变出多种类型的路径规划问题。其中最为简单和基础的约束条件
为设定车辆能够承载的质量、体积、速度、时间成本等条件是有限的。这要
求车辆需要在有限的约束条件搜寻路径。当超过约束条件时进行返回起点重
新出发,或是停止运行。这种问题通常叫做VRP路径规划。

2.2 本章例子使用的基础代码https://blog.csdn.net/qq_33980829/article/details/105939579

3算法设计思路解析

3.1 算法求解流程图

在这里插入图片描述

3.2 算法解析说明

  • 1 首先根据需求需要先导入车辆信息、路径信息、位置信息、地点的需求信息。根据导入的信息进行求解可行路径。(提前统一单位,减少运算过程中的问题)(合理设置数据,具体参考本系列上篇内容)
  • 2 随机生成n条路径,根据车辆质量约束条件筛选可行的路径。(初始路径数目,通常为两倍于地点数目)
  • 3 筛选的计算过程为:判断当前剩余空间计算下一个点需要的利用的空间,当满足装置时保留点。当超出车辆最大装置量时则返回起点清空装置。(约束条件的关键控制部分,基础变体的主要可变部分)
  • 4 最后判断是否全部数据点都以运输完全,当没有运输完全时重新出发。(控制循环发车)
  • 5 根据每代最优来更新生成路径的方式与生成方向。(决定求解过程中的收敛性)
  • 6 记录运行过程中最优的结果与每代生成平均结果用于反应解的收敛情况。(也用于比较不同算法间的求解效果)

4 分步详细分析代码过程

  • 数据导入
microsoftexcel = xlsread('煤矿分布表.xlsx','路径信息','A1:B9');
  • 需要判断过程 车辆装载与需求点的关系*(此处可以根据需求变化,例如转变为收货过程、同时满足2个约束条件或满足两个条件中的任意一个,或者可以两者的其他逻辑来控制约束方式)。*
 if Cap_1-Demand(J(1,k),1)>=0 &&  Cap_2-Demand(J(1,k),2)>=0 %如果车辆装载量大于待访问城市需求量
  • 求解最优路径结果 (改变此处可以调整求解搜寻的方向)
  L_best(nC)=min(L);             %最优路径为距离最短的路径
    pos=find(L==min(L));           %找出最优路径对应的位置:即为哪只蚂蚁
    R_best(nC,:)=Route(pos(1),:);  %确定最优路径对应的城市顺序
    L_ave(nC)=mean(L)';            %求第k次迭代的平均距离
  • 信息素更新规则
  for k=1:num_R-1          %建立了完整路径后在释放信息素
		Delta_Tau(R_best(nC,k),R_best(nC,k+1))=Delta_Tau(R_best(nC,k),R_best(nC,k+1))+Q/L_best(nC);
    end
  • 当需要控制迭代过程中的收敛性时,可以设置相关的更新系数。例如:前期产生的随机路径更加多,中期稳定在特定值,后期减少随机的产生。利于数据结果兼顾收敛性好、搜索空间大。(并非重要步骤,可以去除)
  %% 基于迭代次数控制挥发程度
            switch nC
                case nC<iter_max/3
                    Rho=0.2;
                case nC<2*iter_max/3 && nC>iter_max/3
                    Rho=0.3;
                otherwise
                    Rho=0.5;
            end
  • 结果绘制(自行看代码中的注释)
figure(1)%作迭代收敛曲线图
x=linspace(0,iter_max,iter_max);
y=L_best(:,1);
plot(x,y);
xlabel('迭代次数'); ylabel('最大成本变化');
saveas(gcf,'迭代过程.jpg')
figure(2)   %作最短路径图
[~,m]=max(best_route_2(:,2));
Shortest_Route=xx_1(m,:);
plot(C(Shortest_Route,1),C(Shortest_Route,2),'*-');
grid on
for i =1:size(C,1)
    text(C(i,1),C(i,2),['   ' num2str(i)]);
end
xlabel('客户所在横坐标'); ylabel('客户所在纵坐标');
saveas(gcf,'路径结果.jpg')

5. 基于体积/质量约束的变体例子

5.1需求背景介绍

  • 补给船在坐标原点,如果补给时间有限每艘船被补给的价值不一样。假设条件是补给船的航速恒定为V km/h,编队内的每艘船的补给位置相对固定。货轮的补给价值是n_1,对它进行补给所需的时间为m 1小时;商船补给价值是n_1,补给所需的时间为m_2小时;游轮补给价值是n_3,补给所需的时间为m_3小时,可用时间总共为m_4小时,怎样在m_4小时内进行路径规划,使补给价值达到最大最后输出的结果为最大补给价值下的最优路径.要求速度可变。

5.2 例子代码以及运行结果

https://blog.csdn.net/qq_33980829/article/details/117120590(完整版于6.20号后分享)
番外篇
https://blog.csdn.net/qq_33980829/article/details/117395842

5.3 算法的设计思路与流程关键点

  • 1 车辆每次运输前计算运输消耗的时间
  • 2 当时间消耗完全时返回起点,记录当前生成路径。
  • 3 记录每次运行生成的最大价值对应的最短路径。

5.4 程序设计流程图

  • 待后续补充

6. 相关代码汇总总结

-路径规划结果
在这里插入图片描述

  • 最大价值的最短路径寻找
    在这里插入图片描述

-运行输出结果
在这里插入图片描述
在这里插入图片描述

  • 待后续补充

下期内容说明

基础待时间窗口路径规划算法算法

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值