大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang
以下用matlab实现蚁群算法:
 
%蚂蚁算法test  
%用产生的一个圆上的十个点来检验蚂蚁算法
 
clc
clear
 
%参数
alpha = 1 ;                               %信息素指数
beta = 5  ;                                %启发指数
rho = 0.5 ;                                %挥发系数 
n = 16 ;                                   %城市个数
k = 20 ;                                    %迭代次数
m = n - 1 ;                                %蚂蚁只数,这里取比城市数目少一的蚂蚁只数
Q = 100 ;
bestr = inf ;
%产生一个圆上的十个点
x = zeros(1,n) ;
y = x ;
for i = 1 : (n/2)                          
    x(i) = rand * 20 ;
    y(i) = sqrt(100 - (x(i) - 10) ^ 2) + 10;
end
for i = (n/2 + 1) : n
    x(i) = rand * 20 ;
    y(i) = - sqrt(100 - (x(i) - 10) ^ 2) + 10;
end
plot(x,y,'.') ;
%计算距离
d = zeros(n,n) ;
for i = 1 : n 
    for j = 1 : n
        d(i,j) = sqrt( ( x(i) - x(j) ) ^ 2 + ( y(i) - y(j) ) ^ 2) ;
    end
end
temp = min(d) ;
dmin = temp(1) ;
tau = ones(n,n) ;
%tau = tau ./ (n * dmin) ;                   %初始化tau信息素矩阵
 
%开始迭代
for i = 1 : k   
    %初始化
    visited = zeros(m,n) ;                  %用visited 来储存所有蚂蚁走过的城市 m×n 其中未到达的城市为0
    visited(:,1) = (randperm(n,m))';        %将m只蚂蚁随机放在n座城市 即产生一列1到n的随机数进行第一列数据的更新
    for b = 2 : n                           %所有蚂蚁都走到第b个城市时
        current = visited(:,(b-1)) ;         %所有蚂蚁现在所在城市 m×1
        allow = zeros(m,(n - b + 1)) ; 
        
        for a = 1 : m
            j = 1 ;
            for s = 1 : n
                if length(find(visited(a,:) == s)) == 0
                   allow(a,j) = s ;
                   j = j + 1 ;
                end
            end
        end
        
        l = n-b+1 ;
        for a = 1 : m                       %分析第a只蚂蚁
            p = zeros(1,l) ;
            for j = 1 : l                   %根据下式来选择下一个城市
                p(j) = ( ( tau( current(a,1) , allow(a,j) ) ) ^ alpha ) * ( ( 1 / d( current(a,1) , allow(a,j) ) ) ^ beta ) ;
            end
            p = p ./ sum(p) ;               %采用轮盘赌的方式
            p = cumsum(p) ;
            pick = rand ;
            for c = 1 : l
                if pick < p(c)
                    visited(a,b) = allow(a,c) ;          %找到符合要求的城市 并 记入蚂蚁a的路径中
                    break ;
                end
            end
        end
    end
    %计算每只蚂蚁所走的路径总长
    L = zeros(1,m) ;
    for a = 1 : m
        t = d(visited(a,n),visited(a,1)) ;
        for b = 1 : (n - 1)
            t = t + d(visited(a,b),visited(a,(b + 1)));
        end
        L(a) = t ;
    end
    [newbestr,newbestant] = min(L) ;          %寻本次迭代最短路径及其相应蚂蚁
    if newbestr < bestr                       %到目前为止最优值的保存
        bestr = newbestr ;
        bestroad = visited(newbestant,:) ;
    end
    %离线更新信息素矩阵
    %挥发
    for a = 1 : m
        tau(visited(a,n),visited(a,1)) = tau(visited(a,n),visited(a,1)) * (1 - rho) ;
        for b = 1 : (n - 1)
            tau(visited(a,b),visited(a,(b + 1))) = tau(visited(a,b),visited(a,(b + 1))) * (1 - rho) ;
        end
    end
    %加强
    tau(visited(newbestant,n),visited(newbestant,1)) = tau(visited(newbestant,n),visited(newbestant,1)) + Q / L(newbestant) ;
    for b = 1 : (n - 1)
        tau(visited(newbestant,b),visited(newbestant,(b + 1))) = tau(visited(newbestant,b),visited(newbestant,(b + 1))) + Q / L(newbestant) ;
    end
end
bestr 
bestx = zeros(1,n) ;
besty = zeros(1,n) ;
for i = 1 : n
    bestx(i) = x(bestroad(i)) ;
    besty(i) = y(bestroad(i)) ;
