Movement Ants

9
Movement of Ant Pengantar Sains Komputasi (Dosen: Dr. Rinovia Simanjuntak) Muhaza Liebenlito(20912020) December 11, 2012 1 Kasus Terapkan model dari pergerakan semut dalam grid berukuran 17 × 17 dimana pada grid tersebut diinisialisasi terdapat 20 semut yang lokasinya acak. Anggap terdapat makanan ditengah-tengah grid tersebut, dengan banyaknya feromon diin- isialisasi sebanyak 10, sedangkan pada cell yang lain adalah 0. Jalankan program sebanyak 5 kali untuk tiap-tiap t = 10,t = 20, ..., t = 100. 2 Hasil Simulasi Simulasi ini menggunakan tipe von Neumann Neighbourhood, dimana setiap cell hanya berin- teraksi dengan cell di utara(N), selatan(S), barat(W), dan timur(E) dari cell tersebut. Den- gan menggunakan tipe von Neumann Neighbourhood maka kita harus menentukan boundary condition dari permasalahan yang ada. Dalam simulasi, metode boundary condition yang di- pakai adalah Periodic Boundary, yang berarti ketika cell yang berada pada posisi diujung (B) atau dipojok (A) batas grid, maka arah pergerakan semut akan membandingkan dengan daerah hijau yang memiliki, seperti yang terlihat pada Figure 1. Aturan pergerakan semut didasarkan pada level feromon yang berada di sekitarnya. Misalkan jika level feromon yang berada di cell N atau S atau W atau E lebih besar dibanding dengan arah yang lainnya maka semut akan bergerak ke cell yang mempunyai tingkat feromon yang tinggi, dengan aturan: Cell tersebut tidak ditempati oleh semut yang lain. Cell tersebut mempunyai tingkat feromon yang lebih tinggi dibandingkan dengan tingkat feromon yang berada pada cell yang ditempati pada saat itu. Jika neighbour cell mempunyai tingkat feromon yang lebih rendah dibandingkan den- gan tingkat feromon yang berada ditempatnya pada saat itu, maka semut hanya akan mengubah arah geraknya ke sel tersebut tetapi tidak melakukan perpindahan. Tidak ada semut lain di sekitar cell yang dituju yang juga akan menuju cell tersebut. 1

description

model dari pergerakan semut dalam grid berukuran 17 17 dimana pada gridtersebut diinisialisasi terdapat 20 semut yang lokasinya acak

Transcript of Movement Ants

Page 1: Movement Ants

Movement of Ant

Pengantar Sains Komputasi(Dosen: Dr. Rinovia Simanjuntak)

Muhaza Liebenlito(20912020)

December 11, 2012

1 Kasus

Terapkan model dari pergerakan semut dalam grid berukuran 17 × 17 dimana pada gridtersebut diinisialisasi terdapat 20 semut yang lokasinya acak.Anggap terdapat makanan ditengah-tengah grid tersebut, dengan banyaknya feromon diin-isialisasi sebanyak 10, sedangkan pada cell yang lain adalah 0. Jalankan program sebanyak5 kali untuk tiap-tiap t = 10, t = 20, ..., t = 100.

2 Hasil Simulasi

Simulasi ini menggunakan tipe von Neumann Neighbourhood, dimana setiap cell hanya berin-teraksi dengan cell di utara(N), selatan(S), barat(W), dan timur(E) dari cell tersebut. Den-gan menggunakan tipe von Neumann Neighbourhood maka kita harus menentukan boundarycondition dari permasalahan yang ada. Dalam simulasi, metode boundary condition yang di-pakai adalah Periodic Boundary, yang berarti ketika cell yang berada pada posisi diujung(B) atau dipojok (A) batas grid, maka arah pergerakan semut akan membandingkan dengandaerah hijau yang memiliki, seperti yang terlihat pada Figure 1. Aturan pergerakan semutdidasarkan pada level feromon yang berada di sekitarnya. Misalkan jika level feromon yangberada di cell N atau S atau W atau E lebih besar dibanding dengan arah yang lainnya makasemut akan bergerak ke cell yang mempunyai tingkat feromon yang tinggi, dengan aturan:

• Cell tersebut tidak ditempati oleh semut yang lain.

• Cell tersebut mempunyai tingkat feromon yang lebih tinggi dibandingkan dengan tingkatferomon yang berada pada cell yang ditempati pada saat itu.

• Jika neighbour cell mempunyai tingkat feromon yang lebih rendah dibandingkan den-gan tingkat feromon yang berada ditempatnya pada saat itu, maka semut hanya akanmengubah arah geraknya ke sel tersebut tetapi tidak melakukan perpindahan.

