💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。
更多Matlab路径规划仿真内容点击👇
①Matlab路径规划(进阶版)
②付费专栏Matlab路径规划(初级版)
⛳️关注优快云海神之光,更多资源等你来!!
⛄一、蚁群算法简介
1 概要
模拟蚂蚁觅食行为(最短路径原理)设计的算法。讲蚂蚁群觅食的特点抽象出来转化成数学描述。
• 蚁群算法(Ant Colony Algorithm, ACA)由Marco Dorigo于1992年在他的博士论文中首次提出。
• 蚂蚁在寻找食物源时,会在其经过的路径上释放一种信息素,并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短。
• 通常,蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放 一定量的信息素,以增强该条路径上的信息素浓度,这样,会形成一个正反馈。最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,即距离最短。
• 生物学家同时发现,路径上的信息素浓度会随着时间的推进而逐渐衰减。
• 将蚁群算法应用于解决优化问题,其基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短 的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。
类比GA(遗传算法)的交叉、选择、变异,PSO(粒子群算法)的个体、群体极值优化,蚁群算法也有自己的优化策略:正反馈的信息机制、信息素浓度的更新、蚂蚁对能够访问的路径的筛选。
2 基本思想
蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理。根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径。蚂蚁是如何做到这一点的呢?
原来,蚂蚁在寻找食物源时,能在其走过的路径上放一种蚂蚁特有的分泌物-信息 素,也可称为信息素,使得一定范围内的其他蚂蚁能够察觉到并由此影响它们以后的行为。当一些路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,以致信息素强度增大(当然,随时间的推移会逐渐减弱,所以蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度,这种选择过程被称之为蚂蚁的自催化行为。 由于其原理是一种正反馈机制,因此,也可将蚂蚁王国理解为所谓的增强型学习系统。 这里我们用一个图来说明蚂蚁觅食的最短路径选择原理,如图所示。在中,假设A点是蚂蚁的巢穴,B点是食物,A、B两点间有一个障碍物,那么此时从A点到B点 的蚂蚁就必须决定往左走还是往右走,而从B点到A点的蚂蚁也必须决定选择走哪条路径。 这种决定会受到各条路径上以往蚂蚁留下的信息素浓度(即残留信息素浓度)的影响。 如果往 右走的路径上的信息素浓度比较大,那么右边的路径被蚂蚁选中的可能性也就大一些。但对于第一批探路的蚂蚁,因为没有信息素的影响或影响比较小,所以它们选择向左或者向右的可能性是一样的,正如图所示的那样。随着觅食过程的进行,各条道路上信息 素的强度开始出现变化,有的线路强,有的 线路弱。现以从A点到B点的蚂蚁为例说明(从B点到 A点的蚂蚁,过程也基本是一样的)随后过程的变化。由于路径 ADB比路径ACB要短,因此选择ADB路径的第一只蚂蚁要比选择ACB的第一只蚂蚁早到达B点。此时,从B点向 A点看,路径BDA A上的信息素浓度要比路径BCA上的信息素浓度大。因此从下一时刻开始,从B点到A 点的蚂蚁,它们选择 BDA路径的可能性要比选择BCA路径的可能性就大些,从而使ABDA路线上的信息素进一步增强,于是依D赖信息素强度选择路径的蚂蚁逐渐偏向于选择路径 ADB,如图所示。随着时间的推移,几乎所有的蚂蚁都会选择路径 ADB(或 BDA)搬运食物,而我们同时也会发现:ADB路径也正是事实上的最短路径。这种蚁群寻径的原理可简单理解为:对于单个的蚂蚁,它并没有要寻找最短路径的主观上的故意;但对于整个蚁群系统,它们又确实达到了寻找到最短路径的观上的效果。 在自然界中,蚁群的这种寻找路径的过程表现为一种正反馈的过程,“蚁群算法”就是模拟 生物学上蚂蚁群觅食寻找最短路径的原理衍生出来的。例如,我们把只具备了简单功能的工 作单元视为“蚂蚁”,那么上述寻找路径的过程可以用于解释蚁群算法中人工蚁群的寻优过程。 这也就是蚁群算法的基本思想。
3 算法设计的流程
这里以TSP问题为例,算法设计的流程如下:
步骤1:对相关参数进行初始化,包括蚁群规模、信息素因子、启发函数因子、信息素挥发因子、信息素常数、最大迭代次数等,以及将数据读入程序,并进行预处理:比如将城市的坐标信息转换为城市间的距离矩阵。
步骤2:随机将蚂蚁放于不同出发点,对每个蚂蚁计算其下个访问城市,直到有蚂蚁访问完所有城市。
步骤3:计算各蚂蚁经过的路径长度Lk,记录当前迭代次数最优解,同时对路径上的信息素浓度进行更新。
步骤4:判断是否达到最大迭代次数,若否,返回步骤2;是,结束程序。
步骤5:输出结果,并根据需要输出寻优过程中的相关指标,如运行时间、收敛迭代次数等。
4 数学模型
⛄二、部分源代码
%% 该软件用作凿岩机器人的离线孔序规划
%
function varargout = GuiTest(varargin)
% GUITEST MATLAB code for GuiTest.fig
% GUITEST, by itself, creates a new GUITEST or raises the existing
% singleton*.
%
% H = GUITEST returns the handle to a new GUITEST or the handle to
% the existing singleton*.
%
% GUITEST(‘CALLBACK’,hObject,eventDatda,handles,…) calls the local
% function named CALLBACK in GUITEST.M with the given input arguments.
%
% GUITEST(‘Property’,‘Value’,…) creates a new GUITEST or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GuiTest_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GuiTest_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help GuiTest
% Last Modified by GUIDE v2.5 15-Aug-2021 16:47:41
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @GuiTest_OpeningFcn, …
‘gui_OutputFcn’, @GuiTest_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% — Executes just before GuiTest is made visible.
function GuiTest_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to GuiTest (see VARARGIN)
% Choose default command line output for GuiTest
global undo reundo sequenceflag;
undo=struct(‘undo1’,[],‘undo2’,[],‘undo3’,[],‘undo4’,[],‘undo5’,[],‘undo6’,[],‘undo7’,[],‘undoNum’,0);
reundo=struct(‘reundo1’,[],‘reundo2’,[],‘reundo3’,[],‘reundo4’,[],‘reundo5’,[],‘reundo6’,[],‘reundo7’,[],‘reundoNum’,0);
handles.type=0;
sequenceflag = false;
% 初始化窗口的位置
handles.output = hObject;
h = get(gcf,‘Position’);
h = [5 5 h(3:4)];
set(gcf,‘Position’,h);
% ---------设置面板的父控件
set(handles.panel_addHole,‘Parent’,gcf);
set(handles.panel_changeSize,‘Parent’,gcf);
set(handles.panel_assignHole,‘Parent’,gcf);
set(handles.panel_deleteHole,‘Parent’,gcf);
set(handles.panel_drawTunnel,‘Parent’,gcf);
set(handles.panel_drillSequence,‘Parent’,gcf);
% ---------设置添加孔为显示面板,其他为隐藏
set(handles.panel_addHole,‘visible’,‘on’);
set(handles.panel_changeSize,‘visible’,‘off’);
set(handles.panel_assignHole,‘visible’,‘off’);
set(handles.panel_deleteHole,‘visible’,‘off’);
set(handles.panel_drawTunnel,‘visible’,‘off’);
set(handles.panel_drillSequence,‘visible’,‘off’);
% ------------父窗口和子窗口的通讯-----(测试作为子窗口)
% 获得父窗口对象句柄,并保存在当前窗口的handles结构体中
%handles.obj=varargin{1};
% 获得父窗口所有控件的句柄列表
%hdl=varargin{2};
% 将父窗口所有控件的句柄存在当前窗口结构体handles中的handle结构体中
%handles.handle=hdl;
% Update handles structure
%% 初始化仿真菜单下孔任务按钮的Enable
set(handles.optHoleTask,‘Enable’,‘off’);
set(handles.simulateSequence,‘Enable’,‘off’);
% ============================================================
% ----------作为父窗口
H=selectTunnelType(hObject,handles);
handles.tunnelType=H;
% 添加工具条
% set(hObject,‘toolbar’,‘figure’)
% 初始化各臂孔为空
handles.leftHoles=[];
handles.midHoles=[];
handles.rightHoles=[];
set(hObject,‘toolbar’,‘none’) ;
guidata(hObject, handles);
% UIWAIT makes GuiTest wait for user response (see UIRESUME)
% uiwait(handles.mainfigure);
% — Outputs from this function are returned to the command line.
function varargout = GuiTest_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%%
% 先清屏
% h=get(handles.axes1,‘children’);
% delete(h);
global type;
global tunnel;
global holes;
holes=[];
% 如果用户进软件时没有选择隧道类型,则初始化一个
if isempty(type)
type=2;
end
switch type
case 1
tunnel.type=1;
tunnel.size.R=3.31;
tunnel.size.t=5;
tunnel.size.a=2.16;
tunnel.size.l=0;
tunnel.size.r=0;
initTunnelAxes( tunnel,handles );
case 2
tunnel.type=2;
tunnel.size.R=8;
tunnel.size.a=4;
tunnel.size.l=0;
tunnel.size.r=0;
tunnel.size.t=0;
initTunnelAxes( tunnel,handles );
case 3
tunnel.type=3;
tunnel.size.R=8;
tunnel.size.a=4;
tunnel.size.l=0;
tunnel.size.r=0;
tunnel.size.t=0;
initTunnelAxes( tunnel,handles );
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化
2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化
5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置
9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长
10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合