Bab VI Penutup
6.2 Saran
Walaupun sistem aplikasi ini sudah berjalan dengan sebagaimana mestinya, namun masih terdapat banyak kekurangan, beberapa saran yang bisa dilakukan dan digunakan untuk pengembangan lebih lanjut, yaitu :
1. Dilakukan implementasi di kantor pos tersebut untuk menguji unjuk kerja sistem.
2. Penambahan beberapa fasilitas atau menu pendukung yang lebih menarik dan lengkap, misal cetak pdf dan aplikasi versi mobile.
128
DAFTAR PUSTAKA
Dorigo, Marco., Gambardella, Luca Maria. (1997). “Ant Colonies for the travelling
salesman problem”.
Dorigo, Marco., Gambardella, Luca Maria. (1997). “Ant Colony System: A
Cooperative Learnng Approach to the Travelling Salesman Problem”.
Stutzle, Thomas.,et.al. (2010). “Parameter Adaptation in Ant Colony
Optimization”.IRIDA, Belgia.
Catur, Nikolas (2010). “Optimasi Distribusi Majalah Dengan Menggunakan Metode Djikstra”.
Mindaputra, Eka (2009). “Penggunaan Algoritma Ant Colony System dalam Travelling Salesman Problem (TSP) pada P.T. Eka Jaya Motor”.
http://dishub-diy.net/dinas/survey-lalu-lintas.html. Diakses pada tanggal, 19 Desember 2012.
129
Lampiran 1
ATRIBUT DAN METHOD ALGORITMA ACS
1.1 pathSearchDestination Atribut
double maping[][];
vertex nameMap[];
List listVertexPerMap;
List bobotWaktu1 = new ArrayList();
List bobotWaktu2; List bobotWaktu3; List bobotWaktu4; List bobotWaktu5; List rentangWaktu; List urutanWaktu;
List finalPath = new ArrayList();
List gabungPath = new ArrayList();
List tauTemp = new ArrayList();
double finalTau[][]; double tMatAwal [][]; double tMatAwal2 [][]; double tMatrikAkhir [][]; double finalBobot; double gabungBobot;
List bandingBobot = new ArrayList();
List bandingPath = new ArrayList();
String nodeAwal;
List gabungFT = new ArrayList();
List gabungFP = new ArrayList();
Method cariJalur() Input: AbstractTabelModel abm int waktuBerangkat double t0 double q0 double p double b double a double q double smt Output: void Algoritma: 1. setNodeAwal("riut18"); 2. addDesination("riut18");
3. List krdinatDest = new ArrayList(); 4. int total = abm.getRowCount(); 5. int indek = 0;
6. for int i = 0; i < total
String statusPesanan = String.valueOf(abm.getValueAt(i, 3));
if statusPesanan.equals("kirim")
int[] as = new int[2];
pengirimPenerimaData ad = new pengirimPenerimaData(); ad.pengirimPenerimaLengkap(agnI); addDesination(ad.getNode()); as[0] = ad.getKoordinatX(); as[1] = ad.getKoordinatY(); krdinatDest.add(as); indek++; end for 7. if indek > 0
List tmp = cariRuteTerpendek(waktuBerangkat, to, qo, p, b, a, q, smt);
List pathAlt = (List)tmp.get(0);
List bobotAlt = (List) tmp.get(1);
for int i = 0; i < pathAlt.size();
List Alternatif = new ArrayList();
List pathPerBag = (List)pathAlt.get(i);
double bobotPerBag = (Double) bobotAlt.get(i);
Alternatif.add(pathPerBag);
Alternatif.add(bobotPerBag);
jalanYangDilewati(Alternatif, krdinatDest);
end for
List Terbaik = new ArrayList();
List pathTerbaik = (List)tmp.get(2);
double bobotTerbaik = (Double) tmp.get(3);
Terbaik.add(bobotTerbaik); jalanYangDilewati(Terbaik, krdinatDest); end if cariRuteTerpendek() Input: int waktuBerangkat double t0 double q0 double p double b double a double q double smt Output: List Algoritma:
1. List waktu = preJalurTerpendek(waktuMulai); 2. int zone = (Integer) waktu.get(0);
3. List wktuZona = (List) urutanWaktu.get(zone); 4. List baru = new ArrayList();
5. List hrf = mencariUrutanCluster("vertexlist3", to, q, qo, b, p); 6. for int i = 0; i < hrf.size();
int angTmp = (Integer) ubahKeAngka((String) hrf.get(i)); baru.add(angTmp);
end for
7. for int semut = 0; semut < nSemut; gabungPath = new ArrayList();
vertex[] vr = (vertex[]) listVertexPerMap.get((Integer) baru.get(0)); double[][] amNew = (double[][]) wktuZona.get((Integer) baru.get(0)); List vNew = ubahMatrik(getNodeAwal(), amNew, vr);
vertex[] vrTmp = (vertex[]) vNew.get(0);
double[][] amNewTmp = (double[][]) vNew.get(1); double[][] amBobot = (double[][]) vNew.get(2); if (semut == 0)
List tMatrik = ubahMatrikPheromone(to, amNewTmp); tMatAwal = (double[][]) tMatrik.get(0);
end if
if (semut > 0)
tMatAwal = finalTau; end if
graph gpCluster = new graph(vrTmp, amNewTmp, vrTmp.length, vrTmp.length, tMatAwal, q, qo, b, p, (Integer) baru.get(1), amBobot); List hsl = gpCluster.ssnJalan();
finalPath = new ArrayList(); finalPath = (List) hsl.get(0); finalBobot = (Double) hsl.get(1); finalTau = (double[][]) hsl.get(2); gabungFT.add(finalTau);
gabungFP.add(finalPath); gabungVerUrut.add(vrTmp); for int i = 0; i < finalPath.size()-1; gabungPath.add(finalPath.get(i)); end for
gabungBobot = finalBobot; int v=0;
for (int i = 1; i < baru.size() - 1; i++)
vertex[] vrIn = (vertex[]) listVertexPerMap.get((Integer) baru.get(i));
double[][] amIn = (double[][]) wktuZona.get((Integer) baru.get(i)); if (semut == 0)
List tMatrik2 = ubahMatrikPheromone(to, amIn); tMatAwal2 = (double[][]) tMatrik2.get(0);
end if
if (semut >0)
tMatAwal2 = (double[][]) tauTemp.get(v); v++;
end if int h = i;
graphTengah gpClusterIn = new graphTengah(vrIn, amIn, vrIn.length, vrIn.length, finalPath, finalBobot, tMatAwal2, q, qo, b, p, (Integer) baru.get(h + 1));
List tmpIncluster = gpClusterIn.cariPath(); finalPath = new ArrayList();
finalPath = (List) tmpIncluster.get(0); finalBobot = (Double) tmpIncluster.get(1); finalTau = (double[][]) tmpIncluster.get(2);
vertex[] testvertexbaru = (vertex[]) tmpIncluster.get(3); tauTemp.add(finalTau);
gabungFT.add(finalTau); gabungFP.add(finalPath);
gabungVerUrut.add(testvertexbaru); for (int d = 0; d < finalPath.size()-1; d++)
gabungPath.add(finalPath.get(d)); end for
gabungBobot = gabungBobot + finalBobot; end for
vertex[] vrAkhir = (vertex[]) listVertexPerMap.get((Integer) baru.get(baru.size()-1));
double[][] amAkhir = (double[][]) wktuZona.get((Integer) baru.get(baru.size()-1));
if (semut == 0)
List tMatAkhir = ubahMatrikPheromone(to, amAkhir); tMatrikAkhir = (double[][]) tMatAkhir.get(0);
end if
if (semut > 0)
tMatrikAkhir = finalTau; end if
graphTengah gpAkhir = new graphTengah(vrAkhir, amAkhir,
vrAkhir.length, vrAkhir.length, finalPath, finalBobot, tMatrikAkhir, q, qo, b, p);
List tmpAkhcluster = gpAkhir.pathAkhir(); finalPath = new ArrayList();
finalPath = (List) tmpAkhcluster.get(0); finalBobot = (Double) tmpAkhcluster.get(1); finalTau = (double[][]) tmpAkhcluster.get(2);
vertex[]testvertexakhir = (vertex[]) tmpAkhcluster.get(3); gabungFT.add(finalTau);
gabungFP.add(finalPath);
gabungVerUrut.add(testvertexakhir); for (int d = 0; d < finalPath.size(); d++) { gabungPath.add(finalPath.get(d));
}
gabungBobot = gabungBobot + finalBobot; bandingBobot.add(gabungBobot);
bandingPath.add(gabungPath);
for (int j = 0; j < listVertexPerMap.size(); j++) { vertex[] vere = (vertex[])listVertexPerMap.get(j); for (int k = 0; k < vere.length; k++) {
if (vere[k].isIsInDestinationNext() == true) vere[k].setIsInDestination(true); end if end for end for end for
8. double bbtTerbaik = (Double)bandingBobot.get(0); 9. List pathTerbaik = (List) bandingPath.get(0); 10.int nilaiI = 0;
11.for (int i = 1; i < bandingBobot.size(); i++) if (bbtTerbaik > (Double)bandingBobot.get(i)) bbtTerbaik=(Double)bandingBobot.get(i); pathTerbaik=(List) bandingPath.get(i); nilaiI = i; end if end for
12.List global = updatePheromoneGlobal (gabungFT, a, bbtTerbaik, gabungFP, gabungVerUrut, hrf.size(), nSemut, nilaiI);
13.List hasilAkhir = new ArrayList(); 14. hasilAkhir.add(bandingPath); 15.hasilAkhir.add(bandingBobot); 16.hasilAkhir.add(pathTerbaik);
17. hasilAkhir.add(bbtTerbaik); 18.return hasilAkhir; mencariUrutanCluster() Input: String StartVertex; double to; double q; double qo; double b; double p; Output: List Algoritma: 1. int jmlNameMaping = 0;
2. for (int i = 0; i < nameMap.length; i++) if (nameMap[i].isIsInDestination()) jmlNameMaping++;
end if end for
3. List mapingBaru = ubahMatrik(StartVertex, maping, nameMap); 4. vertex[] VlistBaru = (vertex[]) mapingBaru.get(0);
5. double[][] adListBaru = (double[][]) mapingBaru.get(1); 6. List tMatrik = ubahMatrikPheromone(to, adListBaru); 7. double[][] tMatrik2 = (double[][]) tMatrik.get(0);
8. graph gpCluster = new graph(VlistBaru, adListBaru, VlistBaru.length, VlistBaru.length, tMatrik2, q, qo, b, p, nameMap);
10.return nn; jalanYangDilewati() Input: List jalur; List tujuan; Output: void Algoritma:
1. controlPengirimPenerima ca = new controlPengirimPenerima(); 2. jalanData jd = new jalanData();
3. List pathJalurAkhir = (List) jalur.get(0); 4. double bobotAkhir = (Double) jalur.get(1); 5. String jalurTmpFile = "";
6. for (int j = 0; j < pathJalurAkhir.size(); j++) if (j != pathJalurAkhir.size() - 1)
String vrt = (String) pathJalurAkhir.get(j); int a = j;
String vrt2 = (String) pathJalurAkhir.get(a + 1);
String tmpHasil = jd.namaJalanKoordinat(vrt.toString(), vrt2.toString());
jalurTmpFile = jalurTmpFile + "\n" + tmpHasil; end if
String ver = (String) pathJalurAkhir.get(j); End for
7. double jarak= createXml(pathJalurAkhir);
8. petaPengirimanFrame pp = new petaPengirimanFrame(); 9. String tmpbbt = String.valueOf(bobotAkhir);
11.pp.setTotalPengiriman(tmpbbt); 12.pp.setTotalJarak(String.valueOf(jarak)); 13.pp.setKrr(tujuan); 14.pp.show(); 15.pp.addJalan(); 16.pp.repaint(); preJalurTerpendek() Input: double waktuMulai Output: List Algoritma:
1. List ckList = new ArrayList(); 2. int timezone = 1000000;
3. for (int i = 0; i < rentangWaktu.size(); i++)
double[] tmp = (double[]) rentangWaktu.get(i);
if (tmp[0] <= waktuMulai && tmp[tmp.length - 1] > waktuMulai) timezone = i; end if end for 4. ckList.add(timezone); 5. return ckList; ubahKeAngka() Input: String vList; Output: int
Algoritma:
1. for (int i = 0; i < nameMap.length; i++) if (nameMap[i].getLabel().equals(vList)) return i; end if end for 2. return 0; ubahMatrik() Input: String startAt; double[][] aMat; vertex[] vrtList; Output: List Algoritma: 1. int koordinat = 0;
2. for (int k = 0; k < vrtList.length; k++) vertex vrt = vrtList[k];
if (vrt.getLabel().equals(startAt)) koordinat = k;
end if end for
3. vertex[] vrtListBaru = new vertex[vrtList.length]; 4. int k = 0;
5. for (int i = koordinat; i < vrtList.length; i++) vrtListBaru[k] = vrtList[i];
k++; end for
6. for (int i = 0; i < koordinat; i++) vrtListBaru[k] = vrtList[i]; k++;
end for
7. double test2[][] = new double[aMat.length][aMat.length]; 8. int a = 0;
9. int b;
10.for (int i = koordinat; i < aMat.length; i++) b = 0;
for (int j = koordinat; j < aMat.length; j++) test2[a][b] = aMat[i][j];
b++; end for
for (int j = 0; j < koordinat; j++) test2[a][b] = aMat[i][j]; b++;
end for a++; end for
11.for (int i = 0; i < koordinat; i++) b = 0;
for (int j = koordinat; j < vrtList.length; j++) test2[a][b] = aMat[i][j];
b++; end for
for (int j = 0; j < koordinat; j++) test2[a][b] = aMat[i][j]; b++;
a++; end for
12.double aIMat[][] = new double [aMat.length][aMat.length]; 13.for (int i = 0; i < aMat.length; i++)
for(int j = 0; j < aMat.length; j++) aIMat[i][j]= 1 / test2[i][j]; end for
end for
14.List masuk = new ArrayList(); 15.masuk.add(vrtListBaru); 16.masuk.add(aIMat); 17.masuk.add(test2); 18.return masuk; ubahMatrikPheromone() Input: double to; double [][] aMat; Output: List Algoritma:
1. double aIMat[][] = new double [aMat.length][aMat.length]; 2. for (int i = 0; i < aMat.length; i++)
for(int j = 0; j < aMat.length; j++) aIMat[i][j]= to;
end for end for
3. List masuk = new ArrayList(); 4. masuk.add(aIMat);
5. return masuk; ubahPheromoneGlobal() Input: List tMatrik; double a; double Lgb; List rute; List InvVertex; int cluster; int semut; int I; Output: List Algoritma:
1. int bagi= tMatrik.size()/semut; 2. List baruTau = new ArrayList(); 3. List baruVert = new ArrayList(); 4. List baruRut = new ArrayList();
5. List finalHasilGlobal = new ArrayList(); 6. int q = 0;
7. for (int i = 0; i < tMatrik.size(); i++) for (int j = 0; j < semut; j++) if (cluster == semut)
for (int k = q; k < bagi; k++) baruTau.add(tMatrik.get(k)); baruVert.add(InvVertex.get(k)); baruRut.add(rute.get(k));
end if q = bagi;
bagi = bagi * semut; end for
end for
8. for (int i = 0; i < baruTau.size(); i++)
double[][] percluster = (double[][])baruTau.get(i); vertex[] perVert = (vertex[]) baruVert.get(i); String[] perRut = (String[]) baruRut.get(i); double[][] hasilGlobal = new
double[percluster.length][percluster.length]; double deltaT1 = 1/Lgb;
double deltaT2 = 0;
for(int j=0; j<percluster.length; j++) for(int k=0; k<percluster.length; k++) for (int l = 0; l < perRut.length-1; l++)
if(perVert[j].toString().equals(perRut[l].toString()) && perVert[k].toString().equals(perRut[l+1].toString()))
hasilGlobal[j][k] = ((1-a) * percluster[j][k]) + (a*deltaT1); end if
else
hasilGlobal[j][k] = ((1-a) * percluster[j][k]) + (a*deltaT2); end else end for end for end for finalHasilGlobal.add(hasilGlobal); end for
10.masuk.add(finalHasilGlobal); 11.masuk.add(baruVert); 12.masuk.add(baruRut); 13.return masuk; addDestination() Input: String dest; Output: boolean Algoritma:
1. for (int i = 0; i < nameMap.length; i++)
vertex[] vertexList = (vertex[]) listVertexPerMap.get(i); for (int j = 0; j < vertexList.length; j++)
if (dest.equals(vertexList[j].getLabel())) vertexList[j].setIsInDestination(true); vertexList[j].setIsInDestinationNext(true);
System.out.println("nama map " + nameMap[i].getLabel()); vertex vr = nameMap[i];
vr.setIsInDestination(true);
cobaTampilHasilSet(vertexList[j]);
System.out.println("pada bagian vertex " + i); return true; end if end for end for 2. return false; 1.2 graph
Atribut
private List bobot = new ArrayList();
private List susunanJalan = new ArrayList();
private String sudahPernahJalan [];
private List daftarPernahJalan = new ArrayList();
private List tLokal = new ArrayList();
private String lewatJalan = new String();
private String nodeInfinity = new String();
private vertex vertexList[];
private double adjMat[][];
private vertex nmMap [];
private double tMatriks [][];
private double adBobot [][];
private double hasil [][];
private double INFINITY;
private int nVerts;
private double nilaiQ;
private double nilaiQ0;
private double nilaiB;
private double nilaiP;
private double max;
int angkaJalanAwal =0;;
int nextAngkaJalan;
String jalanPresent = new String();
String nextJalan = new String();
private int next;
private boolean statusDest;
Method path2() Input: - Output: void Algoritma: 1. int jumlahtitik = 0;
2. for (int i = 0; i < vertexList.length; i++) if (vertexList[i].isIsInDestination()) jumlahtitik++; end if end for 3. jalanPresent = vertexList[angkaJalanAwal].getLabel(); 4. susunanJalan.add(jalanPresent); 5. vertexList[angkaJalanAwal].setIsInTree(true); 6. while (jumlahtitik > 1) statusDest = false; if(nilaiQ <= nilaiQ0)
List pers1 = inisialisasiStatus1(); hasil = (double[][]) pers1.get(0); INFINITY = cekInvinity(); end if
if(nilaiQ > nilaiQ0)
List pers2 = inisialisasiStatus2(); hasil = (double[][]) pers2.get(0);
double jumlah = Double.parseDouble(pers2.get(1).toString()) ; INFINITY = cekInvinity2(jumlah);
end if
max = INFINITY;
for (int j = 1; j < nVerts; j++)
if (!vertexList[j].isIsInTree() && hasil[angkaJalanAwal][j] > max && vertexList[j].isIsInDestination())
max = hasil[angkaJalanAwal][j]; nextAngkaJalan=j; statusDest = true; end if end for if (max == INFINITY)
for (int i = 1; i < nVerts; i++)
if (!vertexList[i].isIsInTree() && hasil[angkaJalanAwal][i] > max ) max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i; end if end for end if nextJalan = vertexList[nextAngkaJalan].getLabel(); vertexList[nextAngkaJalan].setIsInTree(true); susunanJalan.add(nextJalan); angkaJalanAwal = nextAngkaJalan; if (statusDest == true) jumlahtitik--; end if end while
7. for (int i = 0; i < nVerts; i++)
end for 8. clusterSetTrue("vertexlist3"); 9. clusterSetTrue(nextJalan); 10.vertexList[0].setIsInTree(false); 11.jumlahtitik = 1; 12.while (jumlahtitik > 0) statusDest = false; if(nilaiQ <= nilaiQ0)
List pers1 = inisialisasiStatus1(); hasil = (double[][]) pers1.get(0); INFINITY = cekInvinity(); end if
if(nilaiQ > nilaiQ0)
List pers2 = inisialisasiStatus2(); hasil = (double[][]) pers2.get(0);
double jumlah = Double.parseDouble(pers2.get(1).toString()) ; INFINITY = cekInvinity2(jumlah);
end if
max = INFINITY;
for (int j = 0; j < nVerts; j++)
if (!vertexList[j].isIsInTree() && hasil[angkaJalanAwal][j] > max && vertexList[j].isIsInDestination())
max = hasil[angkaJalanAwal][j]; nextAngkaJalan = j; statusDest = true; end if end for if (max == INFINITY)
if (!vertexList[i].isIsInTree() && hasil[angkaJalanAwal][i] > max) max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i; end if end for end if nextJalan = vertexList[nextAngkaJalan].getLabel(); vertexList[nextAngkaJalan].setIsInTree(true); susunanJalan.add(nextJalan); angkaJalanAwal = nextAngkaJalan; if (statusDest == true) jumlahtitik--; end if end while path3() Input: - Output: void Algoritma: 1. int jumlahtitik = 0;
2. for (int i = 1; i < vertexList.length; i++) if (vertexList[i].isIsInDestination()) jumlahtitik++;
end if end for
4. jalanPresent = vertexList[angkaJalanAwal].getLabel(); 5. lewatJalan = vertexList[angkaJalanAwal].getLabel(); 6. susunanJalan.add(jalanPresent);
7. sudahPernahJalan = new String[2]; 8. sudahPernahJalan[0] =lewatJalan; 9. while (jumlahtitik >= 0)
statusDest = false; if(nilaiQ <= nilaiQ0)
List pers1 = inisialisasiStatus1(); hasil = (double[][]) pers1.get(0); INFINITY = cekInvinity(); end if
if(nilaiQ > nilaiQ0)
List pers2 = inisialisasiStatus2(); hasil = (double[][]) pers2.get(0);
double jumlah = Double.parseDouble(pers2.get(1).toString()) ; INFINITY = cekInvinity2(jumlah);
end if
max = INFINITY; for (int j = 1; j < nVerts; j++) if (susunanJalan.size()>=2) if
(!vertexList[j].getLabel().equals(susunanJalan.get(susunanJalan.size()- 2).toString()) && !vertexList[j].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][j] > max && nodePernahJalan(jalanPresent, vertexList[j].getLabel()) && vertexList[j].isIsInDestination()) max = hasil[angkaJalanAwal][j];
nextAngkaJalan = j; statusDest = true;
end if end if
else
if (!vertexList[j].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][j] > max && nodePernahJalan(jalanPresent, vertexList[j].getLabel()) && vertexList[j].isIsInDestination() )\ max = hasil[angkaJalanAwal][j]; nextAngkaJalan = j; statusDest = true; end if end else end if if (max == INFINITY)
for (int i = 1; i < nVerts; i++) if (susunanJalan.size() >= 2) if (
!vertexList[i].getLabel().equals(susunanJalan.get(susunanJalan.size()- 2).toString()) &&
!vertexList[i].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][i] > max &&
nodePernahJalan(jalanPresent, vertexList[i].getLabel())) max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i; end if end if else
if (hasil[angkaJalanAwal][i] > max && !vertexList[i].getLabel().equals(nodeInfinity) &&
nodePernahJalan(jalanPresent, vertexList[i].getLabel())) max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i; end if end else end for end if if (max != INFINITY) lewatJalan = vertexList[nextAngkaJalan].getLabel(); sudahPernahJalan[1] = lewatJalan; daftarPernahJalan.add(sudahPernahJalan); sudahPernahJalan = new String[2]; end if if (max != INFINITY) nextJalan = vertexList[nextAngkaJalan].getLabel(); susunanJalan.add(nextJalan); bobot.add(max); updatePheromoneLokal(); angkaJalanAwal = nextAngkaJalan; jalanPresent = nextJalan; end if else nodeInfinity = null; nodeInfinity = nextJalan; susunanJalan.remove(susunanJalan.size()-1); bobot.remove(bobot.size()-1);
if (vertexList[i].getLabel().equals(susunanJalan.get(susunanJalan.size()- 1).toString())) angkaJalanAwal = i; end if end for jalanPresent = vertexList[angkaJalanAwal].getLabel(); nextJalan = jalanPresent; end else if (statusDest == true) vertexList[nextAngkaJalan].setIsInDestination(false); jumlahtitik--; end if
if (jumlahtitik ==0 && vertexList[nextAngkaJalan].isIsInPersimpangan() == next) jumlahtitik--; end if sudahPernahJalan[0] = jalanPresent; end while path4() Input: - Output: void Algoritma:
1. for (int i = 1; i < vertexList.length; i++)
if (vertexList[i].getLabel().equals("riut18")) vertexList[i].setIsInDestination(true);
end if end for
2. int jumlahtitik = 0;
3. for (int i = 1; i < vertexList.length; i++) if (vertexList[i].isIsInDestination()) jumlahtitik++; end if end for 4. angkaJalanAwal =0; 5. jalanPresent = vertexList[angkaJalanAwal].getLabel(); 6. lewatJalan = vertexList[angkaJalanAwal].getLabel(); 7. susunanJalan.add(jalanPresent);
8. sudahPernahJalan = new String[2]; 9. sudahPernahJalan[0] =lewatJalan; 10.while (jumlahtitik >= 1)
statusDest = false; if(nilaiQ <= nilaiQ0)
List pers1 = inisialisasiStatus1(); hasil = (double[][]) pers1.get(0); INFINITY = cekInvinity(); end if
if(nilaiQ > nilaiQ0)
List pers2 = inisialisasiStatus2(); hasil = (double[][]) pers2.get(0);
double jumlah = Double.parseDouble(pers2.get(1).toString()) ; INFINITY = cekInvinity2(jumlah);
end if
max = INFINITY;
if (susunanJalan.size()>=2) if
(!vertexList[j].getLabel().equals(susunanJalan.get(susunanJalan.size()- 2).toString()) &&!vertexList[j].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][j] > max && nodePernahJalan(jalanPresent, vertexList[j].getLabel()) &&vertexList[j].isIsInDestination()) max = hasil[angkaJalanAwal][j]; nextAngkaJalan = j; statusDest = true; end if end if else if (!vertexList[j].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][j] > max && nodePernahJalan(jalanPresent, vertexList[j].getLabel()) && vertexList[j].isIsInDestination() ) max = hasil[angkaJalanAwal][j]; nextAngkaJalan = j; statusDest = true; end if end else end for if (max == INFINITY) for (int i = 1; i < nVerts; i++) if (susunanJalan.size() >= 2) if (
!vertexList[i].getLabel().equals(susunanJalan.get(susunanJalan.size()- 2).toString()) &&!vertexList[i].getLabel().equals(nodeInfinity) && hasil[angkaJalanAwal][i] > max && nodePernahJalan(jalanPresent, vertexList[i].getLabel()))
max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i;
end if end if else
if (hasil[angkaJalanAwal][i] > max && !vertexList[i].getLabel().equals(nodeInfinity) && nodePernahJalan(jalanPresent, vertexList[i].getLabel())) max = hasil[angkaJalanAwal][i]; nextAngkaJalan = i; end if end else end for end if if (max != INFINITY) lewatJalan = vertexList[nextAngkaJalan].getLabel(); sudahPernahJalan[1] = lewatJalan; daftarPernahJalan.add(sudahPernahJalan); sudahPernahJalan = new String[2]; end if
if (max != INFINITY)
nextJalan = vertexList[nextAngkaJalan].getLabel(); susunanJalan.add(nextJalan);
bobot.add(max);
double[][] tMat = updatePheromoneLokal(); angkaJalanAwal = nextAngkaJalan;
jalanPresent = nextJalan; end if
nodeInfinity = null; nodeInfinity = nextJalan;
susunanJalan.remove(susunanJalan.size()-1); bobot.remove(bobot.size()-1);
for (int i = 0; i < nVerts; i++) if (vertexList[i].getLabel().equals(susunanJalan.get(susunanJalan.size()- 1).toString())) angkaJalanAwal = i; end if end for jalanPresent = vertexList[angkaJalanAwal].getLabel(); nextJalan = jalanPresent; end else if (statusDest == true) vertexList[nextAngkaJalan].setIsInDestination(false); jumlahtitik--; end if sudahPernahJalan[0] = jalanPresent; end while inisialisasiStatus1() Input: - Output: List Algoritma:
1. double[][] krMatrik = new double [adjMat.length][adjMat.length]; 2. for (int i = 0; i < adjMat.length; i++)
for(int j = 0; j < adjMat.length; j++) krMatrik[i][j]= adjMat[i][j]; end for
end for
3. for(int x = 1; x<nilaiB; x++)
for (int i = 0; i < adjMat.length; i++) for(int j = 0; j < adjMat.length; j++)
krMatrik[i][j]= krMatrik[i][j] * adjMat[i][j]; end for
end for end for
4. double[][] baru = new double [adjMat.length][adjMat.length]; 5. for (int i = 0; i < adjMat.length; i++){
for(int j = 0; j < adjMat.length; j++){; baru[i][j]= tMatriks[i][j] * krMatrik[i][j]; end for
end for
6. List masuk = new ArrayList(); 7. masuk.add(baru); 8. return masuk; inisialisasiStatus2() Input: - Output: List Algoritma:
1. double[][] krMatrik = new double [adjMat.length][adjMat.length]; 2. for (int i = 0; i < adjMat.length; i++)
System.arraycopy(adjMat[i], 0, krMatrik[i], 0, adjMat.length); end for
3. for(int x = 1; x<nilaiB; x++)
for (int i = 0; i < adjMat.length; i++) for(int j = 0; j < adjMat.length; j++)
krMatrik[i][j]= krMatrik[i][j] * adjMat[i][j]; end for
end for end for
4. double[][] baru = new double [adjMat.length][adjMat.length]; 5. for (int i = 0; i < adjMat.length; i++)
for(int j = 0; j < adjMat.length; j++)
baru[i][j]= tMatriks[i][j] * krMatrik[i][j]; end for
end for
6. double jumlah = 0.0;
7. for(int k=0; k<baru.length; k++)
jumlah = jumlah + baru[angkaJalanAwal][k]; end for
8. for(int m=0; m < baru.length; m++)
baru[angkaJalanAwal][m] = baru[angkaJalanAwal][m] / jumlah; end for
9. List masuk = new ArrayList(); 10.masuk.add(baru);
11.masuk.add(jumlah); 12.return masuk;
updatePheromoneLokal() Input: - Output: double[][] Algoritma: 1. double Lnn = 0; 2. int c = adjMat.length;
3. for(int i=0; i<adjMat.length; i++) for(int j=0; j<adjMat.length; j++) if(vertexList[i].getLabel().equals(jalanPresent) && vertexList[j].getLabel().equals(nextJalan)) Lnn = adjMat[i][j]; end if end for end for 4. double deltaT = 1 / (Lnn * c); 5. for(int i=0; i<tMatriks.length; i++) for(int j=0; j<tMatriks.length; j++)
if (vertexList[i].getLabel().equals(jalanPresent) && vertexList[j].getLabel().equals(nextJalan))
tMatriks[i][j] = ((1-nilaiP) * tMatriks[i][j]) + (nilaiP*deltaT); end if
end for end for
6. return tMatriks;
Atribut vertex vertexList[]; double adjMat[][]; List nextAwal; double bobotBefore; int next; double[][] tMatriks; double nilaiQ; double nilaiQ0; double nilaiB; double nilaiP; Method cariPath() Input: - Output: List Algoritma:
1. List gabunganPath = new ArrayList(); 2. List correctAwal = new ArrayList(); 3. List bbtAwal = new ArrayList(); 4. List pathPilihan = new ArrayList(); 5. double bobotPilihan = 0;
6. double[][] tauPilihan;
7. for (int i = 0; i < nextAwal.size(); i++)
if (CariNode(nextAwal.get(nextAwal.size()-1).toString())) correctAwal.add(nextAwal.get(i));
bbtAwal.add(bobotBefore); end if
end for
8. List awalBaru2 = ubahMatrik(nextAwal.get(nextAwal.size()-1).toString(), adjMat, vertexList);
9. vertex[] vListBaru2 = (vertex[]) awalBaru2.get(0); 10. double[][] adMatBaru2 = (double[][]) awalBaru2.get(1); 11. double[][] amBobot = (double[][]) awalBaru2.get(2); 12. graph grpIncluster2 = new graph(vListBaru2, adMatBaru2,
vListBaru2.length, vListBaru2.length, tMatriks, nilaiQ, nilaiQ0, nilaiB, nilaiP, next, amBobot);
13. List clsterlanjut = grpIncluster2.ssnJalan(); 14. pathPilihan = new ArrayList();
15. pathPilihan = (List) clsterlanjut.get(0); 16. bobotPilihan = (Double) clsterlanjut.get(1); 17. tauPilihan = (double[][]) clsterlanjut.get(2); 18. for (int i = 0; i < vListBaru2.length; i++) { for (int j = 0; j < pathPilihan.size(); j++) {
if (vListBaru2[i].getLabel().equals(pathPilihan.get(j).toString())) break; end if end for end for 19. awalBaru2 = null; 20. adMatBaru2 = null; 21. gabunganPath.add(pathPilihan); 22. gabunganPath.add(bobotPilihan); 23. gabunganPath.add(tauPilihan); 24. gabunganPath.add(vListBaru2);
25. vListBaru2 = null; 26. return gabunganPath; pathAkhir() Input: - Output: List Algoritma:
1 List gabunganPath = new ArrayList(); 2 List correctAwal = new ArrayList(); 3 List bbtAwal = new ArrayList(); 4 List pathPilihan = new ArrayList(); 5 double bobotPilihan = 0;
6 double[][] tauPilihan;
7 for (int i = 0; i < nextAwal.size(); i++) if (CariNode(nextAwal.get(i).toString())) correctAwal.add(nextAwal.get(i)); bbtAwal.add(bobotBefore); end if
end for
8 List awalBaru2 = ubahMatrik((String) correctAwal.get(0), adjMat, vertexList);
9 vertex[] vListBaru2 = (vertex[]) awalBaru2.get(0); 10 double[][] adMatBaru2 = (double[][]) awalBaru2.get(1); 11 double[][] amBobot2 = (double[][]) awalBaru2.get(2); 12 graph grpIncluster2 = new graph(vListBaru2, adMatBaru2,
vListBaru2.length, vListBaru2.length, tMatriks, nilaiQ, nilaiQ0, nilaiB, nilaiP, amBobot2);
13 List clusterAkhir = grpIncluster2.ssnJalan(); 14 pathPilihan = new ArrayList();
15 pathPilihan = (List) clusterAkhir.get(0); 16 bobotPilihan = (Double) clusterAkhir.get(1); 17 tauPilihan = (double[][]) clusterAkhir.get(2); 18 awalBaru2 = null; 19 adMatBaru2 = null; 20 gabunganPath.add(pathPilihan); 21 gabunganPath.add(bobotPilihan); 22 gabunganPath.add(tauPilihan); 23 gabunganPath.add(vListBaru2); 24 vListBaru2 = null; 25 return gabunganPath;
vii
ABSTRAK
Algoritma Ants Colony System(ACS) adalah salah satu algoritma optimasi yang dapat digunakan untuk memecahkan berbagai masalah optimasi. Salah satu masalah yang dapat dipecahkan oleh algoritma ACS adalah Travelling Salesman
Problem (TSP). TSP adalah masalah pencarian rute optimal tanpa mengunjungi
tempat yang sama lebih dari satu kali, seperti menentukan rute terpendek pengiriman barang.
Tujuan dari penelitian ini adalah menerapkan algoritma ACS untuk menentukan rute terpendek pada studi kasus pengiriman barang P.T. Pos Indonesia untuk domisili Yogyakarta. Aplikasi yang dibangun adalah untuk penentuan rute terpendek. Hal-hal yang menjadi pertimbangan dalam mencari rute terpendek adalah kecepatan rata-rata atau bobot waktu, kondisi jalan yang digunakan, parameter algoritma ACS yaitu parameter probabilitas semut (q0),
pheromone awal (t0), parameter koefisien penguapan pheromone (p), parameter
yang mempertimbangkan kepentingan relatif dari informasi heuristic (b), tingkat kepentingan relatif dari pheromone (a), dan banyak iterasi atau banyak semut (m).
Penelitian ini akan menguji berbagai kemungkinan perubahan parameter dan iterasi. Dari hasil pengujian ternyata semakin besar nilai parameter t0 dan p serta
iterasi rute (m) maka rute semakin pendek. Di lain sisi semakin besar nilai parameter b akan maka rute jauh dari pendek.
Hasil pengujian dari 4 titik yang berbeda yaitu tglu3, wch2, kb35, gkan5 adalah 25 menit dengan jarak 70 km dengan penggunaan parameter q0 adalah 0.1,
t0 adalah 0.01, p adalah 0.1, b adalah 2 dan a adalah 0.1.
Kata kunci : Ants Colony System, Travelling Salesman Problem, Pengiriman Barang, Rute Terpendek.
viii
ABSTRACT
Ants Colony System Algorithm (ACS) is one of many algorithm optimalization can be solving all kinds problem optimalization. One of many problem can be solving by ACS Algorithm is Travelling Salesman Problem (TSP). TSP is problem searching optimal route without visit same place over than one time, as determine shortest route packet transporting.
Goal of this research is applying ACS algorithm to determine shortest route packet transporting at study case P.T. Pos Indonesia for domicile Yogyakarta. Application will building for determine shortest route. The condition will be consideration in searching shortest route is speed average or weight time, street
condition, parameter of ACS algorithm is parameter ant probability (q0), initial
pheromone (t0), parameter coefficient pheromone evaporation (p), parameter that
considers the relative importance of the heuristic information (b), the relative importance of the pheromone (a), and many iteration or many ants (m).
This research will be test with varied kinds possibility change of parameter and
iteration. From result of testing obviously more large value of parameter t0 and p
including route iteration (m) more and more short. other side more large value of parameter b will be more and more far from short.
Test results from four different points, namely tglu3, wch2, kb35, gkan5 is 25
minutes with a distance of 70 km with the use of this parameter q0 is 0.1, t0 is 0.01, p
is 0.1, B is 2 and a is 0.1.
Keywords : Ants Colony System, Travelling Salesman Problem, Packet Transporting, Shortest Route.