4.7 Implementasi Algoritma Semut
Pada simulasi algoritma semut pada aplikasi ini, dilakukan optimasi terhadap teori dan perhitungan dasar algoritma semut. Optimasi yang dilakukan
berdasarkan perhitungan dan iterasi yang ada pada landasan teori adalah sebagai berikut :
1. Variabel yang tidak digunakan adalah
α
tetapan pengendali intensitas jejak semut
dan ß
tetapan pengendali visibilitas. Kedua variabel ini tidak digunakan karena berdasarkan riset yang telah dilakukan sebelumnya untuk studi kasus
penentuan jarak terdekat, nilai α dan ß bisa dihilangkan.
2.
Rumus-rumus yang digunakan adalah sebagai berikut :
ij
=1d
ij
T
ij
= T
ij
1- ρ
P
ij
= ∑ T
ij
+
ij
REF Ref = rand
∑
ij
∆ Tij = Tij – Q-ρ
Sedangkan penerapannya dalam aplikasi terdapat pada potongan source code berikut ini :
public void moveOneStepSpace space { gatherAroundInfospace;
if seeTargetAround { moveTotargetDirection;
switchStateAtTarget; } else {
moveTonextStepDirection; ifreleasePheromone{
releasePheromoneAtLocation; ifloseMyWay
switchStateAtLost; }
} }
Langkah-langkah yang dilakukan adalah sebagai berikut : 1.
Mengumpulkan informasi tentang keadaan sekitar.
private void gatherAroundInfoSpace space { for Direction d : Direction.values {
aroundInfo.put d,
SpacePointInfo space.getSpacePoint locationX + d.dX,
locationY + d.dY ;
} }
2. Melihat target di sekitarnya, ada makanan ataukah tidak.
a. Jika melihat makanan,
private ListDirection aroundTarget = new ArrayListDirection; private boolean seeTargetAround {
senseAroundTarget; return aroundTarget.size 0;
} private void senseAroundTarget {
aroundTarget.clear; for Direction d : Direction.values {
ifaroundInfo.getd.landform == state.targetLandform aroundTarget.addd;
} }
Jalan ke arah makanan.
private void moveToDirection d { headDirection = d;
locationX += d.dX; locationY += d.dY;
locationInfo = aroundInfo.getd; }
Tentukan target.
private void switchStateAtTarget { switch state {
case FindFood: case ReturnHomeLost:
state = State.ReturnHome; break;
case ReturnHome:
case FindFoodLost: state = State.FindFood;
break; }
b. Jika tidak melihat makanan, teruskan langkah selanjutnya.
private Direction nextStepDirection { senseAroundAttraction;
return randomChooseOneWithWeightingaroundAttraction; }
Sebar pheromone sambil terus melangkah.
private void releasePheromoneAtLocation { locationInfo.putPheromone
state.releasePheromone, pheromoneReleaseQuantity
; decreasePheromoneReleaseQuantity;
}
Jika sudah kehilangan arah, kembali ke rumah.
private void switchStateAtLost{ switch state {
case FindFood: state = State.FindFoodLost;
break; case ReturnHome:
state = State.ReturnHomeLost; break;
}
4.8 Implementasi Antarmuka