You are on page 1of 6

LAPORAN BUSSINESS INTELLIGENCI

“Ant Colony”

Dosen Pengampu : Ricky Eka Putra S.Kom., M.Kom

Disusun oleh :

15051204016 Anita Rahayu Tahun Angkatan 2015

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS NEGERI SURABAYA
2017/2018
A. Tujuan
 Menyelesaikan project guna melaksanakan Ujian Tengah Semester
 Mengetahui penerapan Ant Colony dalam sebah pencarian jalur terpendek.
B. Pembahasan

Algoritma ACO (Ant Colony Optimization) adalah salah satu algoritma


yang digunakan untuk pencarian jalur. Ant Colony Optimization adalah teknik
probabilitas untuk menyelesaikan permasalahan, berdasarkan tingkah laku semut
dalam sebuah koloni yang mencari sumber makanan. Teknik ini dapat digunakan
untuk menemukan solusi dari permasalahan kompleks untuk mendapatkan jalur
optimal dalam grafik.

Secara informal, ACO bekerja sebagai berikut: pertama kali, sejumlah m


ants ditempatkan pada sejumlah n kota berdasarkan beberapa aturan inisialisasi
(misalnya, secara acak). Setiap semut membuat sebuah tur (yaitu, sebuah solusi
TSP yang mungkin) dengan menerapkan sebuah aturan transisi status secara
berulang kali. Selagi membangun turnya, seekor semut juga memodifikasi jumlah
pheromone pada ruas-ruas yang dikunjunginya dengan menerapkan aturan
pembaruan pheromone lokal yang telah disebutkan tadi. Setelah semua ants
mengakhiri tur mereka, jumlah pheromone yang ada pada ruas-ruas dimodifikasi
kembali (dengan menerapkan aturan pembaruan pheromone global). Seperti yang
terjadi pada ant system, dalam membuat tur, ants 'dipandu' oleh informasi
heuristik (mereka lebih memilih ruas-ruas yang pendek) dan oleh informasi
pheromone: Sebuah ruas dengan jumlah pheromone yang tinggi merupakan
pilihan yang sangat diinginkan. Kedua aturan pembaharuan pheromone itu
dirancang agar ants cenderung untuk memberi lebih banyak pheromone pada ruas-
ruas yang harus mereka lewati.

Aturan transisi status yang berlaku pada ACO adalah sebagai berikut: seekor
semut yang ditempatkan pada kota r memilih untuk menuju ke kota s dengan
menerapkan aturan yang ditunjukkan oleh persamaan (1) dan persamaan (2) arg
max [τ(r,u)]. [η (r,u) ] β jika q ≤ q0 s = (exploitation) (1)

Peranan dari aturan pembaruan pheromone lokal ini adalah untuk mengacak
arah tur-tur yang sedang dibangun, sehingga kota-kota yang telah dilewati
sebelumnya oleh tur seekor semut mungkin akan dilewati kemudian oleh tur ants
yang lain. Dengan kata lain, pengaruh dari pembaruan t-.,kal ini adalah untuk
membuat tingkat ketertarikan ruas-ruas yang ada berubah secara dinamis: setiap
kali seekor semut menggunakan sebuah ruas maka ruas ini dengan segera akan
berkurang tingkat ketertarikannya (karena ruas tersebut kehilangan sejumlah
pheromone-nya), secara tidak langsung ants yang lain akan memilih ruas-ruas lain
yang belum dikunjungi. Konsekuensinya, ants tidak akan memiliki
kecenderungan untuk berkumpul pada jalur yang sama.

1
Penyelesaian Masalah dengan Ant Colony Optimation

Tentukan alpha dan beta, Alpha dan Beta adalah koefisien yang digunakan untuk
perhitungan taueta. Tentukan rho dan Q, rho dan Q adalah koefisien yang
digunakan untuk perhitungan feromon

public static final double Q = 0.0005;


public static final double RHO = 0.2;
public static final double ALPHA = 0.01;
public static final double BETA = 9.5;

Tentukan lokasi yang dituju

bufferedReader = new BufferedReader(new FileReader ("cities.txt"));


