MATLAB智能算法30个案例分析学习笔记

该博客介绍了基于混合和粒子群算法的旅行商问题(TSP)搜索算法。这种算法结合了遗传算法的交叉和变异操作,扩展了粒子群优化算法的适用范围。在TSP问题中,算法通过个体编码、适应度值计算、交叉和变异操作寻找最短路径。交叉操作采用整数交叉法,而变异则通过随机位置交换实现。整个过程包括种群初始化、适应度值计算、粒子更新等步骤,直至找到最优解。

基于混合和粒子群算法的TSP搜索算法

混合粒子群

与粒子群优化算法不同,传统算法通过跟踪极值来更新粒子的位置(极值包括个体极值和群体极值;个体极值:个体所经历位置中计算得到最优位置;群体极值:种群中的所有粒子搜索到的适应度的最优位置),该算法引入遗传算法中交叉和变异操作,通过粒子同个体极值和群体极值交叉以粒子自身变异的方法搜索最优解,扩展了算法的应用领域。

  1. 问题描述
    TSP问题:traveling saleman problrm,是最基本的路线问题。寻求单一旅行者由起点出发,通过所给定的需求点之后,最后回到起点的最小路径成本问题。
    常见的TSP问题包括零件加工,路径遍历最优等问题。
  2. 求解步骤
    与粒子群优化算法不同,该算法在流程中添加了交叉环节(个体最优交叉、群体最优交叉)和变异环节(粒子变异),在粒子群优化算法中,那两个步骤为速度更新和位置更新。
    流程描述:
    **种群初始化:**怎样用一个个体表达这个问题的解以及把所有的个体累计到一起来表达整个种群。
    **适应度值计算:**根据个体编写评价函数,使得评价函数能对应其他的适应度值
    **更新粒子:**有了适应度值之后,更新每次的个体极值和群体极值。速度更新和位置更新不要了
    **个体最优交叉:**把个体和个体最优粒子进行交叉得到新粒子
    **群体最优交叉:**把个体和群体最优粒子进行交叉得到新粒子
    **粒子变异:**粒子自身变异到新粒子。
    判断算法是否结束:
    **补充说明:**遗传算法中的交叉变异,交叉:从一个种群中随机的选取两个个体。变异类似。
  3. 算法实现:
    (1)个体编码
    采用整数编码的方式,在TSP遍历中,每个粒子表示经历的所有城市。
    适应度操作:适应度值为所有路径的路径之和,适应度值越小,表示路径越短。要结合具体问题具体分析,适应度值可以简单可以复杂。
    (2)交叉操作
    个体通过和个体极值和群体极值交叉来更新,交叉方法采用整数交叉法,首先选择两个交叉位置,然后把个体和个体极值和群体极值进行交叉。
    (3)变异操作
    变异方法采用个体内部两位互换的方法,首先随机选择变异位置,POS1和POS2,然后把两个变异位置互换。
