?? test.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 + -