• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: Matlab
  • 标签: 算法  

资源简介

可以运行的一种蚁群算法代码,下载既用,方便学习。可以用此算法做一些优化;

资源截图

代码片段和文件信息

%% I. 清空环境变量
clear all
clc

%% II. 导入数据
load citys_data.mat

%% III. 计算城市间相互距离
n = size(citys1);
D = zeros(nn);
for i = 1:n
    for j = 1:n
        if i ~= j
            D(ij) = sqrt(sum((citys(i:) - citys(j:)).^2));
        else
            D(ij) = 1e-4;      
        end
    end    
end

%% IV. 初始化参数
m = 50;                              % 蚂蚁数量
alpha = 1;                           % 信息素重要程度因子
beta = 5;                            % 启发函数重要程度因子
rho = 0.1;                           % 信息素挥发因子
Q = 1;                               % 常系数
Eta = 1./D;                          % 启发函数
Tau = ones(nn);                     % 信息素矩阵
Table = zeros(mn);                  % 路径记录表
iter = 1;                            % 迭代次数初值
iter_max = 200;                      % 最大迭代次数 
Route_best = zeros(iter_maxn);      % 各代最佳路径       
Length_best = zeros(iter_max1);     % 各代最佳路径的长度  
Length_ave = zeros(iter_max1);      % 各代路径的平均长度  

%% V. 迭代寻找最佳路径
while iter <= iter_max
     % 随机产生各个蚂蚁的起点城市
      start = zeros(m1);
      for i = 1:m
          temp = randperm(n);
          start(i) = temp(1);
      end
      Table(:1) = start; 
      citys_index = 1:n;
      % 逐个蚂蚁路径选择
      for i = 1:m
          % 逐个城市路径选择
         for j = 2:n
             tabu = Table(i1:(j - 1));           % 已访问的城市集合(禁忌表)
             allow_index = ~ismember(citys_indextabu);
             allow = citys_index(allow_index);  % 待访问的城市集合
             P = allow;
             % 计算城市间转移概率
             for k = 1:length(allow)
                 P(k) = Tau(tabu(end)allow(k))^alpha * Eta(tabu(end)allow(k))^beta;
             end
             P = P/sum(P);
             % 轮盘赌法选择下一个访问城市
             Pc = cumsum(P);     
            target_index = find(Pc >= rand); 
            target = allow(target_index(1));
            Table(ij) = target;
         end
      end
      % 计算各个蚂蚁的路径距离
      Length = zeros(m1);
      for i = 1:m
          Route = Table(i:);
          for j = 1:(n - 1)
              Length

评论

共有 条评论