• Tidak ada semut lain di sekitar cell yang dituju yang juga akan menuju cell tersebut.

1

Page 2: Movement Ants

Figure 1: Periodic Boundary.

• Jika ada semut lain yang mengarah ke cell yang dituju, maka semut tersebut akandiam atau tidak berpindah.

• Jika semut berpindah, maka ia akan meninggalkan feromon di sel yang ditempatinyasemula.

Dari hasil simulasi didapat bahwa jika nilai feromon pada lingkungan grid tersebut kecil,maka semut tidak berhasil menemukan cell dengan feromon yang tertinggi atau dalam halini sumber makanan. Berikut adalah gambar hasil simulasi seperti yg ditunjukan padaFigure 2 sampai Figure 9.

Figure 2: Simulasi Movement of Ant t=20.

Catatan: Simulasi ini masih terdapat error pada penerapan periodic boundary se-hingga jumlah semut pada step berikutnya akan terus berkurang bergantung dari banyaknyasimulasi yang diberikan.

2

Page 3: Movement Ants

Figure 3: Simulasi Movement of Ant t=30.

Figure 4: Simulasi Movement of Ant t=40.

Figure 5: Simulasi Movement of Ant t=50.

3

Page 4: Movement Ants

Figure 6: Simulasi Movement of Ant t=60.

Figure 7: Simulasi Movement of Ant t=70.

Figure 8: Simulasi Movement of Ant t=80.

4

Page 5: Movement Ants

Figure 9: Simulasi Movement of Ant t=90.

3 Souce Code Dalam C++

Listing 1: Simulasi Movement of Ant

1 #include <iostream>2 #include <fstream>3 #include <cstdlib>4 #include <cmath>5 #include <ctime>6

7 #define MAX 178

9 using namespace std;10

11 int maxAnt = 100;12 double alpha = 1;13 double beta = 0.1;14 int grid[MAX][MAX];15 int grid2[MAX][MAX];16 int gridChem[MAX][MAX];17

18 double random(){19 return (double)rand()/RAND_MAX;20 }21

22 void inisial(){23 for(int i=0;i<MAX;i++){24 for(int j=0;j<MAX;j++){25 gridChem[i][j] = 0;26 }27 }28 gridChem[MAX/2][MAX/2] = 10;29 for(int i=0;i<maxAnt;i++){30 if(grid[int(random()*MAX)][int(random()*MAX)]==0){

5

Page 6: Movement Ants

31 grid[int(random()*MAX)][int(random()*MAX)] = ceil(4*random())+1;

32 }33 }34 }35

