资源简介
旅行者问题的优化实现,三种算法通过一个图形化界面,可以进行动态演示比较。随机生成节点然后规划路径,注释充分!
代码片段和文件信息
function[R_bestL_bestL_aveShortest_RouteShortest_Length]=ASTSP(CNC_maxmAlphaBetap0Q)
%C n个城市的坐标,n*2矩阵(xy)
%NC_max最大迭代次数
%m 蚂蚁个数
%Alpha 表征信息素重要程度的参数
%Beta 表征启发式因子重要程度的参数
%p0 信息素蒸发系数
%Q 信息素增加强度系数
%R_best 各代最佳路线
%L_best 各代最佳路线的长度
%初始化1
n=size(C1);%size(C1)返回C的行数,也就是城市个数,n表示城市个数
D=zeros(nn);%D表示图的邻接矩阵,各点的值为每个点到每个点的权值
% 把坐标转换为邻接矩阵
for i=1:n
for j=1:n
if i~=j
D(ij)=((C(i1)-C(j1))^2+(C(i2)-C(j2))^2)^0.5;%简单地求两点之间的距离
else
D(ij)=eps;%应该赋值为0,但因为后面启发因子需要取倒数,所以用eps表示,eps为当发现某个值小于eps时,就把这个数当做0来处理
end
D(ji)=D(ij);%对称矩阵
end
end
%初始化2
%D直接传入邻接矩阵
% n=size(D1);
QF=1./D;%Eta为启发因子矩阵,这里设为距离的倒数
XXS=ones(nn);%XXS为信息素矩阵
JJtable=zeros(mn);%存储并记录路径的生成,禁忌表,m为蚂蚁个数
NC=1;%迭代计数器,记录迭代次数
R_best=zeros(NC_maxn);%迭代之后的每一代最佳路线
L_best=inf.*ones(NC_max1);%各代最佳路线长度,初始化为无穷大
L_ave=zeros(NC_max1);%各代路线的平均长度
while NC<=NC_max %迭代次数到最大停止
%将m只蚂蚁放到n个城市上
Randpos=[];%随机位置
for i=1:(ceil(m/n))%ceil向正方向取整,求得最多安排几次
Randpos=[Randposrandperm(n)];%randperm把1到n这些数随机打乱得到的一个数字序列,然后不断添加到Randpos中去
end
JJtable(:1)=(Randpos(11:m))‘;%Tabu(:1)表示Tabu第一行就是初始m只蚂蚁被随机分到所n城市中的一个
%m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n%从所在城市的下一个城市开始
for i=1:m
visited=JJtable(i1:(j-1));%记录已访问的城市,可避免重复访问
ToVisitCity=zeros(1(n-j+1));%待访问的城市待访问城市的数量为(n-j+1)
P=ToVisitCity;%待访问的城市的选择概率分布
count=1;%访问的城市个数
for k=1:n
if length(find(visited==k))==0%开始设置为0find()语句找到visited中等于k的元素在数组visited中的位置,length如果为零就是visited中没有k元素,即没有访问过k城市。
ToVisitCity(count)=k;
count=count+1;
end
end
%下面进行城市的概率分布
for k=1:length(ToVisitCity)
%visited(end)表示蚂蚁现在所在城市编号,ToVisitCity(k)表示下一个要访问的城市编号
P(k)=(XXS(visited(end)ToVisitCity(k))^Alpha)*(QF(visited(end)ToVisitCity(k))^Beta);
end
P=P/(sum(P));%把各个路径概率统一到和为1
%按概率原则选取下一个城市
%蚂蚁要选择的下一个城市不是按最大概率,就是要用到轮盘法则,不然影响全局收缩能力,所以用到累积函数,Pcum=cumsum(P)
Pcum=cumsum(P);%cumsum,元素累加即求和,比如P=[0.1 0.5 0.4],cumsum(P)= [0.1000 0.6000 1.0000]
Select=find(Pcum>=rand);%若计算的概率大于原来的就选择这条路线
%要选择其中总概率大于等于某一个随机数,找到大于等于这个随机数的城市的在J中的位置
%轮盘法则,Select(1),1保证可以选到最大概率的城市,比如:p=[0.1 0.6 0.3]中间那个城市概率最大此时Pcum=[0.1 0.7 1] Select =[2 3]; Select(1)=2中间那个城市概率最大
to_visit=ToVisitCity(Select(1));%提取这些城市的编号到to_visit中
JJtable(ij)=to_visit;
end
end
if NC>=2
JJtable(1:)=R_best(NC-1:);
end
%记录本次迭代最佳路线
L=zeros(m1);%记录本次迭代最佳路线的长度,每个蚂蚁都有自己走过的长度记录在向量L中开始距离为0,m*1的列向量
for i=1:m
R=JJtable(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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9215 2018-05-23 10:24 GUI.m
文件 3531 2018-05-23 11:05 SATSP.m
文件 5965 2018-05-23 10:53 ASTSP.m
文件 6631 2018-05-23 16:08 GATSP.m
文件 26687 2018-05-18 15:06 GUI.fig
----------- --------- ---------- ----- ----
52029 5
- 上一篇:集成学习方法matlab实现
- 下一篇:MATLAB中的harq重传
相关资源
- GA-ELM.rar
- 遗传算法求解组合优化数据资源
- 基于遗传算法的BP神经网络优化算法—
- 模拟退火法Matlab代码[比赛已经用过保
- MATLAB遗传算法源代码
- VRP using GA methods用遗传算法解决VRP问题
- 有限差分正演模拟
- 元胞自动机交通流模拟matlab代码和相
- MTSP问题matlab遗传算法求解
- MATLAB环境下的船用柴油机故障诊断的
- 模拟退火算法的matlab工具箱satools
- 模拟退火算法
- 自适应遗传算法matlab程序
- 利用遗传算法求Rosenbrock函数的极大值
- 基于matlab的免疫遗传算法
- 模拟退火算法函数最优解和路径规划
- 运用MATLAB实现遗传算法求解规划问题
- 33节点的遗传算法无功优化MATLAB程序
- matlab模拟光纤光栅算法与代码
- matlab tsp问题代码
- MATLAB 轨迹模拟程序
- matlab模拟EKF滤波器
- 模拟电磁波传播
- NSGA-2 matlab
- 期权蒙特卡洛模拟MATLAB代码
- 标量衍射理论的计算机模拟
- 基于遗传算法和粒子群算法的认知无
- 基于matlab遗传算法的数据拟合代码
- 自适应遗传算法 求解函数最小值Mat
- 数字通信系统中信噪比与误码率关系
评论
共有 条评论