源代码,不适合小白,数学建模MATLAB资料 第1章谢菲尔德大学的MATLAB遗传算法工具箱 1.1理论基础 1.1.1遗传算法概述 1.1.2 谢菲尔德遗传算法工具箱 1.2案例背景 1.2.1 问题描述 1.2.2解题思路及步骤 1.3 MATLAB程序实现 1.3.1工具箱结构 1.3.2 遗传算法常用函数 1.3.3遗传算法工具箱应用举例 1.4延伸阅读 参考文献 第2章基于遗传算法和非线性规划的函数寻优算法 2.1理论基础 2.1.1非线性规划 2.1.2 非线性规划函数 2.1.3遗传算法基本思想 2。1.4算法结合思想 2.2案例背景 2.2.1 问题描述 2.2.2 算法流程 2.2.3遗传算法实现 2.3 MATLAB程序实现 2.3.1适应度函数 2.3.2选择操作 2.3.3交叉操作 2.3.4变异操作 2.3.5算法主函数 2.3.6非线性寻优 2.3.7结果分析 2.4延伸阅读 2.4.1其他函数的优化 2.4.2其他优化算法 参考文献 第3章基于遗传算法的BP神经网络优化算法 3.1理论基础 3.1.1 BP神经网络概述 3.1.2遗传算法的基本要素 3.2案例背景 3.2.1 问题描述 3.2.2解题思路及步骤 3.3 MATLAB程序实现 3.3.1 神经网络算法 3.3.2 遗传算法主函数 3.3.3 比较使用遗传算法前后的差别 3.3.4结果分析 3.4延伸阅读 参考文献 第4章基于遗传算法的TSP算法 4.1理论基础 4.2案例背景 4.2.1 问题描述 4.2.2解决思路及步骤 4.3 MATLAB程序实现 4.3.1种群初始化 4.3.2适应度函数 4.3.3选择操作 4.3.4 交叉操作 4.3.5变异操作 4.3.6进化逆转操作 4.3.7 画路线轨迹图 4.3.8遗传算法主函数 4.3.9结果分析 4.4延伸阅读 4.4.1 应用扩展 4.4.2 遗传算法的改进 4.4.3算法的局限性 参考文献 第5章基于遗传算法的LQR控制器优化设计 5.1理论基础 5.1.1 LQR控制 5.1.2 基于遗传算法设计LQR控制器 5.2案例背景 5.2.1 问题描述 5.2.2解题思路及步骤 …… 第6章遗传算法工具箱详解及应用 第7章多种群遗传算法的函数化算法 第8章基于量子遗传算法的函数寻优算法 第9章基于遗传算法的多目标优化算法 第10章基于粒子群处落地的多目标搜索算法 第11章基于多层编码遗传算法的车间调度算法 第12章免疫优化算法在物流配送中心选址中的应用 第13章粒子群算法的寻优算法 ……
MATLAB智能算法的源代码%% 清空环境 clc;clear %% 障碍物数据 position = load('barrier.txt'); plot([0,200],[0,200],'.'); hold on B = load('barrier.txt'); xlabel('km','fontsize',12) ylabel('km','fontsize',12) title('二维规划空间','fontsize',12) %% 描述起点和终点 S = [20,180]; T = [160,90]; plot([S(1),T(1)],[S(2),T(2)],'.'); % 图形标注 text(S(1)+2,S(2),'S'); text(T(1)+2,T(2),'T'); %% 描绘障碍物图形 fill(position(1:4,1),position(1:4,2),[0,0,0]); fill(position(5:8,1),position(5:8,2),[0,0,0]); fill(position(9:12,1),position(9:12,2),[0,0,0]); fill(position(13:15,1),position(13:15,2),[0,0,0]); % 下载链路端点数据 L = load('lines.txt'); %% 描绘线及中点 v = zeros(size(L)); for i=1:20 plot([position(L(i,1),1),position(L(i,2),1)],[position(L(i,1),2)... ,position(L(i,2),2)],'color','black','LineStyle','--'); v(i,:) = (position(L(i,1),:)+position(L(i,2),:))/2; plot(v(i,1),v(i,2),'*'); text(v(i,1)+2,v(i,2),strcat('v',num2str(i))); end %% 描绘可行路径 sign = load('matrix.txt'); [n,m]=size(sign); for i=1:n if i == 1 for k=1:m-1 if sign(i,k) == 1 plot([S(1),v(k-1,1)],[S(2),v(k-1,2)],'color',... 'black','Linewidth',2,'LineStyle','-'); end end continue; end for j=2:i if i == m if sign(i,j) == 1 plot([T(1),v(j-1,1)],[T(2),v(j-1,2)],'color',... 'black','Linewidth',2,'LineStyle','-'); end else if sign(i,j) == 1 plot([v(i-1,1),v(j-1,1)],[v(i-1,2),v(j-1,2)],... 'color','black','Linewidth',2,'LineStyle','-'); end end end end path = DijkstraPlan(position,sign); j = path(22); plot([T(1),v(j-1,1)],[T(2),v(j-1,2)],'color','yellow','LineWidth',3,'LineStyle','-.'); i = path(22); j = path(i); count = 0; while true plot([v(i-1,1),v(j-1,1)],[v(i-1,2),v(j-1,2)],'color','yellow','LineWidth',3,'LineStyle','-.'); count = count + 1; i = j; j = path(i); if i == 1 || j==1 break; end end plot([S(1),v(i-1,1)],[S(2),v(i-1,2)],'color','yellow','LineWidth',3,'LineStyle','-.'); count = count+3; pathtemp(count) = 22; j = 22; for i=2:count pathtemp(count-i+1) = path(j); j = path(j); end path = pathtemp; path = [1 9 8 7 13 14 12 22]; %% 蚁群算法参数初始化 pathCount = length(path)-2; %经过线段数量 pheCacuPara=2; %信息素计算参数 pheThres = 0.8; %信息素选择阈值 pheUpPara=[0.1 0.0003]; %信息素更新参数 qfz= zeros(pathCount,10); %启发值 phePara = ones(pathCount,10)*pheUpPara(2); %信息素 qfzPara1 = ones(10,1)*0.5; %启发信息参数 qfzPara2 = 1.1; %启发信息参数 m=10; %种群数量 NC=500; %循环次数 pathk = zeros(pathCount,m); %搜索结果记录 shortestpath = zeros(1,NC); %进化过程记录 %% 初始最短路径 dijpathlen = 0; vv = zeros(22,2); vv(1,:) = S; vv(22,:) = T; vv(2:21,:) = v; for i=1:pathCount-1 dijpathlen = dijpathlen + sqrt((vv(path(i),1)-vv(path(i+1),1))^2+(vv(path(i),2)-vv(path(i+1),2))^2); end LL = dijpathlen; %% 经过的链接线 lines = zeros(pathCount,4); for i = 1:pathCount lines(i,1:2) = B(L(path(i+1)-1,1),:); lines(i,3:4) = B(L(path(i+1)-1,2),:); end %% 循环搜索 for num = 1:NC %% 蚂蚁迭代寻优一次 for i=1:pathCount for k=1:m q = rand(); qfz(i,:) = (qfzPara2-abs((1:10)'/10-qfzPara1))/qfzPara2; %启发信息 if q<=pheThres%选择信息素最大值 arg = phePara(i,:).*(qfz(i,:).^pheCacuPara); j = find(arg == max(arg)); pathk(i,k) = j(1); else % 轮盘赌选择 arg = phePara(i,:).*(qfz(i,:).^pheCacuPara); sumarg = sum(arg); qq = (q-pheThres)/(1-pheThres); qtemp = 0; j = 1; while qtemp < qq qtemp = qtemp + (phePara(i,j)*(qfz(i,j)^pheCacuPara))/sumarg; j=j+1; end j=j-1; pathk(i,k) = j(1); end % 信息素更新 phePara(i,j) = (1-pheUpPara(1))*phePara(i,j)+pheUpPara(1)*pheUpPara(2); end end %% 计算路径长度 len = zeros(1,k); for k=1:m Pstart = S; Pend = lines(1,1:2) + (lines(1,3:4)-lines(1,1:2))*pathk(1,k)/10; for l=1:pathCount len(1,k) = len(1,k)+sqrt(sum((Pend-Pstart).^2)); Pstart = Pend; if l<pathCount Pend = lines(l+1,1:2) + (lines(l+1,3:4)-lines(l+1,1:2))*pathk(l+1,k)/10; end end Pend = T; len(1,k) = len(1,k)+sqrt(sum((Pend-Pstart).^2)); end %% 更新信息素 % 寻找最短路径 minlen = min(len); minlen = minlen(1); minant = find(len == minlen); minant = minant(1); % 更新全局最短路径 if minlen < LL LL = minlen; end % 更新信息素 for i=1:pathCount phePara(i,pathk(i,minant)) = (1-pheUpPara(1))* phePara(i,pathk(i,minant))+pheUpPara(1)*(1/minlen); end shortestpath(num) = minlen; end figure; plot(1:NC,shortestpath,'color','blue'); hold on % plot(1:NC,dijpathlen,'color','red'); ylabel('路径总长度'); xlabel('迭代次数');
1 基于遗传算法的TSP算法(王辉) TSP (旅行商问题—Traveling Salesman Problem),是典型的NP完全问题,即其最坏情况下的时间复杂性随着问题规模的增大按指数方式增长,到目前为止不能找到一个多项式时间的有效算法。遗传算法是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以 及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。实践证明,遗传算法对于解决TSP问题等组合优化问题具有较好的寻优性能。 2 基于遗传算法和非线性规划的函数寻优算法(史峰) 遗传算法提供了求解非线性规划的通用框架,它不依赖于问题的具体领域。遗传算法的优点是将问题参数编码成染色体后进行优化, 而不针对参数本身, 从而不受函数约束条件的限制; 搜索过程从问题解的一个集合开始, 而不是单个个体, 具有隐含并行搜索特性, 可大大减少陷入局部最小的可能性。而且优化计算时算法不依赖于梯度信息,且不要求目标函数连续及可导,使其适于求解传统搜索方法难以解决的大规模、非线性组合优化问题。 3 基于遗传算法的BP神经网络优化算法(王辉) BP模型被广泛地应用于模式分类、模式识别等方面.但BP算法收敛速度慢,且很容易陷入局部极小点,而遗传算法具有并行搜索、效率高、不存在局部收敛问题等优点而被广泛应用.遗传算法的寻优过程带有一定程度的随机性和盲从性,多数情况下只能收敛到全局次优解,且有过早收敛的现象.为了克服遗传算法寻优过程的盲从性,将有监督学习的BP算法与之结合以达到优势互补、提高算法的稳定性和全局搜索能力的目的。 4 设菲尔德大学的MATLAB遗传算法工具箱(王辉) Matlab 遗传算法(Genetic Algorithm)优化工具箱是基于基本操作及终止条件、二进制和十进制相互转换等操作的综合函数库。其实现步骤包括:通过输入及输出函数求出遗传算法主函数、初始种群的生成函数,采用选择、交叉、变异操作求得基本遗传操作函数。以函数仿真为例,对该函数优化和GA 改进,只需改写函数m 文件形式即可......
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值