MATLAB实验报告Word格式文档下载.docx

上传人:b****5 文档编号:18312170 上传时间:2022-12-15 格式:DOCX 页数:12 大小:147.41KB
下载 相关 举报
MATLAB实验报告Word格式文档下载.docx_第1页
第1页 / 共12页
MATLAB实验报告Word格式文档下载.docx_第2页
第2页 / 共12页
MATLAB实验报告Word格式文档下载.docx_第3页
第3页 / 共12页
MATLAB实验报告Word格式文档下载.docx_第4页
第4页 / 共12页
MATLAB实验报告Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

MATLAB实验报告Word格式文档下载.docx

《MATLAB实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MATLAB实验报告Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

MATLAB实验报告Word格式文档下载.docx

22

纵坐标

55

75

58

61

42

41

97

33

74

60

68

26

17

18

19

20

21

24

25

27

29

30

98

52

51

50

53

69

63

88

95

48

这实际上是一个TSP问题,宜用蚁群算法求解:

设有30个城市C=(1,2,...,30),任意两个城市i,j之间的距离为dij,求一条经过每个城市的路径γ=(γ

(1),γ

(2),...,γ(30)),使得距离最小。

二、实验原理与数学模型(20分)

1、算法来源

蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径。

2、实验原理

主要符号说明

C30个城市的坐标,30×

2的矩阵

NC_max最大迭代次数

m蚂蚁个数

Alpha表征信息素重要程度的参数

Beta表征启发式因子重要程度的参数

Rho信息素蒸发系数

Q信息素增加强度系数

R_best各代最佳路线

L_best各代最佳路线的长度

求解TSP问题的蚂蚁算法中,每只蚂蚁是一个独立的用于构造路线的过程,若干蚂蚁过程之间通过自适应的信息素值来交换信息,合作求解,并不断优化。

这里的信息素值分布式存储在图中,与各弧相关联。

蚂蚁算法求解TSP问题的过程如下:

(1)首先初始化,设迭代的次数为NC。

初始化NC=0

(2)将m个蚂蚁置于n个顶点上

(3)m只蚂蚁按概率函数选择下一座城市,完成各自的周游

每个蚂蚁按照状态变化规则逐步地构造一个解,即生成一条回路。

蚂蚁的任务是访问所有的城市后返回到起点,生成一条回路。

设蚂蚁k当前所在的顶点为i,那么,蚂蚁k由点i向点j移动要遵循规则而不断迁移,按不同概率来选择下一点。

(4)记录本次迭代最佳路线

(5)全局更新信息素值

应用全局信息素更新规则来改变信息素值。

当所有m个蚂蚁生成了m个解,其中有一条最短路径是本代最优解,将属于这条路线上的所有弧相关联的信息素值进行更新。

全局信息素更新的目的是在最短路线上注入额外的信息素,即只有属于最短路线的弧上的信息素才能得到加强,这是一个正反馈的过程,也是一个强化学习的过程。

在图中各弧上,伴随着信息素的挥发,全局最短路线上各弧的信息素值得到增加。

(6)终止

若终止条件满足,则结束;

否则NC=NC+1,转入步骤

(2)进行下一代进化。

终止条件可指定进化的代数,也可限定运行时间,或设定最短路长的下限。

(7)输出结果

 

3、数学模型

设m表示蚂蚁总数量,用

表示节点i和节点j之间的距离,

表示在t时刻

连线上的信息素浓度。

在初始时刻,m只蚂蚁会被随机地放置,各路径上的初始信息素浓度是相同的。

在t时刻,蚂蚁k从节点i转移到节点j的状态转移概率为

其中,

表示蚂蚁k下一步可以选择的所有节点,C为全部节点集合;

为信息启发式因子,在算法中代表轨迹相对重要程度,反映路径上的信息量对蚂蚁选择路径所起的影响程度,该值越大,蚂蚁间的协作性就越强;

可称为期望启发式因子,在算法中代表能见度的相对重要性。

是启发函数,在算法中表示由节点i转移到节点j的期望程度,通常可取

在算法运行时每只蚂蚁将根据(2-1)式进行搜索前进。

在蚂蚁运动过程中,为了避免在路上残留过多的信息素而使启发信息被淹没,在每只蚂蚁遍历完成后,要对残留信息进行更新处理。

由此,在t+n时刻,路径(i,j)上信息调整如下

(2-2)

(2-3)

在式中,常数

表示信息素挥发因子,表示路径上信息量的损耗程度,

的大小关系到算法的全局搜索能力和收敛速度,则可用

代表信息素残留因子,

表示一次寻找结束后路径(i,j)的信息素增量。

在初始时刻

表示第k只蚂蚁在本次遍历结束后路径(i,j)的信息素。

由于信息素更新策略有所不同,学者DorigoM研究发现了三种不同的基本蚁群算法模型,分别记为“蚁周系统”(Ant-Cycle)模型、“蚁量系统”(Ant-Quantity)模型及“蚁密系统”(Ant-Density)模型,三种模型求解

方式存在不同。

“蚁周系统”(Ant-Cycle)模型

第k只蚂蚁走过

(2-4)

“蚁量系统”(Ant-Quantity)模型

第k只蚂蚁在t和t+1之间走过

(2-5)

“蚁密系统”(Ant-Density)模型

(2-6)

3、实验过程记录(含基本步骤、程序代码及异常情况记录等)(60分)

1、数据准备

为防止既有变量的干扰,首先将环境变量清空。

然后从Excle文件中读取城市的位置坐标,并保存在变量为City的矩阵中(第一列为城市的横坐标,第二列为城市的纵坐标)。

2、计算城市距离矩阵

3、MATLAB程序源代码:

%%数据准备

%清空环境变量

clearall

clc

