博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蚁群算法(ACA)及其Matlab实现
阅读量:5956 次
发布时间:2019-06-19

本文共 4407 字,大约阅读时间需要 14 分钟。

1基本原理

本质上也是一种概率算法,通过大概率收敛到最佳值,和其他的智能算法很相似。蚁群分泌的信息素存在正反馈,使得较佳的解

具有大概率被选到,当全局都选用较佳的解,变可以得到整体的最优解。

2几个关键点:

  1) 概率选择:

      受信息素浓度和启发函数影响,启发函数为距离的倒数

   2)信息素挥发

      考虑到信息素随时间的挥发,加入挥发因子                

3程序设计步骤:

    1初始化各个参数:包括各点的距离,信息素的初始浓度,蚂蚁数量,信息素挥发因子

                                    信息素和启发函数的重要度因子,启发函数,最大迭代次数,路径记录表等等

      2迭代:对每个蚂蚁随机制定初始值,再根据概率选择,选择出每只蚂蚁的路径,确定每只蚂蚁的路径总长度,

                   以及蚁群的最佳路径长度和平均长度,并对信息素进行更新。

      3展示:展示出最佳路径,以及最佳路径对迭代的变化图

   4Matlab代码

 

clc,clear                                                                                    %清空环境中的变量load data.txt                                                                           %读入城市的坐标t0 = clock;                                                                                %程序计时开始%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%city=data;n = size(city,1);                                                                      %城市距离初始化D = zeros(n,n);                                                    for i = 1:n    for j = 1:n           if i ~= j            D(i,j) = sqrt(sum((city(i,:) - city(j,:)).^2));        else            D(i,j) = 0;      %设定的对角矩阵修正值        end    end    endm=30;                                                                                        %蚂蚁数量alpha = 1;                                                                                 % 信息素重要程度因子beta = 5;                                                                                  % 启发函数重要程度因子v = 0.1;                                                                                     % 信息素挥发因子Q = 0.5;                                                                                     % 信息因子常系数H= 1./D;                                                                         % 启发函数T= ones(n,n);                                                                         % 信息素矩阵Table = zeros(m,n);                                                               % 路径记录表iter = 1;                                                                                    % 迭代次数初值iter_max = 50;                                                                     % 最大迭代次数 best_route = zeros(iter_max,n);                                       % 各代最佳路径       best_length = zeros(iter_max,1);                                     % 各代最佳路径的长度  %%while iter<=iter_max                           % 随机产生每只蚂蚁的起点城市                          start = zeros(m,1);                          for i = 1:m                              temp = randperm(n);                              start(i) = temp(1);                          end                          Table(:,1) = start;                           city_index=1:n;                          for i = 1:m                          % 逐个城市路径选择                         for j = 2:n                             tabu = Table(i,1:(j - 1));                                                   % 已访问的城市集合                             allow =city_index( ~ismember(city_index,tabu));    % 筛选出未访问的城市集合                             P = zeros(1,length(allow));                             % 计算相连城市的转移概率                             for k = 1:length(allow)                                 P(k) = T(tabu(end),allow(k))^alpha * H(tabu(end),allow(k))^beta;                             end                             P = P/sum(P);                             % 轮盘赌法选择下一个访问城市                            Pc = cumsum(P);     %参加说明2(程序底部)                            target_index = find(Pc >= rand);                             target = allow(target_index(1));                            Table(i,j) = target;                         end                      end                          % 计算各个蚂蚁的路径距离                                  Length = zeros(m,1);                                  for i = 1:m                                      Route = [Table(i,:) Table(i,1)];                                      for j = 1:n                                          Length(i) = Length(i) + D(Route(j),Route(j + 1));                                      end                                  end                %对最优路线和距离更新                               if iter == 1                      [min_length,min_index] = min(Length);                      best_length(iter) = min_length;                        best_route(iter,:) = Table(min_index,:);                  else                      [min_length,min_index] = min(Length);                           if min_length

 

 程序说明:采用蚁群算法求取TSP问题,共有34个城市,从txt文件加载数据:

运行结果:

 

转载于:https://www.cnblogs.com/jacksin/p/9163508.html

你可能感兴趣的文章
华为交换机的端口hybrid端口属性配置
查看>>
算法学习之归并排序(java实现)
查看>>
css3在线快速制作工具
查看>>
linux系统进入救援模式
查看>>
oracle常用网址
查看>>
我的友情链接
查看>>
10个SQL注入工具
查看>>
[李景山php]每天laravel-20160826|EncryptionServiceProvider
查看>>
[李景山php]每天laravel-20161005|Validator.php-5
查看>>
php读取大文件详解【OK】
查看>>
Gnome 快捷键汇总
查看>>
Android基础知识点的整理3
查看>>
一次安装tengine的经历
查看>>
Deploy sahara on openstack-icehouse
查看>>
安装saltstack遇到的问题锦集
查看>>
通过注册表修改我的文档等系统文件夹默认位置
查看>>
实验四 链路聚合
查看>>
An internal error occurred during: "Android Library Update".
查看>>
ajax详解
查看>>
codeforces 811C Vladik and Memorable Trip[补]
查看>>