//membaca file.txt
String line = bufferedReader.readLine(); //membaca satu
baris data
while (line != null){
String[] split = line.split(" "); //untuk memisahkan 3
parameter
initialRoute.add(new City(split[0],
Double.valueOf(split[1]), Double.valueOf(split[2]))); //mengisi rute
line = bufferedReader.readLine();

Tentukan jumlah semut yang melakukan perjalanan

static final int NUMBER_OF_ANTS = 500;

Tentukan Array Jarak untuk setiap titik yang tersedia


double deltaLongtitude = (city.getLongtitude() - this.getLongtitude());
double deltaLatitude = (city.getLatitude() -
this.getLatitude());
double a = Math.pow(Math.sin(deltaLatitude / 2D), 2D) +
Math.cos(this.getLatitude()) *
Math.cos(city.getLatitude()) * Math.pow(Math.sin(deltaLongtitude/2D),
2D);
return CONVERT_KM_TO_MILES * EARTH_EQUATORIAL_RADIUS * 2D *
Math.atan2(Math.sqrt(a), Math.sqrt(1D - a));

Tentukan Array Semut yang digunakan untuk melakukan pencarian jalur.

while(y != invalidCityIndex){
routeCities.add(numbOfVisitedCities++,
Driver.initialRoute.get(x));
routeDistance += aco.getDistancesMatrix()[x][y];
adjustPhermoneLevel(x, y, routeDistance);
visitedCities.put(Driver.initialRoute.get(y).getName(),
true); x = y;
if(numbOfVisitedCities != numbOfCities) y = getY(x,
visitedCities); else y = invalidCityIndex; }
routeDistance += aco.getDistancesMatrix()[x][originatingCityIndex];
routeCities.add(numbOfVisitedCities, Driver.initialRoute.get(x));
route = new Route(routeCities, routeDistance);

2
Cari Jejak Terbaik dan Jarak Terpendek dari setiap jejak awal pada semua semut
if (shortestRoute == null || currentRoute.getDistance() <
shortestRoute.getDistance()) {
shortestRoute = currentRoute;
StringBuffer distance = new StringBuffer("
"+String.format("%.2f", currentRoute.getDistance()));
IntStream.range(0, 21 -
distance.length()).forEach(k -> distance.append(" "));

System.out.println(Arrays.toString(shortestRoute.getCities().toArray())
+ " |" + distance + "| "+ ant.getAntNumb());
}

Tentukan Array feromon. Feromon digunakan untuk perhitungan pencarian titik


berikutnya
phermoneLevelsMatrix = new AtomicDouble[citiesSize][citiesSize];
Random random = new Random();
IntStream.range(0, citiesSize).forEach(x -> {
IntStream.range(0, citiesSize).forEach(y ->
phermoneLevelsMatrix[x][y] = new AtomicDouble(random.nextDouble()));

Lakukan proses pencarian jalur sebanyak n iterasi, yaitu sampai semut ke


terakhir.

Untuk semut dengan index k, yang berada pada titik titikX, hitung probabilitas
untuk berpindah ke semua titik tujuan
double numerator = 0.0;
double phermoneLevel =
aco.getPhermoneLevelsMatrix()[y][x].doubleValue();
if (phermoneLevel != 0.0) numerator=
Math.pow(phermoneLevel,ALPHA) *
Math.pow(1/aco.getDistancesMatrix()[x][y], BETA);
return numerator;

IntStream.range(0, numbOfCities).forEach(i ->


transitionProbabilities.add(0.0));
double denominator = getTPDenominator(transitionProbabilities,
x, visitedCities);
IntStream.range(0, numbOfCities).forEach(y ->
transitionProbabilities.set(y,
transitionProbabilities.get(y)/denominator));

Untuk semut dengan index k, yang berada pada titik titikX, tentukan titik acak
berikutnya
distancesMatrix = new double[citiesSize][citiesSize];
IntStream.range(0, citiesSize).forEach(x -> {
City cityY = cities.get(x);
IntStream.range(0, citiesSize).forEach(y ->
distancesMatrix[x][y] = cityY.measureDistance(cities.get(y)));

3
Lakukan proses perubahan nilai feromon pada masing-masing jarak antar titik
double currentPhermoneLevel =
aco.getPhermoneLevelsMatrix()[x][y].doubleValue();
double updatePhermoneLevel = (1-RHO)*currentPhermoneLevel +
Q/distance;
if (updatePhermoneLevel < 0.00) flag =
aco.getPhermoneLevelsMatrix()[x][y].compareAndSet(0);
else flag =
aco.getPhermoneLevelsMatrix()[x][y].compareAndSet(updatePhermoneLevel);

Cari Jejak Terbaik dan Jarak Terpendek dari jejak semut yang telah mengalami
perubahan. Apabila jarak terpendek ternyata lebih baik (rendah) daripada jarak
terpendek terbaik, maka ambil nilai jejak nya sebagai jejak terbaik

while (activeAnts > 0) {


try {
Ant ant = executorCompletionService.take().get();
Route currentRoute = ant.getRoute();
if (shortestRoute == null ||
currentRoute.getDistance() < shortestRoute.getDistance()) {
shortestRoute = currentRoute;
StringBuffer distance = new StringBuffer("
"+String.format("%.2f", currentRoute.getDistance()));
IntStream.range(0, 21 -
distance.length()).forEach(k -> distance.append(" "));

System.out.println(Arrays.toString(shortestRoute.getCities().toArray())
+ " |" + distance + "| "+ ant.getAntNumb());

Driver driver = new Driver();


driver.printHeading();
AntColonyOptimization aco = new AntColonyOptimization();
IntStream.range(1, NUMBER_OF_ANTS).forEach(x -> {
executorCompletionService.submit(new Ant(aco, x));
driver.activeAnts++;
if (Math.random() > PROCESSING_CYCLE_PROBABILITY) driver.processAnts();
driver.processAnts();
System.out.println("\nRute Optimal :
"+Arrays.toString(driver.shortestRoute.getCities().toArray()));
System.out.println("Jarak : " + driver.shortestRoute.getDistance());

Hasil Ant Colony Optimasi

4
C. Kesimpulan
Dari laporan Ant Colony Optimation dapat ditemukan rute terpendek dari
data yang diinputkan.
D. Daftar Pustaka
Amalia, Rini. 2015. “Pencarian Jalur Terpendek Menggunakan Ant Colony
System (Kasus: Pariwisata Kota Bogor)”.
http://journal.lppmunindra.ac.id/index.php/Faktor_Exacta/article/view/50
0 . Diakses 25 Maret 2018.