最近正在学习的算法,加勒注释可以看一下
clear;close all;clc
C=[1,1;1,2;1,3;1,4];
NC_max=100;
m=32; % 蚂蚁数
Alpha=1;
Beta=4;% 决定tao和miu重要性的参数
Rho=09; %衰减系数
Q=095;
%%-------------------------------------------------------------------------
%% 主要符号说明
%% C n个城市的坐标,n×2的矩阵
%% NC_max 最大迭代次数
%% m 蚂蚁个数
%% Alpha 表征信息素重要程度的参数
%% Beta 表征启发式因子重要程度的参数
%% Rho 信息素蒸发系数
%% Q 信息素增加强度系数
%% R_best 各代最佳路线
%% L_best 各代最佳路线的长度
%%=========================================================================
%%第一步:变量初始化
n=size(C,1);%n表示问题的规模(城市个数)
D=zeros(n,n);%D表示完全图的赋权邻接矩阵
for i=1:n
for j=i:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^05;
else
D(i,j)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示
end
D(j,i)=D(i,j); %对称矩阵
end
end
%%%%%%%%%%记录每两个城市间的距离 矩阵
Eta=1/D; %Eta为启发因子,这里设为距离的倒数
Tau=ones(n,n); %Tau为信息素矩阵
Tabu=zeros(m,n); %存储并记录路径的生成
NC=1; %迭代计数器,记录迭代次数
R_best=zeros(NC_max,n); %各代最佳路线
L_best=infones(NC_max,1); %各代最佳路线的长度
L_ave=zeros(NC_max,1); %各代路线的平均长度
visited=[];
while NC<=NC_max %停止条件之一:达到最大迭代次数,停止
%%第二步:将m只蚂蚁放到n个城市上
Randpos=[]; %随即存取
for i=1:(ceil(m/n)) %向上取整
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))'; %取随机路径的前m位,m只蚂蚁的初始所在城市
%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n %所在城市不计算
for i=1:m %j,计算所有蚂蚁已经访问的城市个数+1 ,,i,蚂蚁序号
visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问
J=zeros(1,(n-j+1)); %待访问的城市
P=J; %待访问城市的选择概率分布
Jc=1; %变量记录已经访问的个数
for k=1:n
if length(find(visited==k))==0 %开始时置0
J(Jc)=k;
Jc=Jc+1; %未访问的城市个数加1
end
end
%下面计算待选城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)(Eta(visited(end),J(k))^Beta); %最近访问的城市和未访问的城市之间的 选择优先级 信息素(前蚂蚁经验)和距离决定
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P); %cumsum,元素累加 即返回的新数组 第i个值为 输入数组前i个值之和
Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end
%%第四步:记录本次迭代最佳路线
L=zeros(m,1); %开始距离为0,m1的列向量
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1)); %原距离加上第j个城市到第j+1个城市的距离
end
% L(i)=L(i)+D(R(1),R(n)); %一轮下来后返回起点的距离 ,我觉得没必要 %%%%%%%%%%<<<<<<<<<<<<--------------------
end
L_best(NC)=min(L); %最佳距离取最小
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线
L_ave(NC)=mean(L); %此轮迭代后的平均距离
NC=NC+1; %迭代继续
%%第五步:更新信息素
Delta_Tau=zeros(n,n); %开始时信息素为nn的0矩阵
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); %信息素增量与 本次迭代中某个蚂蚁 的总路程 成反比 最优路
%此次迭代 所有蚂蚁走过的路径 上的信息素增量 更新 线则 沿途所有路径点之间信息素增量最大
end
% Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
%此次循环在整个路径上的信息素增量 ,同上 做回到起点时才用到
end
Tau=(1-Rho)Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素 考虑到之前蚂蚁在沿途留下的 信息 受到各种因素而有所损失 都归为挥发
%%第六步:所有蚂蚁的行程表清零
Tabu=zeros(m,n);
end
%%第七步:输出结果
Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)
Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径
Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离
subplot(1,2,1) %绘制第一个子图形
N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')
hold on
end
title('旅行商问题优化结果 ')
subplot(1,2,2) %绘制第二个子图形
plot(L_best)
hold on %保持图形
plot(L_ave,'r')
title('平均距离和最短距离') %标题
R_best
我只告诉你什么是蚂蚁算法: 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术。它由Marco Dorigo于1992年在他的博士论文中引入,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。
为什么小小的蚂蚁能够找到食物?他们具有智能么?设想,如果我们要为蚂蚁设计一个人工智能的程序,那么这个程序要多么复杂呢?首先,你要让蚂蚁能够避开障碍物,就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物,其次,要让蚂蚁找到食物,就需要让他们遍历空间上的所有点;再次,如果要让蚂蚁找到最短的路径,那么需要计算所有可能的路径并且比较它们的大小,而且更重要的是,你要小心翼翼的编程,因为程序的错误也许会让你前功尽弃。这是多么不可思议的程序!太复杂了,恐怕没人能够完成这样繁琐冗余的程序。
然而,事实并没有你想得那么复杂,上面这个程序每个蚂蚁的核心程序编码不过100多行!为什么这么简单的程序会让蚂蚁干这样复杂的事情?答案是:简单规则的涌现。事实上,每只蚂蚁并不是像我们想象的需要知道整个世界的信息,他们其实只关心很小范围内的眼前信息,而且根据这些局部信息利用几条简单的规则进行决策,这样,在蚁群这个集体里,复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律!那么,这些简单规则是什么呢?下面详细说明:
1、范围:
蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般是3),那么它能观察到的范围就是33个方格世界,并且能移动的距离也在这个范围之内。
2、环境:
蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素,信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素,一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。
3、觅食规则:
在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接过去。否则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多,这样,它就朝信息素多的地方走,并且每只蚂蚁多会以小概率犯错误,从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样,只不过它对窝的信息素做出反应,而对食物信息素没反应。
4、移动规则:
每只蚂蚁都朝向信息素最多的方向移,并且,当周围没有信息素指引的时候,蚂蚁会按照自己原来运动的方向惯性的运动下去,并且,在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈,它会记住最近刚走过了哪些点,如果发现要走的下一点已经在最近走过了,它就会尽量避开。
5、避障规则:
如果蚂蚁要移动的方向有障碍物挡住,它会随机的选择另一个方向,并且有信息素指引的话,它会按照觅食的规则行为。
7、播撒信息素规则:
每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多,并随着它走远的距离,播撒的信息素越来越少。
根据这几条规则,蚂蚁之间并没有直接的关系,但是每只蚂蚁都和环境发生交互,而通过信息素这个纽带,实际上把各个蚂蚁之间关联起来了。比如,当一只蚂蚁找到了食物,它并没有直接告诉其它蚂蚁这儿有食物,而是向环境播撒信息素,当其它的蚂蚁经过它附近的时候,就会感觉到信息素的存在,进而根据信息素的指引找到了食物。
说了这么多,蚂蚁究竟是怎么找到食物的呢?
在没有蚂蚁找到食物的时候,环境没有有用的信息素,那么蚂蚁为什么会相对有效的找到食物呢?这要归功于蚂蚁的移动规则,尤其是在没有信息素时候的移动规则。首先,它要能尽量保持某种惯性,这样使得蚂蚁尽量向前方移动(开始,这个前方是随机固定的一个方向),而不是原地无谓的打转或者震动;其次,蚂蚁要有一定的随机性,虽然有了固定的方向,但它也不能像粒子一样直线运动下去,而是有一个随机的干扰。这样就使得蚂蚁运动起来具有了一定的目的性,尽量保持原来的方向,但又有新的试探,尤其当碰到障碍物的时候它会立即改变方向,这可以看成一种选择的过程,也就是环境的障碍物让蚂蚁的某个方向正确,而其他方向则不对。这就解释了为什么单个蚂蚁在复杂的诸如迷宫的地图中仍然能找到隐蔽得很好的食物。
当然,在有一只蚂蚁找到了食物的时候,其他蚂蚁会沿着信息素很快找到食物的。
蚂蚁如何找到最短路径的?这一是要归功于信息素,另外要归功于环境,具体说是计算机时钟。信息素多的地方显然经过这里的蚂蚁会多,因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物,开始的时候,走这两条路的蚂蚁数量同样多(或者较长的路上蚂蚁多,这也无关紧要)。当蚂蚁沿着一条路到达终点以后会马上返回来,这样,短的路蚂蚁来回一次的时间就短,这也意味着重复的频率就快,因而在单位时间里走过的蚂蚁数目就多,洒下的信息素自然也会多,自然会有更多的蚂蚁被吸引过来,从而洒下更多的信息素……;而长的路正相反,因此,越来越多地蚂蚁聚集到较短的路径上来,最短的路径就近似找到了。也许有人会问局部最短路径和全局最短路的问题,实际上蚂蚁逐渐接近全局最短路的,为什么呢?这源于蚂蚁会犯错误,也就是它会按照一定的概率不往信息素高的地方走而另辟蹊径,这可以理解为一种创新,这种创新如果能缩短路途,那么根据刚才叙述的原理,更多的蚂蚁会被吸引过来。
引申:
跟着蚂蚁的踪迹,你找到了什么?通过上面的原理叙述和实际 *** 作,我们不难发现蚂蚁之所以具有智能行为,完全归功于它的简单行为规则,而这些规则综合起来具有下面两个方面的特点:
1、多样性
2、正反馈
多样性保证了蚂蚁在觅食的时候不置走进死胡同而无限循环,正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一种创造能力,而正反馈是一种学习强化能力。正反馈的力量也可以比喻成权威的意见,而多样性是打破权威体现的创造性,正是这两点小心翼翼的巧妙结合才使得智能行为涌现出来了。
引申来讲,大自然的进化,社会的进步、人类的创新实际上都离不开这两样东西,多样性保证了系统的创新能力,正反馈保证了优良特性能够得到强化,两者要恰到好处的结合。如果多样性过剩,也就是系统过于活跃,这相当于蚂蚁会过多的随机运动,它就会陷入混沌状态;而相反,多样性不够,正反馈机制过强,那么系统就好比一潭死水。这在蚁群中来讲就表现为,蚂蚁的行为过于僵硬,当环境变化了,蚂蚁群仍然不能适当的调整。
既然复杂性、智能行为是根据底层规则涌现的,既然底层规则具有多样性和正反馈特点,那么也许你会问这些规则是哪里来的?多样性和正反馈又是哪里来的?我本人的意见:规则来源于大自然的进化。而大自然的进化根据刚才讲的也体现为多样性和正反馈的巧妙结合。而这样的巧妙结合又是为什么呢?为什么在你眼前呈现的世界是如此栩栩如生呢?答案在于环境造就了这一切,之所以你看到栩栩如生的世界,是因为那些不能够适应环境的多样性与正反馈的结合都已经死掉了,被环境淘汰了!
参数说明:
最大信息素:蚂蚁在一开始拥有的信息素总量,越大表示程序在较长一段时间能够存在信息素。信息素消减的速度:随着时间的流逝,已经存在于世界上的信息素会消减,这个数值越大,那么消减的越快。
错误概率表示这个蚂蚁不往信息素最大的区域走的概率,越大则表示这个蚂蚁越有创新性。
速度半径表示蚂蚁一次能走的最大长度,也表示这个蚂蚁的感知范围。
记忆能力表示蚂蚁能记住多少个刚刚走过点的坐标,这个值避免了蚂蚁在本地打转,停滞不前。而这个值越大那么整个系统运行速度就慢,越小则蚂蚁越容易原地转圈。
-----例子-----
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" ">
首先,Matlab是一个工具,它不是一个方法。
其次,我给你推荐一本书
《MATLAB 在数学建模中的应用(第2版)》
然后它的目录可以回答你的问题:
第1章 数学建模常规方法及其MATLAB实现
11 MATLAB与数据文件的交互
111 MATLAB与Excel的交互
112 MATLAB与TXT交互
113 MATLAB界面导入数据的方法
12 数据拟合方法
121 多项式拟合
122 指定函数拟合
123 曲线拟合工具箱
13 数据拟合应用实例
131 人口预测模型
132 薄膜渗透率的测定
14 数据的可视化
141 地形地貌图形的绘制
142 车灯光源投影区域的绘制(CUMCM2002A)
15 层次分析法(AHP)
151 层次分析法的应用场景
152 AHPMATLAB程序设计
第2章 规划问题的MATLAB求解
21 线性规划
211 线性规划的实例与定义
212 线性规划的MATLAB标准形式
213 线性规划问题解的概念
214 求解线性规划的MATLAB解法
22 非线性规划
221 非线性规划的实例与定义
222 非线性规划的MATLAB解法
223 二次规划
23 整数规划
231 整数规划的定义
232 01整数规划
233 随机取样计算法
第3章 数据建模及MATLAB实现
31 云模型
311 云模型基础知识
312 云模型的MATLAB程序设计
32 Logistic回归
321 Logistic模型
322 Logistic回归MATLAB程序设计
33 主成分分析
331 PCA基本思想
332 PCA步骤
333 主成分分析MATLAB程序设计
34 支持向量机(SVM)
341 SVM基本思想
342 理论基础
343 支持向量机MATLAB程序设计
35 K均值(KMeans)
351 KMeans原理、步骤和特点
352 KMeans聚类MATLAB程序设计
36 朴素贝叶斯判别法
361 朴素贝叶斯判别模型
362 朴素贝叶斯判别法MATLAB设计
37 数据建模综合应用
参考文献
第4章 灰色预测及其MATLAB实现
41 灰色系统基本理论
411 灰色关联度矩阵
412 经典灰色模型GM(1,1)
413 灰色Verhulst模型
42 灰色系统的程序设计
421 灰色关联度矩阵的程序设计
422 GM(1,1)的程序设计
423 灰色Verhulst模型的程序设计
43 灰色预测的MATLAB程序
431 典型程序结构
432 灰色预测程序说明
44 灰色预测应用实例
441 实例一长江水质的预测(CUMCM2005A)
442 实例二预测与会代表人数(CUMCM2009D)
45 小结
参考文献
第5章 遗传算法及其MATLAB实现
51 遗传算法基本原理
511 人工智能算法概述
512 遗传算法生物学基础
513 遗传算法的实现步骤
514 遗传算法的拓展
52 遗传算法的MATLAB程序设计
521 程序设计流程及参数选取
522 MATLAB遗传算法工具箱
53 遗传算法应用案例
531 案例一:无约束目标函数最大值遗传算法求解策略
532 案例二:CUMCM中多约束非线性规划问题的求解
533 案例三:BEATbx遗传算法工具箱的应用——电子商务中转化率影响因素研究
参考文献
第6章 模拟退火算法及其MATLAB实现
61 算法的基本理论
611 算法概述
612 基本思想
613 其他一些参数的说明
614 算法基本步骤
615 几点说明
62 算法的MATLAB实现
621 算法设计步骤
622 典型程序结构
63 应用实例:背包问题的求解
631 问题的描述
632 问题的求解
64 模拟退火程序包ASA简介
641 ASA的优化实例
642 ASA的编译
643 MATLAB版ASA的安装与使用
65 小结
66 延伸阅读
参考文献
第7章 人工神经网络及其MATLAB实现
71 人工神经网络基本理论
711 人工神经网络模型拓扑结构
712 常用激励函数
713 常见神经网络理论
72 BP神经网络的结构设计
721 鲨鱼嗅闻血腥味与BP神经网络训练
722 透视神经网络的学习步骤
723 BP神经网络的动态拟合过程
73 RBF神经网络的结构设计
731 梯度训练法RBF神经网络的结构设计
732 RBF神经网络的性能
74 应用实例
741 基于MATLAB源程序公路运量预测
742 基于MATLAB工具箱公路运量预测
743 艾滋病治疗最佳停药时间的确定(CUMCM2006B)
744 RBF神经网络预测新客户流失概率
75 延伸阅读
751 从金融分析中的小数定理谈神经网络的训练样本遴选规则
752 小议BP神经网络的衍生机理
参考文献
第8章粒子群算法及其MATLAB实现
81 PSO算法相关知识
811 初识PSO算法
812 PSO算法的基本理论
813 PSO算法的约束优化
814 PSO算法的优缺点
82 PSO算法程序设计
821 程序设计流程
822 PSO算法的参数选取
823 PSO算法MATLAB源程序范例
83 应用案例:基于PSO算法和BP算法训练神经网络
831 如何评价网络的性能
832 BP算法能够搜索到极值的原理
833 PSOBP神经网络的设计指导原则
834 PSO算法优化神经网络结构
835 PSOBP神经网络的实现
参考文献
第9章 蚁群算法及其MATLAB实现
91 蚁群算法原理
911 蚁群算法基本思想
912 蚁群算法数学模型
913 蚁群算法流程
92 蚁群算法的MATLAB实现
921 实例背景
922 算法设计步骤
923 MATLAB程序实现
924 程序执行结果与分析
93 算法关键参数的设定
931 参数设定的准则
932 蚂蚁数量
933 信息素因子
934 启发函数因子
935 信息素挥发因子
936 信息素常数
937 最大迭代次数
938 组合参数设计策略
94 应用实例:最佳旅游方案(苏北赛2011B)
941 问题描述
942 问题的求解和结果
95 本章小结
参考文献
第10章 小波分析及其MATLAB实现
101 小波分析基本理论
1011 傅里叶变换的局限性
1012 伸缩平移和小波变换
1013 小波变换入门和多尺度分析
1014 小波窗函数自适应分析
102 小波分析MATLAB程序设计
1021 小波分析工具箱函数指令
1022 小波分析程序设计综合案例
103 小波分析应用案例
1031 案例一:融合拓扑结构的小波神经网络
1032 案例二:血管重建引出的图像数字水印
参考文献
第11章 计算机虚拟及其MATLAB实现
111 计算机虚拟基本知识
1111 从3G移动互联网协议WCDMA谈MATLAB虚拟
1112 计算机虚拟与数学建模
1113 数值模拟与经济效益博弈
112 数值模拟MATLAB程序设计
1121 微分方程组模拟
1122 服从概率分布的随机模拟
1123 蒙特卡罗模拟
113 动态仿真MATLAB程序设计
1131 MATLAB音频处理
1132 MATLAB常规动画实现
114 应用案例:四维水质模型
1141 问题的提出
1142 问题的分析
1143 四维水质模型准备
1144 条件假设与符号约定
1145 四维水质模型的组建
1146 模型求解
1147 计算机模拟情境
参考文献
下篇 真题演习
第12章 **中的数学(CUMCM2002B)
121 问题的提出
122 模型的建立
1221 模型假设与符号说明
1222 模型的准备
1223 模型的建立
123 模型的求解
1231 求解的思路
1232 MATLAB程序
1233 程序结果
124 技巧点评
参考文献
第13章 露天矿卡车调度问题(CUMCM2003B)
131 问题的提出
132 基本假设与符号说明
1321 基本假设
1322 符号说明
133 问题分析及模型准备
134 原则①:数学模型(模型1)的建立与求解
1341 模型的建立
1342 模型求解
135 原则②:数学模型(模型2)的建立与求解
136 技巧点评
参考文献
第14章 奥运会商圈规划问题(CUMCM2004A)
141 问题的描述
142 基本假设、名词约定及符号说明
1421 基本假设
1422 符号说明
1423 名词约定
143 问题分析与模型准备
1431 基本思路
1432 基本数学表达式的构建
144 设置MS网点数学模型的建立与求解
1441 模型建立
1442 模型求解
145 设置MS网点理论体系的建立
146 商区布局规划的数学模型
1461 模型建立
1462 模型求解
147 模型的评价及使用说明
1471 模型的优点
1472 模型的缺点
148 技巧点评
参考文献
第15章 交巡警服务平台的设置与调度(CUMCM2011B)
151 问题的提出
152 问题的分析
153 基本假设
154 问题1模型的建立与求解
1541 交巡警服务平台管辖范围分配
1542 交巡警的调度
1543 最佳新增服务平台设置
155 问题2模型的建立和求解
1551 全市服务平台的合理性分析问题的模型与求解
1552 搜捕嫌疑犯实例的模型与求解
156 模型的评价与改进
1561 模型优点
1562 模型缺点
157 技巧点评
参考文献
第16章 葡萄酒的评价(CUMCM2012A)
161 问题的提出
162 基本假设
163 问题①模型的建立和求解
1631 问题①的分析
1632 模型的建立和求解
164 问题②模型的建立和求解
1641 问题②的基本假设和分析
1642 模型的建立和求解
165 问题③模型的建立和求解
1651 问题③的分析
1652 模型的建立和求解
166 问题④模型的建立和求解
1661 问题④的分析
1662 模型的建立和求解
167 论文点评
参考文献
附件数学建模参赛经验
一、如何准备数学建模竞赛
二、数学建模队员应该如何学习MATLAB
三、如何在数学建模竞赛中取得好成绩
四、数学建模竞赛中的项目管理和时间管理
五、一种非常实用的数学建模方法——目标建模法
以上就是关于matlab期末考试程序明天交,急需一篇!中等难度的,60~70行左右全部的内容,包括:matlab期末考试程序明天交,急需一篇!中等难度的,60~70行左右、用蚂蚁算法来实现公交线网优化,谁有源代码、MATLAB建模方法有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)