36 void sense(){37 for(int i=0;i<MAX;i++){38 for(int j=0;j<MAX;j++){39 if(grid[i][j] != 0){40 int neighbourChem[4];41 neighbourChem[0] = gridChem[(i+1)%MAX][j];42 neighbourChem[1] = gridChem[(i+MAX-1)%MAX][j];43 neighbourChem[2] = gridChem[i][(j+MAX-1)%MAX];44 neighbourChem[3] = gridChem[i][(j+1)%MAX];45 //find max value of pheromon46 int maxValue = -1,count=0,countMax=0;47 int choose;48 for(int k=0;k<4;k++){49 if(neighbourChem[k] > maxValue){50 maxValue = neighbourChem[k];51 }52 if(neighbourChem[k] == maxValue){53 count++;54 countMax++;55 choose = int(random()*countMax)+1;56 if(count == choose){57 grid[i][j] = k+1;58 }59 }60 }61 }62 }63 }64 }65

66 void walk(){67 for(int i=0;i<MAX;i++){68 for(int j=0;j<MAX;j++){69 grid2[i][j] = 0;70 if(grid[i][j] == 1){71 int ant1 = grid[(i+2)%MAX][j];72 int ant2 = grid[(i+1)%MAX][(j+1)%MAX];73 int ant3 = grid[(i+1)%MAX][(j+MAX-1)%MAX];74 if(ant1!=2 && ant2!=3 && ant3!=4 && (grid[(i+1)%MAX][j]==0)

){75 if(gridChem[i][j] <= gridChem[(i+1)%MAX][j]){76 grid2[(i+1)%MAX][j] = grid[i][j];77 gridChem[i][j] = gridChem[i][j] + alpha;78 }79 }80 else{81 grid2[i][j] = grid[i][j];82 }

6

Page 7: Movement Ants

83 }84 if(grid[i][j] == 2){85 int ant1 = grid[(i+MAX-2)%MAX][j];86 int ant2 = grid[(i+MAX-1)%MAX][(j+1)%MAX];87 int ant3 = grid[(i+MAX-1)%MAX][(j+MAX-1)%MAX];88 if(ant1!=1 && ant2!=3 && ant3!=4 && (grid[(i+MAX-1)%MAX][j

]==0)){89 if(gridChem[i][j] <= gridChem[(i+MAX-1)%MAX][j]){90 grid2[(i+MAX-1)%MAX][j] = grid[i][j];91 gridChem[i][j] = gridChem[i][j] + alpha;92 }93 }94 else{95 grid2[i][j] = grid[i][j];96 }97 }98 if(grid[i][j] == 3){99 int ant1 = grid[i][(j+MAX-2)%MAX];

100 int ant2 = grid[(i+1)%MAX][(j+MAX-1)%MAX];101 int ant3 = grid[(i+MAX-1)%MAX][(j+MAX-1)%MAX];102 if(ant1!=4 && ant2!=2 && ant3!=1 && (grid[i][(j+MAX-1)%MAX

]==0)){103 if(gridChem[i][j] <= gridChem[i][(j+MAX-1)%MAX]){104 grid2[i][(j+MAX-1)%MAX] = grid[i][j];105 gridChem[i][j] = gridChem[i][j] + alpha;106 }107 }108 else{109 grid2[i][j] = grid[i][j];110 }111 }112 if(grid[i][j] == 4){113 int ant1 = grid[i][(j+2)%MAX];114 int ant2 = grid[(i+1)%MAX][(j+1)%MAX];115 int ant3 = grid[(i+MAX-1)%MAX][(j+1)%MAX];116 if(ant1!=3 && ant2!=2 && ant3!=1 && (grid[i][(j+1)%MAX]==0)

){117 if(gridChem[i][j] <= gridChem[i][(j+1)%MAX]){118 grid2[i][(j+1)%MAX] = grid[i][j];119 gridChem[i][j] = gridChem[i][j] + alpha;120 }121 }122 else{123 grid2[i][j] = grid[i][j];124 }125 }126 }127 }128 }129

130 void chemDecrease(){131 for(int i=0;i<MAX;i++){132 for(int j=0;j<MAX;j++){133 if(grid[i][j] == 0 && grid2 == 0){

7

Page 8: Movement Ants

134 if(gridChem[i][j] > 0){135 gridChem[i][j] -= beta;136 }137 }138 grid[i][j] = grid2[i][j];139 }140 }141 }142

143 void gnuplot(){144 ofstream plot;145 plot.open("ant.txt");146 plot<<"unset key\n";147 plot<<"set xtics out 0,5,20 \n";148 plot<<"set ytics out 0,5,20 \n";149 plot<<"set size ratio 1 \n";150 plot<<"set palette model RGB defined "151 <<"(0 ’white’, 0.99 ’white’"152 <<",1 ’red’, 1.99 ’red’"153 <<",2 ’green’, 2.99 ’green’"154 <<",3 ’blue’, 3.99 ’blue’"155 <<",4 ’yellow’, 4.99 ’yellow’) \n";156 plot<<"set cbrange [0:4.99] \n";157 plot<<"set cbtics (’0’ 0, ’N’ 1, ’S’ 2, ’W’ 3, ’E’ 4) offset 0,0.5\n";158 plot<<"set x2tics 0.5,1.20.5 format ’’\n";159 plot<<"set y2tics 0.5,1.20.5 format ’’\n";160 plot<<"set grid noxtics noytics x2tics y2tics front linetype -1\n";161 // plot<<"set term gif animate \n";162 // plot<<"set output ’ant.gif’\n";163 // plot<<"load ’gif.load’\n";164 plot<<"set term png\n";165 plot<<"set output ’../gambar/antmovement90.png’\n";166 plot<<"plot ’-’ matrix with image \n";167 for(int i=0;i<MAX;i++){168 for(int j=0;j<MAX;j++){169 plot<<grid[i][j]<<" ";170 }171 plot<<endl;172 }173 plot<<"e\n";174 plot<<"e\n";175 plot.close();176 system("D:\\Documents\\gnuplot\\binary\\gnuplot < ant.txt");177 }178

179 int main(){180 int t = 9;181 srand(time(NULL));182 int simulasi = 0;183 inisial();184

185 ofstream gif;186 gif.open("gif.load");187 while(simulasi < t){

8

Page 9: Movement Ants

188 sense();189 walk();190 chemDecrease();191 // gif<<"plot ’-’ matrix with image \n";192 // for(int i=0;i<MAX;i++){193 // for(int j=0;j<MAX;j++){194 // gif<<grid[i][j]<<" ";195 // }196 // gif<<endl;197 // }198 // gif<<"e\n";199 // gif<<"e\n";200

201 simulasi++;202 }203 gnuplot();204

205 return 0;206 }

9