end
bestx = [bestx,bestx(1)] ;
besty = [besty,besty(1)] ;
plot(bestx,besty,'-') ;

蚁群算法matlab实现的更多相关文章

  1. 蚁群算法MATLAB解VRP问题

    Excel  exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...

  2. 蚁群算法MATLAB解TSP问题

    Excel表exp12_3_1.xls中数据为: clc clear all [xdata,textdata]=xlsread('exp12_3_1.xls'); %加载20个城市的数据,数据按照表格 ...

  3. 蚁群算法 matlab程序(已执行)

    下面是解放军信息project大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处. 我经过改动添加了凝视,已经执行过,无误, function [R_best,L_best,L_av ...

  4. 蚁群算法求解旅行商问题(附c和matlab源代码)

    前几天写了个模拟退火算法的程序,然后又陆陆续续看了很多群智能算法,发现很多旅行商问题都采用蚁群算法来求解,于是开始写蚁群算法的模板.网上关于蚁群算法的理论很多就不再这里赘述了,下面直接上代码和进行简单 ...

  5. 蚁群算法和简要matlab来源

    1 蚁群算法原理 从1991由意大利学者 M. Dorigo,V. Maniezzo 和 A. Colorni 通过模拟蚁群觅食行为提出了一种基于群体的模拟进化算法--蚁群优化.极大关注,蚁群算法的特 ...

  6. [matlab] 8.蚁群算法解决TSP问题

    城市坐标数据下载  密码:07d5 求遍历这52座城市后最后回到最初城市的最短距离 %% 第9章 蚁群算法及MATLAB实现——TSP问题 % 程序9-1 %% 数据准备 % 清空环境变量 clear ...

  7. ACS蚁群算法求解对称TSP旅行商问题的JavaScript实现

    本来以为在了解蚁群算法的基础上实现这道奇怪的算法题并不难,结果实际上大相径庭啊.做了近三天时间,才改成现在这能勉强拿的出手的模样.由于公式都是图片,暂且以截图代替那部分内容吧,mark一记. 1 蚁群 ...

  8. 蚁群算法简介(part3: 蚁群算法之更新信息素)

    信息素的局部更新策略   每只蚂蚁在构造出一条从起点到终点的路径后,蚁群算法还要求根据路径的总长度来更新这条路径所包含的每条边上信息素的浓度(在旅行商问题中每座城市是图中的一个节点,城市两两间有一条边 ...

  9. 蚁群算法简介(part 1:蚁群算法之绪论)

    群算法是Marco Dorigo在1992年提出的一种优化算法,该算法受到蚂蚁搜索食物时对路径的选择策略的启示.蚁群算法作为群体智能算法的一种利用分布式的种群搜索策略来寻找目标函数的最优解.蚁群算法与 ...

随机推荐

  1. COJ 0248 HDNOIP201408生成树

    HDNOIP201408生成树 难度级别: A: 编程语言:不限:运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 输入 第一行包括两个整数V, ...

  2. Codeforces Round #236 (Div. 2)E. Strictly Positive Matrix(402E)

    E. Strictly Positive Matrix   You have matrix a of size n × n. Let's number the rows of the matrix f ...

  3. i&1、负数二进制

    if(i&1==1) 表示 如果是 奇数 则...i&1 -- 按位与运算,取 2进制整数 i 的最低位,如果最低位是1 则得1,如果最低位是0 则得0. 奇数 i 的最低位 是1,偶 ...

  4. eCharts的随笔

    1.散点图中找最优记录 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...

  5. javascript中子类如何继承父类

    参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...

  6. ios 数组倒序和数组转字符串

    NSMutableArray *array = [NSMutableArray arrayWithObjects:",nil]; NSArray* reversedArray = [[arr ...

  7. 关于javax.crypto.BadPaddingException: Blocktype错误的几种解决方法

    此文章转载自:http://www.myexception.cn/mobile/1259076.html 关于javax.crypto.BadPaddingException: Blocktype异常 ...

  8. oracle 性能优化--索引总结

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据: Oracle存储索引的数据结构是B*树.位图索引也是如此,仅仅只是是叶子节点不同B*数索引: 索引由根节点.分支节点和叶子节点组成 ...

  9. Android应用程序的安装位置

    Android应用程序的默认安装位置以及是否可移动取决于开发者在其AndroidManifest.xml中的设置:   <manifestxmlns:android="http://s ...

  10. Java Web的数据库操作(一)

    一.JDBC技术 1.JDBC简介 JDBC是Java程序与数据库系统通信的标准API,它定义在JDK的API中,通过JDBC技术,Java程序可以非常方便地与各种数据库交互,JDBC在Java程序与 ...