%程序运行计时开始

t0=clock;

%导入数据

citys=xlsread('

citys_data.xlsx'

'

B2:

C31'

);

%--------------------------------------------------------------------------

%%计算城市间相互距离

n=size(citys,1);

D=zeros(n,n);

fori=1:

n

forj=1:

ifi~=j

D(i,j)=sqrt(sum((citys(i,:

)-citys(j,:

)).^2));

else

D(i,j)=1e-4;

%设定的对角矩阵修正值

end

end

end

%%初始化参数

m=75;

%蚂蚁数量

alpha=1;

%信息素重要程度因子

beta=5;

%启发函数重要程度因子

vol=0.2;

%信息素挥发(volatilization)因子

Q=10;

%常系数

Heu_F=1./D;

%启发函数(heuristicfunction)

Tau=ones(n,n);

%信息素矩阵

Table=zeros(m,n);

%路径记录表

iter=1;

%迭代次数初值

iter_max=100;

%最大迭代次数

Route_best=zeros(iter_max,n);

%各代最佳路径

Length_best=zeros(iter_max,1);

%各代最佳路径的长度

Length_ave=zeros(iter_max,1);

%各代路径的平均长度

Limit_iter=0;

%程序收敛时迭代次数

%-------------------------------------------------------------------------

%%迭代寻找最佳路径

whileiter<

=iter_max

%随机产生各个蚂蚁的起点城市

start=zeros(m,1);

fori=1:

m

temp=randperm(n);

start(i)=temp

(1);

Table(:

1)=start;

%构建解空间

citys_index=1:

n;

%逐个蚂蚁路径选择

%逐个城市路径选择

forj=2:

tabu=Table(i,1:

(j-1));

%已访问的城市集合(禁忌表)

allow_index=~ismember(citys_index,tabu);

%参加说明1(程序底部)

allow=citys_index(allow_index);

%待访问的城市集合

P=allow;

%计算城市间转移概率

fork=1:

length(allow)

P(k)=Tau(tabu(end),allow(k))^alpha*Heu_F(tabu(end),allow(k))^beta;

P=P/sum(P);

%轮盘赌法选择下一个访问城市

Pc=cumsum(P);

%参加说明2(程序底部)

target_index=find(Pc>

=rand);

target=allow(target_index

(1));

Table(i,j)=target;

%计算各个蚂蚁的路径距离

Length=zeros(m,1);

Route=Table(i,:

(n-1)

Length(i)=Length(i)+D(Route(j),Route(j+1));

Length(i)=Length(i)+D(Route(n),Route

(1));

%计算最短路径距离及平均距离

ifiter==1

[min_Length,min_index]=min(Length);

Length_best(iter)=min_Length;

Length_ave(iter)=mean(Length);

Route_best(iter,:

)=Table(min_index,:

Limit_iter=1;

Length_best(iter)=min(Length_best(iter-1),min_Length);

ifLength_best(iter)==min_Length

Limit_iter=iter;

)=Route_best((iter-1),:

%更新信息素

Delta_Tau=zeros(n,n);

%逐个蚂蚁计算

%逐个城市计算

Delta_Tau(Table(i,j),Table(i,j+1))=Delta_Tau(Table(i,j),Table(i,j+1))+Q/Length(i);

Delta_Tau(Table(i,n),Table(i,1))=Delta_Tau(Table(i,n),Table(i,1))+Q/Length(i);

Tau=(1-vol)*Tau+Delta_Tau;

%迭代次数加1,清空路径记录表

iter=iter+1;

Table=zeros(m,n);

%%结果显示

[Shortest_Length,index]=min(Length_best);

Shortest_Route=Route_best(index,:

Time_Cost=etime(clock,t0);

disp(['

最短距离:

'

num2str(Shortest_Length)]);

最短路径:

num2str([Shortest_RouteShortest_Route

(1)])]);

收敛迭代次数:

num2str(Limit_iter)]);

程序执行时间:

num2str(Time_Cost)'

秒'

]);

%%绘图

figure

(1)

plot([citys(Shortest_Route,1);

citys(Shortest_Route

(1),1)],...%三点省略符为Matlab续行符

[citys(Shortest_Route,2);

citys(Shortest_Route

(1),2)],'

o-'

gridon

size(citys,1)

text(citys(i,1),citys(i,2),['

'

num2str(i)]);

text(citys(Shortest_Route

(1),1),citys(Shortest_Route

(1),2),'

起点'

text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),'

终点'

xlabel('

城市位置横坐标'

ylabel('

城市位置纵坐标'

title(['

ACA最优化路径(最短距离:

num2str(Shortest_Length)'

)'

])

figure

(2)

plot(1:

iter_max,Length_best,'

b'

legend('

最短距离'

迭代次数'

距离'

title('

算法收敛轨迹'

4、实验结果与总结(10分)

运行程序,可以很快的得出程序的执行结果,其中一次的执行结果如下:

图TSP问题的最优路径示意图

图TSP问题ASA的收敛轨迹图

本文设计了一种基于MATLAB实现的蚁群算法,用以求解组合优化难题中的典型代表旅行商问题。

对30个城市旅行商问题进行了测试,所得结果能达到优化作用,实现了本文的研究目标。

经过对旅行商问题的深入理解,得到了能解决问题的基本数学模型,然后设计算法的基本思想,技术路线,最后编码。

在多次调试,修改后,本算法成功运行,并实现了最初的设定目标。

另外,MATLAB具有丰富的绘图函数,对于绘图十分方便,这是选择MATLAB解决TSP问题的算法编写、调试的原因。

蚁群算法研究处于初期,还有许多问题值得研究,如算法的参数选择、蚂蚁数的比例等只能通过仿真实验,无法给出理论指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1