Perbandingan Algoritma Brute-Force dan Algoritma A Untuk Mencari Rute Terpendek Antar Klinik Kecantikan di Kota Medan

LAMPIRAN

LISTING PROGRAM
Kode Program Algoritma Brute-Force:
public class Bruteforce
{
List semuaNode;
Node nodeTujuan, nodeAsal;
public float jarakMinimum;
public List hasil;
public TimeSpan runningTime;
public Bruteforce(List semuaNode)
{
this.semuaNode = semuaNode;
this.jarakMinimum = float.PositiveInfinity;
this.hasil = new List();
}
private void rekursif_bruteforce(List sampel, List populasi){
if(sampel.Count > 0){
float jarakTemp = nodeAsal.cariJarakKe(sampel[0].getId());
for(int i = 0; i < sampel.Count - 1; i++){

jarakTemp += sampel[i].cariJarakKe(sampel[i+1].getId());
}
if(jarakTemp == float.PositiveInfinity){
return;
}

Universitas Sumatera Utara

if(sampel[sampel.Count-1].getId() ==
nodeTujuan.getId() && jarakTemp < jarakMinimum){
jarakMinimum = jarakTemp;
hasil = new List(sampel);
hasil.Insert(0, nodeAsal);
}
}
List temp = new List(sampel);
foreach(Node node in populasi){
if(sampel.IndexOf(node) == -1){
sampel = new List(temp);


sampel.Add(node);
rekursif_bruteforce(sampel, populasi);
}
}
}
public bool cariRuteTerpendek(Node asal, Node tujuan){
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
this.nodeTujuan = tujuan;
this.nodeAsal = asal;
List populasi = new List(semuaNode);
populasi.Remove(asal);
rekursif_bruteforce(new List(), populasi);
stopwatch.Stop();
runningTime = stopwatch.Elapsed;

Universitas Sumatera Utara

if(jarakMinimum == float.PositiveInfinity) return false;
return true;
}

}
}

Kode Program Algoritma A*:
public class AStar
{
class Elemen {
public Node node;
public Elemen dari;
public float g, h;
public Elemen(Node node, Node nodeTujuan){
this.node = node;
this.g = 0;
this.h = hitungJarakHeuristik(node, nodeTujuan);
this.dari = null;
}
public float getF(){
return g + h;
}
float deg2rad(float deg){

return (float) (deg * (Math.PI / 180));
}
float hitungJarakHeuristik(Node node_a, Node node_b){
var R = 6371;
var dLat = deg2rad(node_b.getLat()-node_a.getLat());
var dLon = deg2rad(node_b.getLng()-node_a.getLng());
var a =
Math.Sin(dLat/2) * Math.Sin(dLat/2) +
Math.Cos(deg2rad(node_a.getLat())) * Math.Cos(deg2rad(node_b.getLat

Universitas Sumatera Utara

())) *
Math.Sin(dLon/2) * Math.Sin(dLon/2)
;
var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a));
var d = R * c;
return (float) d;
}
}

public List hasil;
public TimeSpan runningTime;
public float totalJarak;
public AStar()
{
hasil = new List();
runningTime = new TimeSpan();
totalJarak = float.PositiveInfinity;
}
private Elemen cariElemenDenganNilaiTerkecil(List open){
float nilaiFTerkecil = float.PositiveInfinity;
Elemen result = null;
foreach(Elemen elemen in open){
if(elemen.getF() < nilaiFTerkecil){
nilaiFTerkecil = elemen.getF();
result = elemen;
}
}
return result;
}

public bool cariRuteTerpendek(Node asal, Node tujuan){
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
List open = new List();
List closed = new List();
Elemen elemen_mulai = new Elemen(asal, tujuan);
open.Add(elemen_mulai);

Universitas Sumatera Utara

while(open.Count > 0){
Elemen curr = cariElemenDenganNilaiTerkecil(open);
if(curr.node.getId() == tujuan.getId()){
totalJarak = curr.g;
while(curr != null){
hasil.Add(curr.node);
curr = curr.dari;
}
stopwatch.Stop();
runningTime = stopwatch.Elapsed;
return true;

}
open.Remove(curr);
closed.Add(curr);
foreach(Hubungan hub in curr.node.getHubungan()){
Elemen tetangga = new Elemen(hub.getNode(), tujuan);
tetangga.g = curr.g + hub.getJarak();
tetangga.dari = curr;
bool adaDalamOpen = false, adaDalamClosed = false;
foreach(Elemen elemen in closed){
if(elemen.node.getId() == tetangga.node.getId()){
adaDalamClosed = true;
break;
}
}
if(adaDalamClosed) continue;
int posisiDiOpen = 0;
foreach(Elemen elemen in open){
if(elemen.node.getId() == tetangga.node.getId()){
adaDalamOpen = true;
break;


Universitas Sumatera Utara

posisiDiOpen++;
}
if(adaDalamOpen){
if(open[posisiDiOpen].g > tetangga.g){
Elemen update = open[posisiDiOpen];
update.g = tetangga.g;
update.h = tetangga.h;
update.dari = curr;
}
} else {
open.Add(tetangga);
}
}
}
return false;
}
}

}

Universitas Sumatera Utara

CURRICULUM VITAE

Data Diri
Nama

: Syindy Wulandari

Tempat/Tanggal Lahir

: Medan/ 24 Maret 1994

Alamat Sekarang

: Jl.Polonia Gg.Mushollah Medan

Alamat Orang Tua


: Jl. Polonia Gg.Mushollah Medan Polonia

Agama

: Islam

Jenis Kelamin

: Perempuan

Nomor Hp

: 082299982962

Email

: wulandari.syindy@yahoo.com

Riwayat Pendidikan

2000 – 2006

: SD Angkasa Lanud Medan

2006 – 2009

: SMP Angkasa Lanud Medan

2009 – 2012

: SMA Negeri 2 Medan

2012 – Sekarang

: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

Keahlian
Bahasa

: Indonesia, Inggris

Universitas Sumatera Utara

Bahasa Pemrograman : C#,
DBMS

: MySQL

Multimedia

: Adobe Flash

Design

: Photoshop

Perkantoran

: Microsoft Office, Microsoft Excel

Pengalaman Bekerja
2015

: Praktik Kerja Lapangan di PTPN III (Persero)

Seminar
2016

: Seminar Nasional “ OPEN SOURCE BASE TRANSCEIVER
STATION”

2014

: Seminar Open BTS “ICONS”

Universitas Sumatera Utara