⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.m

📁 基于MATLAB蚁群算法LF解决聚类问题源程序代码
💻 M
字号:
%{
test
测试程序
整个程序流程
1、初始化:
2、迭代tmax次
3、所有的蚂蚁运动一次
4、产生一个0-1之间的随机数R
5、如果当前蚂蚁处于未负载状态,而且当前蚂蚁所在处的有点Oi
5.1、计算群体相似度f(Oi)和拾起概率Pp(Oi)
5.2、如果拾起概率Pp(Oi)》R
5.2.1、当前蚂蚁拾起点Oi(注意Oi在窗格中的位置是不断变动的)
  5.3  5.2结束
6、如果条件5不成立,如果当前蚂蚁处于负载状态,持有点Oi,而且当前位置没有其他点
6.1计算群体相似度f(Oi)和放下概率Pd(Oi)
6.2如果放下概率Pd(Oi)》R
   6.2.1放下节点Oi(注意点Oi在窗格中的位置是不断变动的)
   6.2.2修改蚂蚁状态为卸载
6.3 6.2结束
7、5结束
8、当前蚂蚁移到邻近区域内的没有被其他蚂蚁占据的节点

9、所有的蚂蚁运动一次结束
10、迭代tmax次结束
输入参数:
1、ant_number  蚂蚁数
2、item_number 点数
3、Z           区域范围
4、tmax        最大迭代次数
5、S           邻接区域
6、Alpha       相异度参数
7、item_space  点的空间矩阵
8、K1          拾起概率参数
9、K2          放下概率参数
%}
clear; 
clc;
K1=0.1;
K2=0.15;
Alpha=0.15;
%S=6;
S=30;
tmax=300;
ant_number=20;
Z=50;
axis([0 Z 0 Z]);
item_space=[    5.1 3.5 1.4 0.2;
     4.9 3.0 1.4 0.2;
     4.7 3.2 1.3 0.2;
     4.6 3.1 1.5 0.2;
     5.0 3.6 1.4 0.2;
     5.4 3.9 1.7 0.4;
     4.6 3.4 1.4 0.3;
     5.0 3.4 1.5 0.2;
    ];
[row,col]=size(item_space);
item_number=row;
%1、初始化:
[ant_matrix,item_window]=initialize(ant_number,item_number,Z);
item_window
%2、迭代tmax次
for i=1:tmax
    %3、所有的蚂蚁运动一次
    for j=1:ant_number
        %4、产生一个0-1之间的随机数R
        r=rand;
        %5、如果当前蚂蚁处于未负载状态,而且当前蚂蚁所在处的有点Oi
        %[x,y,z]=ant_matrix(j,:);
        one_ant=ant_matrix(j,:);
        x=one_ant(1);
        y=one_ant(2);
        z=one_ant(3);
        %rows1=find(item_window(:,1)==x);
        %rows2=find(item_window(:,2)==y);
        %Oi=find(item_window(find(item_window(:,1)==x),2)==y);
        Oi=has_item(x,y,item_window);
        if z==0 && Oi>0
            %5.1、计算群体相似度f(Oi)和拾起概率Pp(Oi)
            %fi=get_Fi(Oi,S,Alpha,item_window,Z,item_space);
            Pp=get_Pp(Oi,S,Alpha,item_window,K1,Z,item_space);
            Pp;
            
            %5.2、如果拾起概率Pp(Oi)》R
            if Pp>=r
                %5.2.1、当前蚂蚁拾起点Oi(注意Oi在窗格中的位置是不断变动的)
                ant_matrix(j,3)=Oi;
            end
            
        elseif ant_matrix(j,3)>0 && Oi==0
        %6、如果条件5不成立,如果当前蚂蚁处于负载状态,持有点Oi,而且当前位置没有其他点
        
            %6.1计算群体相似度f(Oi)和放下概率Pd(Oi)
            Oi=ant_matrix(j,3);%代表当前蚂蚁所携带的点的行号
            Pd=get_Pd(Oi,S,Alpha,item_window,K2,Z,item_space);
            Pd;
            
            %6.2如果放下概率Pd(Oi)》R
            if Pd>=r
                %6.2.1放下节点Oi(注意点Oi在窗格中的位置是不断变动的)
                item_window(Oi,1)=x;
                item_window(Oi,2)=y;
                ant_matrix(j,3)=0;
            end
        end
        
        %8、当前蚂蚁移到邻近区域内的没有被其他蚂蚁占据的节点
        ant_matrix=ant_move(j,S,ant_matrix,Z);

    end
end
item_window
axis([0 Z 0 Z]);
plot(item_window(:,1),item_window(:,2),'--rs');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -