Pencarian Rute Terpendek Transportasi Bus Trans Jakarta Indonesia Dengan Menggunakan Algoritma Iterative Deepening dan Algoritma Djikstra.

(1)

SEARCHING SIMULATION SHORTEST ROUTE OF BUS

TRANSPORTATION TRANS JAKARTA INDONESIA USING

ITERATIVE DEEPENING ALGORITHM AND DJIKSTRA ALGORITHM

Ditto Djesmedi ( 0222009 )

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha

Jl. Prof. Drg. Surya Sumantri 65, Bandung 40164, Indonesia

Email : ditto_dj_maranatha@yahoo.com

ABSTRAK

Searching of shortest route is a problems that ussually at user supporting

facilities for transportation, because the user supporting facilities for

transportation in doing journey to require solution to get route or path go through

short. This is had a close relationship with the expence efficiency, a time and out

of power.

There are some Algorithm searching to find solution of distance is short,

between it is Breadth first search Algorithm and Deepth first search Algorithm.

At the last task done scheme and realization searching simulation of

shortest route with Iterative Deepening Algorithm and Djikstra Algorithm.

Iterative Deepening Algorithm is searching by way of opening all the possibilities

to all nodes from area of towards area purpose. Djikstra Algorithm is Algorithm

searching of solution value by considering distance wight gone through by

referring to shortest end result or smallest value.

For result in this last task is in the form realization simulation program

searching of shortest route from start until goal, and visualitation at style graph

referring to journey route that is actually.

Keyword : Shortest route, origin halting point ( node origin), halting point purpose

( node purpose), Iterative Deepening Algorithm, Djikstra Algorithm,

distance

value.


(2)

SIMULASI PENCARIAN RUTE TERPENDEK TRANSPORTASI BUS

TRANS JAKARTA INDONESIA

MENGGUNAKAN ALGORITMA ITERATIVE DEEPENING

DAN ALGORITMA DJIKSTRA

Ditto Djesmedi ( 0222009 )

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha

Jl. Prof. Drg. Surya Sumantri 65, Bandung 40164, Indonesia

Email : ditto_dj_maranatha@yahoo.com

ABSTRAK

Pencarian rute terpendek merupakan suatu permasalahan yang sering

muncul pada pengguna sarana transportasi, karena para pengguna sarana

transportasi dalam melakukan perjalanan memerlukan solusi untuk mendapatkan

rute atau jalur tempuh terpendek. Hal ini erat kaitannya dengan efisiensi waktu,

biaya, serta tenaga yang dikeluarkan.

Terdapat beberapa Algoritma pencarian untuk menemukan solusi

pencarian jarak terpendek, diantaranya adalah Algoritma Breadth first search dan

Algoritma Deepth first search.

Pada Tugas Akhir ini dilakukan perancangan serta realisasi simulasi

pencarian rute terpendek dengan Algoritma Iterative Deepening dan Algoritma

Djikstra. Algoritma Iterative Deepening adalah Algoritma pencarian dengan jalan

membuka segala kemungkinan yang ada terhadap semua simpul dari daerah asal

menuju daerah tujuan. Algoritma Djikstra adalah Algoritma pencarian nilai solusi

dengan mempertimbangkan bobot jarak yang ditempuh dengan merujuk terhadap

hasil akhir yang paling pendek atau nilai terkecil.

Hasil yang dicapai dalam Tugas Akhir ini adalah berupa realisasi program

simulasi pencarian rute terpendek dari daerah asal ke daerah yang dituju, dan

divisualisasikan pada model graf yang mengacu pada rute perjalanan yang

sebenarnya.


(3)

Kata kunci : rute terpendek, halte asal (node asal), halte tujuan (node tujuan),

Algoritma

Iterative Deepening, Algoritma Djikstra, nilai jarak.


(4)

DAFTAR ISI

ABSTRAK ... i

ABSTRACT ... ii

KATA PENGANTAR ... iii

DAFTAR ISI ... v

DAFTAR TABEL ... viii

DAFTAR GAMBAR ... ix

BAB I PENDAHULUAN

1.1 Latar Belakang ... 1

1.2 Identifikasi Masalah ... 1

1.3 Tujuan ... 1

1.4 Pembatasan Masalah ... 2

1.5 Metodologi Pemecahan Masalah ... 2

1.6 Sistematika Penulisan ... 3

BAB II LANDASAN TEORI

2.1 Graf ( Graph )

[10]

... 4

2.1.1 Sejarah Graf

[10]

... 4

2.1.2 Jenis-jenis Graf

[10]

... 5

2.1.3 Terminologi Graf

[10]

... 7

2.2 Metode Pencarian Pada Graf ... 10

2.2.1 Breadth-First Search ( BFS )

[1,2,5]

... 10

2.2.2 Depth-First Search ( DFS )

[1,2,5]

... 11

2.3 Algoritma Iterative Deepening ( ID )

[1,2,5]

... 13

2.4 Algoritma Djikstra

[2,3,5]

... 14


(5)

BAB III PERANCANGAN PROGRAM SIMULASI

3.1 Deskripsi Masalah ... 20

3.2 Penelusuran Lintasan

[2]

... 20

3.3 Diagram Alir Program Utama ... 21

3.3.1 Diagram Alir Proses Pencarian (Searching) ... 23

3.3.2 Diagram Alir Perhitungan Jarak... 25

3.4 Perancangan Antarmuka Program ... 26

3.4.1 Desain Tampilan Input Data ... 28

3.4.2 Desain Tampilan Output ... 29

3.4.3 Perancangan Tampilan Tombol Pencarian

(Searching) ... 30

3.4.4 Perancangan Informasi Transfer Koridor ... 30

3.4.5 Desain Tombol Reset ... 32

3.4.6 Perancangan Gambar Rute Trans Jakarta

Indonesia ... 32

BAB IV REALISASI DAN PENGUJIAN PROGRAM

4.1 Realisasi ... 33

4.2 Antarmuka Program ... 34

4.2.1 Tampilan Awal Program ... 34

4.2.2 Tampilan Input dan Output Simulasi Program ... 35

4.2.3 Tombol Searching ... 37

4.2.4 Tombol Clear ... 37

4.2.5 Pemodelan Koridor Trans Jakarta Indonesia ... 38

4.2.6 Peta Perjalanan Trans Jakarta Indonesia ... 39

4.2.7 Matrik Node 9 x 9 ... 41

4.3 Pengujian Program ... 42

4.4 Hasil Analisis Pengujian Program ... 50


(6)

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan ... 60

5.2 Saran ... 60

DAFTAR PUSTAKA ... 61

LAMPIRAN A


(7)

DAFTAR GAMBAR

Gambar 2.1

Graf yang dibuat L.Euler

[10]

... ..5

Gambar 2.2.a Graf Sederhana

[10]

... ..6

Gambar 2.2.b Graf Tak Sederhana

[10]

... ..6

Gambar 2.3.a Graf Berarah ... ..7

Gambar 2.3.b Graf Tak Berarah ... ..7

Gambar 2.4

Graf untuk mmengilustrasikan adjacent

[10]

dan incident

[20]

... ..8

Gambar 2.5 Sirkuit Graph

[10]

... ..8

Gambar 2.6.a Graf Terhubung

[10]

... ..9

Gambar 2.6.b Graf Tak Terhubung

[10]

... ..9

Gambar 2.7 Graf Berbobot ( Weighted Graph )

[10]

... ..9

Gambar 2.8 Graf Lengkap

[10]

... 10

Gambar 2.9 Pencarian dengan langkah BFS ... 11

Gambar 2.10 Pencarian dengan langkah DFS... 12

Gambar 2.11 Pencarian dengan langkah ID sampai level 3 ... 13

Gambar 2.12 Rute perjalanan dari kota A ke kota H

[3,5,6]

... 14

Gambar 2.13 Pencarian dengan langkah Djikstra

[3,5,6]

... 16

Gambar 2.14 Tampilan Awal Project Ms Visual C++

[4]

... 16

Gambar 2.15 Tampilan memulai projek

[4]

... 17

Gambar 2.16 Tampilan pilihan projek

[4]

... 17

Gambar 2.17 Penjelasan tampilan Visual C++

[4]

... 18

Gambar 2.18 Pesan Error pada Ms Visual C++

[4]

... 19

Gambar 3.1 Rute awal dan akhir yang berbeda

[2]

... 20

Gambar 3.2 Rute awal dan akhir sama[2] ... 21

Gambar 3.3 Diagram alir program utama ... 22

Gambar 3.4 Proses pencarian ( Searching ) ... 23

Gambar 3.5 Perhitungan Jarak ... 25

Gambar 3.6 Perancangan antarmuka program ... 27


(8)

Gambar 3.8 Desain perancangan tampilan output program ... 29

Gambar 3.9 Desain Perancangan Tombol Pencarian ... 30

Gambar 3.10 Peancangan desain tombol reset ... 32

Gambar 4.1 Tampilan awal program ... 34

Gambar 4.2 Realisasi Tampilan Input Data ... 35

Gambar 4.3 Realisasi form Output Data ... 36

Gambar 4.4 Realisasi tombol akses Searching ... 37

Gambar 4.5 Realisasi tombol Akses Clear ... 37

Gambar 4.6 Pemodelan tujuh koridor Busway ... 38

Gambar 4.7 Peta Trans Jakarta... 39

Gambar 4.8 Tampilan Matrix 9x9 ... 41

Gambar 4.9 Rute pencarian simulasi program ... 42

Gambar 4.10 Rute pencarian manual ... 43

Gambar 4.11 Rute pencarian simulasi program ... 44

Gambar 4.12 Rute pencarian manual ... 45

Gambar 4.13 Pencarian simulasi program ... 46

Gambar 4.14 Rute pencarian manual ... 47

Gambar 4.15 Rute pencarian simulasi program ... 48

Gambar 4.16 Rute pencarian manual ... 49


(9)

DAFTAR TABEL

Tabel 2.1 Keterangan Graf

[10]

... ..7

Tabel 3.1 Tabel Keterangan Pada Perancangan Antarmuka Program ... 28

Tabel 3.2 Perancangan Desain Matrik Node 9x9 Untuk Data Simulasi ... 31


(10)

(11)

// BUSWAYView.cpp : implementation of the CBUSWAYView class //

#include "stdafx.h" #include "BUSWAY.h"

#include "BUSWAYSet.h" #include "BUSWAYDoc.h" #include "BUSWAYView.h"

#include "LibDraw.h" #include "Algorithm.h" #include "BUSWAYThread.h"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

#define INFINITY 1000000000

int TPrice[2] = {2000,3500};

//typedef unsigned int uint; using namespace std;

///////////////////////////////////////////////////////////////////////////// // CBUSWAYView


(12)

BEGIN_MESSAGE_MAP(CBUSWAYView, CRecordView) //{{AFX_MSG_MAP(CBUSWAYView)

ON_BN_CLICKED(IDC_BTN_GREEDY, OnBtnGreedy)

ON_BN_CLICKED(IDC_BTN_CLEAR, OnBtnClear)

ON_BN_CLICKED(IDC_BTN_ADJ, OnBtnAdj)

ON_BN_CLICKED(IDC_BTN_DIST, OnBtnDist)

ON_BN_CLICKED(IDC_BTN_TRANSHAL, OnBtnTranshal)

ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CBUSWAYView construction/destruction

CBUSWAYView::CBUSWAYView()

: CRecordView(CBUSWAYView::IDD)

{

//{{AFX_DATA_INIT(CBUSWAYView) m_pSet = NULL;

m_HKorDstOut = _T(""); m_HKorSrcOut = _T(""); m_HNodeDstOut = _T(""); m_HNodeSrcOut = _T(""); m_HNameDstOut = _T(""); m_HNameSrcOut = _T(""); m_TotalCost = _T(""); m_Info = _T(""); m_Path12 = _T(""); m_Path14 = _T(""); m_Path23 = _T(""); m_Path24 = _T("");


(13)

m_Path25 = _T(""); m_Path45 = _T(""); m_Path46 = _T(""); m_Path57 = _T("");

m_HNameDstIn = _T(""); m_HNameSrcIn = _T(""); m_PictureInfo = _T("");

m_MatrixOut = _T(""); m_MatrixOutName = _T(""); m_MatrixOutLabel = _T(""); m_GeneralFac = _T(""); m_StSysTime = _T("");

m_pBuswayThread = NULL; m_InfoPrice = _T(""); //}}AFX_DATA_INIT

// TODO: add construction code here }

CBUSWAYView::~CBUSWAYView() {

}

void CBUSWAYView::DoDataExchange(CDataExchange* pDX) {

CRecordView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBUSWAYView)

DDX_Control(pDX, IDC_EDT_TIME, m_EdtSysTime);

DDX_Control(pDX, IDC_FRAME_KORIDOR, m_FrameKoridor);

DDX_Text(pDX, IDC_STAT_HKDST_OUT, m_HKorDstOut);

DDX_Text(pDX, IDC_STAT_HKSRC_OUT, m_HKorSrcOut);


(14)

DDX_Text(pDX, IDC_STAT_HNDSRC_OUT, m_HNodeSrcOut);

DDX_Text(pDX, IDC_STAT_HNDST_OUT, m_HNameDstOut);

DDX_Text(pDX, IDC_STAT_HNSRC_OUT, m_HNameSrcOut);

DDX_Text(pDX, IDC_STAT_TOTAL_COST, m_TotalCost);

DDX_Text(pDX, IDC_STAT_INFO, m_Info);

DDX_Text(pDX, IDC_STAT_P12, m_Path12);

DDX_Text(pDX, IDC_STAT_P14, m_Path14);

DDX_Text(pDX, IDC_STAT_P23, m_Path23);

DDX_Text(pDX, IDC_STAT_P24, m_Path24);

DDX_Text(pDX, IDC_STAT_P25, m_Path25);

DDX_Text(pDX, IDC_STAT_P45, m_Path45);

DDX_Text(pDX, IDC_STAT_P46, m_Path46);

DDX_Text(pDX, IDC_STAT_P57, m_Path57);

DDX_CBString(pDX, IDC_COMBO_HNDST_IN, m_HNameDstIn);

DDX_CBString(pDX, IDC_COMBO_HNSRC_IN, m_HNameSrcIn);

DDX_Text(pDX, IDC_STAT_INFO_PIC, m_PictureInfo);

DDX_Text(pDX, IDC_STAT_MADJ, m_MatrixOut);

DDX_Text(pDX, IDC_STAT_MATRIX_NAME, m_MatrixOutName);

DDX_Text(pDX, IDC_STAT_MATRICES, m_MatrixOutLabel);

DDX_Text(pDX, IDC_STAT_GENERAL, m_GeneralFac);

DDX_FieldText(pDX, IDC_EDT_SIM_HID, m_pSet->m_ID, m_pSet);

DDX_FieldText(pDX, IDC_EDT_SIM_HNAME, m_pSet->m_halte_name, m_pSet); DDX_FieldText(pDX, IDC_EDT_SIM_KORIDOR, m_pSet->m_koridor, m_pSet); DDX_FieldText(pDX, IDC_EDT_SIM_NODE, m_pSet->m_node_num, m_pSet);

DDX_Text(pDX, IDC_STAT_PRICE, m_InfoPrice);

//}}AFX_DATA_MAP }

BOOL CBUSWAYView::PreCreateWindow(CREATESTRUCT& cs) {


(15)

// the CREATESTRUCT cs

return CRecordView::PreCreateWindow(cs);

}

void CBUSWAYView::OnInitialUpdate() {

m_pSet = &GetDocument()->m_bUSWAYSet; CRecordView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit();

m_pDC = m_FrameKoridor.GetWindowDC(); Init();

CreateKoridorNodeArray(); CreateKoridorMatrix(); CreateGreedyNodeArray(); InitLookUpTblDist(); CalcHTransDistance();

PrintNullMatrix();

m_pBuswayThread = new CBUSWAYThread; SetTimer(1,1000,NULL);

}

///////////////////////////////////////////////////////////////////////////// // CBUSWAYView diagnostics

#ifdef _DEBUG


(16)

{

CRecordView::AssertValid(); }

void CBUSWAYView::Dump(CDumpContext& dc) const {

CRecordView::Dump(dc); }

CBUSWAYDoc* CBUSWAYView::GetDocument() // non-debug version is inline {

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBUSWAYDoc)));

return (CBUSWAYDoc*)m_pDocument;

}

#endif //_DEBUG

///////////////////////////////////////////////////////////////////////////// // CBUSWAYView database support

CRecordset* CBUSWAYView::OnGetRecordset() {

return m_pSet;

}

void CBUSWAYView::OnTimer(UINT nIDEvent) {

if(nIDEvent == 1) {

if(m_pBuswayThread != NULL)

{

CString sTime = "";


(17)

m_EdtSysTime.SetSel(0,-1); m_EdtSysTime.Clear();

m_EdtSysTime.ReplaceSel(sTime); m_EdtSysTime.UpdateData(false);

} }

CRecordView::OnTimer(nIDEvent); }

///////////////////////////////////////////////////////////////////////////// // CBUSWAYView message handlers

void CBUSWAYView::OnBtnGreedy() {

// TODO: Add your control notification handler code here //int i, j;

int error = 3;

UpdateData(TRUE);

ResetLabel(); ResetGreedyPath(); ResetCost(); ResetCloseHalte(); OnDraw(m_pDC);

// validasi masukan nama halte asal & halte tujuan

if((GetFilterStatus("halte_name", m_HNameSrcIn) == -1) &&

(GetFilterStatus("halte_name", m_HNameDstIn) == -1)) // masukan halte asal & tujuan {

error = 3;


(18)

}

else if(GetFilterStatus("halte_name", m_HNameDstIn) == -1) // masukan halte tujuan {

error = 2;

ReFilterDB(); }

else if(GetFilterStatus("halte_name", m_HNameSrcIn) == -1) // masukan halte asal {

error = 1;

ReFilterDB(); }

else {

error = 0;

ReFilterDB(); }

m_Info = "";

switch(error) {

case 0:

{

int i, j, calculate;

if(ValidasiName() == -1)

{

ProcessInfo(); }

// Cost Information

calculate = CalcDistance();


(19)

if(m_HKorSrcOut == m_HKorDstOut) {

i = atoi(m_HKorDstOut);

i = i == 6 ? i+1 : (i == 7 ? i-1 : i);

m_Info = "Perjalanan akan berlangsung pada Koridor yang Sama";

m_NodeArray[i].SetAsSource(m_pDC);

} else {

// Solution with greedy algorithm using djikstra metode

i = atoi(m_HKorSrcOut);

j = atoi(m_HKorDstOut);

i = i == 6 ? i+1 : (i == 7 ? i-1 : i); j = j == 6 ? j+1 : (j == 7 ? j-1 : j);

m_NodeArray[i].SetAsSource(m_pDC);

m_NodeArray[j].SetAsDestination(m_pDC);

}

PrintTicketPrice(atoi(m_HKorSrcOut));

break;

}

case 1:

{

MessageBox("Record Halte Asal tidak ditemukan!");

break;

}

case 2:


(20)

MessageBox("Record Halte Tujuan tidak ditemukan!");

break;

}

case 3:

{

MessageBox("Record Halte Asal & Tujuan tidak ditemukan!");

break;

} default:

MessageBox("Internal Error!");

break; }

ReFilterDB();

UpdateData(false); }

void CBUSWAYView::OnBtnClear() {

// TODO: Add your control notification handler code here OnDraw(m_pDC);

Init();

PrintNullMatrix(); }

void CBUSWAYView::Init() {

m_HNameDstIn = _T(""); m_HNameSrcIn = _T("");


(21)

m_HKorSrcOut = "-"; m_HNodeDstOut = "-"; m_HNodeSrcOut = "-"; m_HNameDstOut = "-"; m_HNameSrcOut = "-"; m_Path12 = "-"; m_Path14 = "-"; m_Path23 = "-"; m_Path24 = "-"; m_Path25 = "-"; m_Path45 = "-"; m_Path46 = "-"; m_Path57 = "-"; m_TotalCost = "-";

m_Info = "Silahkan Memasukkan Halte Asal dan Tujuan Anda"; m_GeneralFac = "-";

m_InfoPrice = "-"; PrintPictureInfo();

UpdateData(false); }

int CBUSWAYView::GetFilterStatus(CString sFilterRec, CString sRec) {

int retVal = -1;

int recCount;

CString sFilter;


(22)

m_pSet->Close(); m_pSet->m_strFilter = sFilter; m_pSet->Open();

recCount = m_pSet->GetRecordCount();

if(recCount == 0)

{

return retVal;

} return (retVal = 0); }

void CBUSWAYView::OnDraw(CDC* pDC) {

// TODO: Add your specialized code here and/or call the base class m_pDC = m_FrameKoridor.GetWindowDC();

RECT rect;

int nCircle;

GetWindowRect(&rect);

m_NodeArray.SetSize(1,-1); m_PathArray.SetSize(1,-1);

for(nCircle=0; nCircle<7; nCircle++) {

unsigned int x = 30 + (nCircle%3* 80); unsigned int y = 30 + (nCircle/3* 100); unsigned int r = 10;


(23)

m_NodeArray.Add(newCircle); newCircle.SetBorderWidth(3);

newCircle.SetBorderColor(RGB(255,255,255)); newCircle.SetBorder(true);

newCircle.SetFillColor(RGB(0,0,0));

newCircle.SetFill(true);

newCircle.Draw(m_pDC);

}

m_NodeArray[1].SetPathTo(m_NodeArray[2].GetX(),m_NodeArray[2].GetY(), m_pDC); m_NodeArray[1].SetPathTo(m_NodeArray[4].GetX(),m_NodeArray[4].GetY(), m_pDC); m_NodeArray[2].SetPathTo(m_NodeArray[3].GetX(),m_NodeArray[3].GetY(), m_pDC); m_NodeArray[2].SetPathTo(m_NodeArray[4].GetX(),m_NodeArray[4].GetY(), m_pDC); m_NodeArray[2].SetPathTo(m_NodeArray[5].GetX(),m_NodeArray[5].GetY(), m_pDC); m_NodeArray[4].SetPathTo(m_NodeArray[5].GetX(),m_NodeArray[5].GetY(), m_pDC); m_NodeArray[4].SetPathTo(m_NodeArray[7].GetX(),m_NodeArray[7].GetY(), m_pDC); m_NodeArray[5].SetPathTo(m_NodeArray[6].GetX(),m_NodeArray[6].GetY(), m_pDC);

}

void CBUSWAYView::ReFilterDB() {

m_pSet->Close(); m_pSet->m_strFilter = ""; m_pSet->Open(); }

void CBUSWAYView::ProcessInfo() {

// Source Information


(24)

m_HNameSrcOut.Format("%s",m_pSet->m_halte_name); m_HKorSrcOut.Format("%d",m_pSet->m_koridor);

m_HNodeSrcOut.Format("%d",m_pSet->m_node_num);

// Destination Information

GetFilterStatus("halte_name", m_HNameDstIn);

m_HNameDstOut.Format("%s",m_pSet->m_halte_name); m_HKorDstOut.Format("%d",m_pSet->m_koridor); m_HNodeDstOut.Format("%d",m_pSet->m_node_num); }

int CBUSWAYView::ValidasiName() {

int retVal = -1;

int nodeDstNum, nodeSrcNum, i,j, k; int korDstNum = -1;

// destination and source can be in one corridor, so.. for(i=0; i<NUM_KORIDOR; i++)

{

for(j=0; j<m_HalteArray[i].GetSize(); j++)

{

if(!strcmp(m_HNameDstIn, m_HalteArray[i][j].GetHalteName()))

{

korDstNum = m_HalteArray[i][j].GetKoridor();

m_HKorDstOut.Format("%d", korDstNum);

m_HNameDstOut = m_HNameDstIn;


(25)

nodeDstNum = GetHalteNode(korDstNum, m_HNameDstIn); m_HNodeDstOut.Format("%d",nodeDstNum);

for(k=0; k<m_HalteArray[korDstNum].GetSize(); k++)

{

if(!strcmp(m_HNameSrcIn, m_HalteArray[korDstNum][k].GetHalteName()))

{

m_HNameSrcOut.Format("%s",m_HNameSrcIn);

//Source halte name

m_HKorSrcOut.Format("%d", korDstNum);

//Source koridor number

nodeSrcNum = GetHalteNode(korDstNum,

m_HNameSrcIn);

m_HNodeSrcOut.Format("%d", nodeSrcNum);

//Source node number

return 0; }

} }

} }

return retVal;

}

void CBUSWAYView::CreateKoridorNodeArray() {

int i;

for(i=1; i<=8; i++) {

m_HalteArray[i].SetSize(1,-1);

CreateNodeMatrix(i, m_HalteArray[i]);


(26)

CString a = m_HalteArray[7][13].GetHalteName(); }

void CBUSWAYView::CreateGreedyNodeArray() {

int i;

m_HalteGrdArray.SetSize(1,-1);

for(i=1; i<=NUM_TRANSHAL; i++) {

CHalte newHalteGrd(i,_T(""),0,i,3,INFINITY); m_HalteGrdArray.Add(newHalteGrd); }

}

void CBUSWAYView::CreateNodeMatrix(int koridor, CHalteArray &halteArray) {

ReFilterDB(); m_pSet->MoveFirst();

while(!m_pSet->IsEOF()) {

if(m_pSet->m_koridor == koridor)

{

CHalte newHalte(m_pSet->m_ID,

m_pSet->m_halte_name, m_pSet->m_koridor, m_pSet->m_node_num, m_pSet->m_node_code, m_pSet->m_node_dist);


(27)

halteArray.Add(newHalte); }

m_pSet->MoveNext(); };

}

int CBUSWAYView::CalcDistance() {

int retVal = 0; float dstKm = 0;

int korSrc = atoi(m_HKorSrcOut); int korDst = atoi(m_HKorDstOut); int nodeSrc = atoi(m_HNodeSrcOut); int nodeDst = atoi(m_HNodeDstOut);

CString HSrcName = m_HalteArray[korSrc][nodeSrc].GetHalteName(); CString HDstName = m_HalteArray[korDst][nodeDst].GetHalteName();

retVal = DoGreedyAlg(); dstKm = (float)retVal / 1000.000;

m_TotalCost.Format("%d\tMeter(s)\n%.3f\tKm",retVal,dstKm); PrintGeneralFacility(korDst,nodeDst);

return retVal;

}

int CBUSWAYView::GetTransHalte(int kor) {

int retVal =0;

int k=0;


(28)

{

int a = m_HalteArray[kor][j].GetNodeCode();

if(a == 3)

{

k= k + 1;

} }

retVal = retVal + k;

return retVal;

}

int CBUSWAYView::CalcDistInKoridor(int koridor, int nodeSrc, int nodeDst) {

int retVal = 0; int dst = 0;

if(nodeSrc < nodeDst) {

for(int i=nodeSrc; i<nodeDst; i++) {

CString a = m_HalteArray[koridor][i].GetHalteName();

dst = m_HalteArray[koridor][i+1].GetDistance();

retVal = retVal + dst; }

} else {

for(int i=nodeSrc; i>nodeDst; i--) {


(29)

retVal = retVal + dst; }

}

return retVal;

}

char *NameTbl1[] = {"Harmoni","Dukuh Atas","Pecenongan","Juanda","Matraman","Senen","Terminal Pulo Gadung","Kp. Melayu","Dukuh Atas 2"};

void CBUSWAYView::CreateKoridorMatrix() {

bool LookUpTblPath[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,1,1,0,1,1,0,0},

{1,0,0,0,1,0,1,0,1}, {1,0,0,1,0,0,0,0,0}, {1,0,1,0,0,0,0,0,0}, {0,1,0,0,0,1,1,1,0}, {1,0,1,1,1,0,1,1,0}, {1,1,1,0,1,1,0,0,0}, {0,0,0,0,1,1,0,0,0}, {0,1,0,0,0,0,0,0,0} };

int LookUpTblKoridor[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,3,3,0,2,2,0,1},

{1,0,0,0,4,0,4,0,1}, {3,0,0,2,0,0,0,0,0}, {3,0,3,0,0,0,0,0,0}, {0,4,0,0,0,5,4,5,0}, {2,0,2,2,2,0,2,5,0}, {2,4,2,2,4,2,0,0,0}, {0,0,0,0,5,5,0,0,0},


(30)

{1,6,0,0,0,0,0,0,0} };

/*bool LookUpTblPath[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,1,1,0,1,1,0,0},

{1,0,0,0,1,0,1,0,1}, {1,0,0,1,0,1,1,0,0}, {1,0,1,0,0,1,1,0,0}, {0,1,0,0,0,1,1,1,0}, {1,0,1,1,1,0,1,1,0}, {1,1,1,0,1,1,0,0,0}, {0,0,0,0,1,1,0,0,0}, {0,1,0,0,0,0,0,0,0} };

int LookUpTblKoridor[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,3,3,0,2,2,0,1},

{1,0,0,0,4,0,4,0,1}, {3,0,0,2,0,2,2,0,0}, {3,0,3,0,0,2,2,0,0}, {0,4,0,0,0,5,4,5,0}, {2,0,2,2,2,0,2,5,0}, {2,4,2,2,4,2,0,0,0}, {0,0,0,0,5,5,0,0,0}, {1,6,0,0,0,0,0,0,0} };

bool LookUpTblPath[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,1,1,0,1,1,0,0,0},

{1,0,0,0,1,0,1,0,1,0}, {1,0,0,1,0,1,1,0,0,0},


(31)

{1,0,1,0,0,1,1,0,0,0}, {0,1,0,0,0,1,1,1,0,1}, {1,0,1,1,0,0,1,0,0,1}, {1,1,1,0,1,1,0,0,0,0}, {0,0,0,0,1,1,0,0,0,1}, {0,1,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,0,1,0,0} };

int LookUpTblKoridor[NUM_TRANSHAL][NUM_TRANSHAL] = { {0,1,3,3,0,2,2,0,1,0},

{1,0,0,0,4,0,4,0,1,0}, {3,0,0,3,0,2,2,0,0,0}, {3,0,3,0,0,2,2,0,0,0}, {0,4,0,0,0,5,4,5,0,5}, {2,0,2,2,0,0,2,0,0,2}, {2,4,2,2,4,2,0,0,0,0}, {0,0,0,0,5,5,0,0,0,5}, {1,6,0,0,0,0,0,0,0,0}, {0,0,0,0,5,2,0,5,0,0} };*/

for(int i=0;i<NUM_TRANSHAL;i++)

{

for(int j=0; j<NUM_TRANSHAL; j++) {

m_LookUpTblPath[i][j] = LookUpTblPath[i][j];

bool test = m_LookUpTblPath[i][j];

m_LookUpTblKoridor[i][j] = LookUpTblKoridor[i][j]; }


(32)

}

void CBUSWAYView::InitLookUpTblDist() {

int i,j;

for(i=0;i<NUM_TRANSHAL;i++) {

for(j=0; j<NUM_TRANSHAL; j++)

{

m_LookUpTblDistance[i][j] = 0;

} } }

void CBUSWAYView::CalcHTransDistance() {

int i,j;

for(i=0; i<NUM_TRANSHAL; i++) {

int halteKoridor;

int nodeSrc;

int nodeDst;

CString halteSrcName = NameTbl1[i];

for(j=0; j<NUM_TRANSHAL; j++)

{

CString halteDstName = NameTbl1[j];

if(j != i)

{


(33)

if(halteKoridor != 0) {

nodeSrc = GetHalteNode(halteKoridor,halteSrcName);

nodeDst = GetHalteNode(halteKoridor,halteDstName);

m_LookUpTblDistance[i][j] =

CalcDistInKoridor(halteKoridor,nodeSrc,nodeDst);

} }

}

int newKoridor = m_HalteGrdArray[i].GetKoridor();

m_HalteGrdArray[i].Set(i+1,halteSrcName,newKoridor,i,3,INFINITY); }

}

int CBUSWAYView::GetHalteNode(int koridor, CString name) {

int retVal = -1;

for(int i=0; i<m_HalteArray[koridor].GetSize(); i++) {

if(!strcmp(m_HalteArray[koridor][i].GetHalteName(), name))

{

retVal = m_HalteArray[koridor][i].GetNode();

} }

return retVal;

}

void CBUSWAYView::ResetLabel() {

int i,j;

for(i=0; i<NUM_TRANSHAL; i++) {


(34)

m_HalteGrdArray[i].SetLabel(tentative); m_HalteGrdArray[i].SetLength(INFINITY); m_HalteGrdArray[i].SetPredecessor(-1); }

for(i=0; i<NUM_KORIDOR; i++) {

m_Path[i] = -1;

m_GreedyPath[i] = -1;

for(j=0; j<m_HalteArray[i].GetSize(); j++)

{

m_HalteArray[i][j].SetLabel(tentative); m_HalteArray[i][j].SetLength(INFINITY); m_HalteArray[i][j].SetPredecessor(-1);

} } }

int CBUSWAYView::DoGreedyAlg() {

int retVal = 0;

int KorSrc = atoi(m_HKorSrcOut); int KorDst = atoi(m_HKorDstOut); int NodeSrc = atoi(m_HNodeSrcOut); int NodeDst = atoi(m_HNodeDstOut);

if(KorDst == KorSrc) {

// source and destination node in same corridor

retVal = CalcDistInKoridor(KorDst, atoi(m_HNodeSrcOut), atoi(m_HNodeDstOut)); }


(35)

else {

if(m_HalteArray[KorSrc][NodeSrc].GetNodeCode() != 3)

{

// source node is not transfer halte

int i,j;

int SrcCloserHalte[NUM_TRANSHAL];

int value[NUM_TRANSHAL];

int path[NUM_TRANSHAL][NUM_TRANSHAL];

int realSrcToCloseTransNode = -1;

int realSrcNode = -1;

int realDstNode = -1;

m_GreedyPath2[NUM_TRANSHAL] = -1;

int NumCloserHToSource = GetCloserHalteInKor(KorSrc, NodeSrc);

if(NumCloserHToSource != -1)

{

// the real source halte node

realSrcNode = GetHalteNode(KorSrc, m_HNameSrcIn);

// copy closer halte array to another array so we can use for closer

destination halte

for(i=0; i<NUM_TRANSHAL; i++)

{

for(j=0; j<NUM_TRANSHAL; j++)

{

path[i][j] = -1;

// init path

}

value[i] = 0; // initial for greedy results


(36)

SrcCloserHalte[i] = -1; // initial for src closer halte

SrcCloserHalte[i] = m_ClosHalte[i]; // copy

}

int tempPathCode[NUM_TRANSHAL] = {-1};

int tempCount = -1;

for(i=0; i<NumCloserHToSource; i++)

{

int distHalteToCloseSrc = -1;

ResetCloseHalte(); ResetLabel();

realSrcToCloseTransNode = GetHalteNode(KorSrc,

NameTbl1[SrcCloserHalte[i]]);

distHalteToCloseSrc = CalcDistInKoridor(KorSrc, NodeSrc,

realSrcToCloseTransNode);

int NumCloserHToDest = GetCloserHalteInKor(KorDst,

NodeDst);

value[i] = CalcWithGreedy(NumCloserHToDest,

SrcCloserHalte[i],KorDst,NodeDst,distHalteToCloseSrc);

//copy path and reverse to get last node of greedy path

int temp=0;

for(j=NUM_TRANSHAL-1; j>=0; j--)

{

if(m_GreedyPath2[j] >= 0)

{

path[i][j] = m_GreedyPath2[j];

tempCount = m_GreedyPath2[j];


(37)

}

}

tempPathCode[i] = tempCount;

}

int min = INFINITY; int select = -1;

int TheDist = 0;

for(i=0; i<NumCloserHToSource; i++)

{

//if(path[i][0] > -1)

if(tempPathCode[i] > -1)

{

//int code = path[i][0];

int code = tempPathCode[i];

realDstNode = GetHalteNode(KorSrc,

NameTbl1[SrcCloserHalte[i]]); // source to close halte distance

TheDist = CalcDistInKoridor(KorSrc, realSrcNode,

realDstNode);

//if(value[i] + TheDist < min)

if(value[i] < min)

{

//TheDist = TheDist + value[i];

//min = value[i];

for(j=0; j<NUM_TRANSHAL; j++)

{

m_Path[j] = path[i][j];

}

//min = TheDist + value[i];

min = value[i]; select = i;


(38)

} }

}

retVal = min; }

} else {

// source node is transfer halte, so this is done with distance matrix

int initDestToSrc = 0;

int Src = HalteToInt(KorSrc, NodeSrc);

ResetCloseHalte();

// Get the transfer halte who closer to destination halte int NumCloserHalte = GetCloserHalteInKor(KorDst, NodeDst);

retVal = CalcWithGreedy(NumCloserHalte, Src, KorDst, NodeDst, initDestToSrc);

}

//Print Path

PrintPath(m_HNameSrcIn, m_HNameDstIn);

}

return retVal;

}

int CBUSWAYView::CalcWithGreedy(int closerHalte, int srcHalte, int korDst, int nodeDst, int distSrcToTrans) {

int retVal = 0; int i,j, select;

int minCost;


(39)

int realNode = -1;

for(i=0; i<closerHalte; i++) {

ResetLabel(); // reset all changed

at CArray

ResetGreedyPath();

m_Cost[i] = SearchPath(srcHalte, m_ClosHalte[i]);

if(m_Cost[i] > -1)

{

for(j=0; j<NUM_TRANSHAL; j++)

{

m_Path2[i][j] = m_GreedyPath[j];

} }

}

select = 0;

minCost = INFINITY; for(i=0; i<closerHalte; i++) {

//if(m_Path2[i][0] > -1 && m_Cost[i] < minCost) if(m_Path2[i][0] > -1 && m_Cost[i] < minCost) {

// From the greedy path get the real node code transfer halte

int code = m_Path2[i][0];

realNode = GetHalteNode(korDst, NameTbl1[code]);

distance = CalcDistInKoridor(korDst, realNode, nodeDst); // from closer trans halte to destination

distance = distSrcToTrans + distance + m_Cost[i]; // from source to destination

minCost = m_Cost[i] + distSrcToTrans;


(40)

//get the path

for(int k=0; k<NUM_TRANSHAL; k++)

{

m_GreedyPath2[k] = m_Path2[i][k];

} }

}

for(i=0; i<closerHalte; i++) {

if(i>0)

m_Path[i] = m_GreedyPath2[i-1];

}

retVal = distance;

return retVal;

}

int CBUSWAYView::SearchPath(int nodeSrc, int nodeDst) {

int retVal = -1; int k, i;

// init source node

m_HalteGrdArray[nodeSrc].SetLabel(permanent); m_HalteGrdArray[nodeSrc].SetLength(0);

if(nodeSrc == nodeDst) {


(41)

} else {

k = nodeSrc;

do {

for(i=0; i<NUM_TRANSHAL; i++)

{

if(m_LookUpTblDistance[k][i] != 0 && m_HalteGrdArray[i].GetLabel() == tentative)

{

if((m_HalteGrdArray[k].GetLength() +

m_LookUpTblDistance[k][i]) < m_HalteGrdArray[i].GetLength()) {

m_HalteGrdArray[i].SetPredecessor(k);

m_HalteGrdArray[i].SetLength((m_HalteGrdArray[k].GetLength() + m_LookUpTblDistance[k][i])); }

} }

int min = INFINITY;

k = 0;

for(i=0; i<NUM_TRANSHAL; i++)

{

if((m_HalteGrdArray[i].GetLabel()) == tentative &&

(m_HalteGrdArray[i].GetLength() < min)) {

min = m_HalteGrdArray[i].GetLength();

k = i; }

}


(42)

}while(k != nodeDst);

// Get the greedy path

k = nodeDst;

i=0; do

{

m_GreedyPath[i++] = k;

k = m_HalteGrdArray[k].GetPredecessor();

}while(k >= 0);

int cost = 0;

for(i=0; i<NUM_TRANSHAL; i++)

{

if(m_GreedyPath[i] >= 0 && m_GreedyPath[i+1] != -1 && m_LookUpTblDistance[m_GreedyPath[i]][m_GreedyPath[i + 1]] >0)

{

cost = cost +

m_LookUpTblDistance[m_GreedyPath[i]][m_GreedyPath[i + 1]]; }

}

retVal = cost;

}

return retVal;

}

int CBUSWAYView::HalteToInt(int koridor, int node) {

int retVal = -1;

int i;


(43)

for(i=0; i<NUM_TRANSHAL; i++) {

if(!strcmp(HalteName, NameTbl1[i]))

{

retVal = i; break;

} }

return retVal;

}

int CBUSWAYView::GetCloserHalteInKor(int koridor, int node) {

int retVal = -1;

int i;

int count = 0; int nNode = -1;

for(i=0; i<m_HalteArray[koridor].GetSize(); i++) {

if(m_HalteArray[koridor][i].GetNodeCode() == 3)

{

nNode = m_HalteArray[koridor][i].GetNode();

m_ClosHalte[count] = HalteToInt(koridor, nNode);

if(m_ClosHalte[count] >= 0)

count++; }

} retVal = count;


(44)

}

void CBUSWAYView::ResetGreedyPath() {

for(int i=0; i<NUM_TRANSHAL; i++) {

m_GreedyPath[i] = -1;

} }

void CBUSWAYView::ResetCost() {

for(int i=0; i<NUM_TRANSHAL; i++) {

m_Cost[i] = -1;

} }

void CBUSWAYView::ResetCloseHalte() {

for(int i=0; i<NUM_TRANSHAL; i++) {

m_ClosHalte[i] = -1;

} }

void CBUSWAYView::PrintPictureInfo() {

CString text,text1,text2,text3,text4,text5,text6,text7;


(45)

text2 = "\nTransfer Koridor:\n";

text3 = "1 : Harmoni (K-I)\t\t5 : Matraman (K-IV)\n"; text4 = "2 : Dukuh Atas (K-I)\t6 : Senen (K-V)\n"; text5 = "3 : Pecenongan (K-III)\t7 : P. Gadung (K-IV)\n"; text6 = "4 : Juanda (K-III)\t\t8 : Kp. Melayu (K-VII)\n"; text7 = "\t9 : Dukuh Atas 2 (K-VI)";

text = text1 + text2 + text3 + text4 + text5 + text6+ text7; //m_PictureInfo.Format("%s",text);

m_PictureInfo = text; }

void CBUSWAYView::PrintPath(CString sourceName, CString dstName) {

int i;

CString pathName = _T(""); for(i=NUM_KORIDOR; i>=0; i--) {

if(m_Path[i] > -1)

{

pathName = pathName + " - " + NameTbl1[m_Path[i]]; }

}

sourceName = "Jalur yang ditempuh :\n" + sourceName + pathName + " - " + dstName; m_Info = sourceName;

//m_Info.Format("%s",sourceName); //UpdateData(false);

}

void CBUSWAYView::PrintCost(int lenFromSrc, int lenFromDst) {


(46)

int i; int cost = 0; int cost1 = 0; int cost2 = 0; int count = 0;

int distance[NUM_KORIDOR] = {0}; for(i=0; i<NUM_KORIDOR; i++) {

if(m_Path[i] > -1 && m_Path[i+1] > -1) {

distance[i] = m_LookUpTblDistance[m_Path[i]][m_Path[i+1]];

count++; }

}

for(i=0; i<count; i++)

cost = cost + distance[i];

cost1 = lenFromSrc + cost - lenFromDst; cost2 = cost - lenFromSrc + lenFromDst; cost = (cost1 <= cost2) ? cost2 : cost1; //cost = lenFromSrc + cost - lenFromDst; cost = (cost<0) ? -cost : cost;

m_TotalCost.Format("%d", cost); //UpdateData(false);

}

void CBUSWAYView::PrintMatrixAdj() {

CString tempString = "";


(47)

{

for(int j=0; j<NUM_TRANSHAL; j++) {

tempString.Format("%d",m_LookUpTblPath[i][j]);

m_MatrixOut += tempString + "\t";

}

//tempString.Format("%d",i+1);

m_MatrixOut += "\n";

tempString.Format("%d",i+1); m_MatrixOutLabel += tempString + "\t"; }

m_MatrixOutName = "Adjacency Matrices"; }

void CBUSWAYView::PrintMatrixDist() {

CString tempString = "";

for(int i=0; i<NUM_TRANSHAL; i++) {

for(int j=0; j<NUM_TRANSHAL; j++) {

tempString.Format("%d",m_LookUpTblDistance[i][j]);

m_MatrixOut += tempString + "\t";

}

//tempString.Format("%d",i+1);

m_MatrixOut += "\n";

tempString.Format("%d",i+1); m_MatrixOutLabel += tempString + "\t"; }


(48)

m_MatrixOutName = "Distance Matrices (Meter(s))"; }

void CBUSWAYView::PrintMatrixTransHal() {

CString tempString = "";

for(int i=0; i<NUM_TRANSHAL; i++) {

for(int j=0; j<NUM_TRANSHAL; j++) {

tempString.Format("%d",m_LookUpTblKoridor[i][j]);

m_MatrixOut += tempString + "\t";

}

//tempString.Format("%d",i+1);

m_MatrixOut += "\n";

tempString.Format("%d",i+1); m_MatrixOutLabel += tempString + "\t"; }

m_MatrixOutName = "Transfer Halte Matrices (Transfer Koridor Number)"; }

void CBUSWAYView::PrintNullMatrix() {

CString tempString = ""; m_MatrixOutLabel = ""; m_MatrixOut = "";

for(int i=0; i<NUM_TRANSHAL; i++) {

for(int j=0; j<NUM_TRANSHAL; j++) {


(49)

tempString.Format("%d",0);

m_MatrixOut += tempString + "\t";

}

//tempString.Format("%d",i+1);

m_MatrixOut += "\n";

tempString.Format("%d",i+1); m_MatrixOutLabel += tempString + "\t"; }

m_MatrixOutName = "9x9 Null Matrices"; UpdateData(false);

}

void CBUSWAYView::OnBtnAdj() {

// TODO: Add your control notification handler code here m_MatrixOutLabel = "";

m_MatrixOut = ""; PrintMatrixAdj(); UpdateData(false); }

void CBUSWAYView::OnBtnDist() {

// TODO: Add your control notification handler code here m_MatrixOutLabel = "";

m_MatrixOut = ""; PrintMatrixDist(); UpdateData(false); }


(50)

void CBUSWAYView::OnBtnTranshal() {

// TODO: Add your control notification handler code here m_MatrixOutLabel = "";

m_MatrixOut = "";

PrintMatrixTransHal(); UpdateData(false); }

void CBUSWAYView::PrintGeneralFacility(int koridor, int node) {

int idx = 0;

CString textToPrint = "";

idx = GetDBIndex(koridor, node);

ReFilterDB(); m_pSet->MoveFirst(); while(!m_pSet->IsEOF()) {

if(m_pSet->m_ID == idx)

{

textToPrint = m_pSet->m_general;

}

m_pSet->MoveNext(); };

m_GeneralFac = textToPrint; }

int CBUSWAYView::GetDBIndex(int koridor, int node) {


(51)

int retVal = 0; ReFilterDB(); m_pSet->MoveFirst();

while(!m_pSet->IsEOF()) {

if(m_pSet->m_koridor == koridor)

{

if(m_pSet->m_node_num == node)

{

retVal = m_pSet->m_ID;

} }

m_pSet->MoveNext(); };

return retVal;

}

void CBUSWAYView::PrintTicketPrice(int koridor) {

time_t osBinaryTime;

time(&osBinaryTime);

int minutes;

int hours;

CTime theTime(osBinaryTime);

hours = theTime.GetHour(); minutes = theTime.GetMinute();

if(hours >= 5 && hours <=7) {


(52)

m_InfoPrice.Format("Rp. %d",TPrice[0]); }

else if(hours >7 && hours <= 22) {

m_InfoPrice.Format("Rp. %d",TPrice[1]);

} else {

m_InfoPrice = "Halte is Currently CLOSED"; }


(53)

(54)

2/28/2009

jkt_busway

Page

 

1

ID

koridor

halte_name

node_num

node_code

node_dist

1

1 Terminal

 

Blok

 

M

1

2

0

2

1 Mesjid

 

Agung

2

2

645

3

1 Gelora

 

Bung

 

Karno

3

2

735

5

1 Polda

 

Metro

 

Jaya

4

2

650

6

1 Bendungan

 

Hilir

5

2

650

7

1 Karet

6

2

735

8

1 Setia

 

Budi

7

2

600

9

1 Dukuh

 

Atas

8

3

735

10

1 Dukuh

 

Atas

 

2

9

3

0

11

1 Tosari

10

2

900

12

1 Bunderan

 

HI

11

2

735

13

1 Sarinah

12

2

735

14

1 Bank

 

Indonesia

13

2

735

15

1 Monumen

 

Nasional

14

2

735

16

1 Harmoni

15

3

900

17

1 Sawah

 

Besar

16

2

600

18

1 Mangga

 

Besar

17

2

735

19

1 Olimo

18

2

600

20

1 Glodok

19

2

650

21

1 Stasiun

 

Kota

 

Jakarta

20

2

735

22

2 Terminal

 

Pulo

 

Gadung

1

3

0

23

2 Bermis

2

2

850

24

2 Pulomas

3

2

700

25

2 ASMI

4

2

600

26

2 Pedongkelan

5

2

700

27

2 Cempaka

 

Timur

6

2

700

28

2 RS

 

Islam

7

2

750

29

2 Cempaka

 

Tengah

8

2

600

30

2 Pasar

 

Cempaka

 

Putih

9

2

600

31

2 Rawa

 

Selatan

10

2

600

32

2 Galur

11

2

600

33

2 Senen

12

3

850

34

2 Atrium

13

2

458

35

2 RSPAD

14

2

458

36

2 Deplu

15

2

458

37

2 Gambir

 

1

16

2

458

38

2 Istiqlal

17

2

458

39

2 Juanda

18

3

458

40

2 Pecenongan

19

3

458

41

2 Harmoni

20

3

850

42

2 Gambir

 

2

21

2

1100


(55)

2/28/2009

jkt_busway

Page

 

2

general_fac

general1

general2

Blok

 

M

 

Plaza,Blok

 

M

 

Mall

Mesjid

 

Agung

 

Al

Azhar,S

Sudirman

 

Place,Stadion

 

Bursa

 

Efek

 

Jakarta,SCBD,

Pasar

 

Benhil,RS.

 

Jakarta,

Sudirman

 

Square

 

Office

 

T

Hotel

 

Sahid

 

Jaya

Wisma

 

BNI

 

46,Hotel

 

Sang

Hotel

 

The

 

Westin

Plaza

 

Indonesia,Grand

 

Hy

Sarinah,Graha

 

Mataram,

Gedung

 

Bank

 

Indonesia

Tugu

 

Monas,Taman

 

Silan

Duta

 

Merlin

Plaza

 

Gajah

 

Mada

Gajah

 

Mada

 

Square,Plaza

SMUN

 

2,Hotel

 

Mercure,Jl

Pasar

 

Glodok,Harco

 

Glod

Stasiun

 

KA

 

JakartaKota,

Terminal

 

Bus

 

Pulogadung

Korean

 

World

 

Center

 

Pul

Mega

 

Mall

 

ITC

 

Cempaka

 

Pasar

 

Sumur

 

Batu

Pasar

 

Cempaka

 

Putih

Pasar

 

Gembrong,Pasar

 

G

Stasiun

 

KA

 

Senen,Termin

Plaza

 

Atrium

Stasiun

 

KA

 

Gambir,Tugu

 

Mesjid

 

Istiqlal,Gereja

 

Kha

Duta

 

Merlin,Plaza

 

Harmo


(56)

2/28/2009

jkt_busway

Page

 

3

ID

koridor

halte_name

node_num

node_code

node_dist

44

2 Kwitang

23

2

450

45

2 Senen

24

3

450

46

3 Terminal

 

Kali

 

Deres

1

2

0

47

3 Pesakih

2

2

1100

48

3 Sumur

 

Bor

3

2

800

49

3 Rawa

 

Buaya

4

2

900

50

3 Jembatan

 

Baru

5

2

700

51

3 Dispenda

6

2

900

52

3 Jembatan

 

Gantung

7

2

1100

53

3 Taman

 

Kota

8

2

900

54

3 Indosiar

9

2

3700

55

3 Jelambar

10

2

1400

56

3 Harmoni

11

3

5000

57

3 Pecenongan

12

3

850

58

3 Juanda

13

3

700

59

3 Pasar

 

Baru

14

2

650

60

4 Terminal

 

Pulo

 

Gadung

1

3

0

61

4 Pasar

 

Pulo

 

Gadung

2

2

850

62

4 TU

 

Gas

3

2

750

63

4 Layur

4

2

800

64

4 Pemuda

 

Rawamangun

5

2

800

65

4 Velodrome

6

2

650

66

4 Sunan

 

Giri

7

2

650

67

4 UNJ

8

2

650

68

4 Pramuka

 

BPKP

9

2

650

69

4 Pramuka

 

Lia

10

2

650

70

4 Utan

 

Kayu

11

2

550

71

4 Pasar

 

Genjing

12

2

650

72

4 Matraman

13

3

850

73

4 Manggarai

14

2

950

74

4 Pasar

 

Rumput

15

2

600

75

4 Halimun

16

2

700

76

4 Dukuh

 

Atas

17

3

750

77

4 Dukuh

 

Atas

 

2

18

3

0

78

5 Ancol

1

2

0

79

5 Pademangan

2

2

900

80

5 Gunung

 

Sahari

 

Mangga

 

3

2

600

81

5 Jembatan

 

Merah

4

2

1100

82

5 Pasar

 

Baru

 

Timur

5

2

1500

83

5 Budi

 

Utomo

6

2

650

84

5 Senen

7

3

1200


(57)

2/28/2009

jkt_busway

Page

 

4

general_fac

general1

general2

Museum

 

Kebangkitan

 

Na

Terminal

 

Bus

  

Kalideres

Daan

 

Mogot

 

Plaza

Plaza

 

Cengkareng

Duta

 

Merlin,Plaza

 

Harmo

Pasar

 

Baru,Gedung

 

Kese

Terminal

 

Bus

 

Pulogadung

Pasar

 

Pulogadung

Stadion

 

Velodrome

 

Rawa

Pasar

 

Sunan

 

Giri

Pasar

 

Pramuka,Pasar

 

Bur

Pasaraya

 

Manggarai,Pasa

Museum

 

Sasmita

 

Loka

Taman

 

Impian

 

Jaya

 

Ancol

Pasar

 

Marina

 

Mangga

 

Du

Pasar

 

Pangeran

 

Jayakart

Golden

 

Truly

 

Super

 

Store

Stasiun

 

KA

 

Senen,Termin


(58)

2/28/2009

jkt_busway

Page

 

5

ID

koridor

halte_name

node_num

node_code

node_dist

86

5 Kramat

 

Sention

 

NU

9

2

600

87

5 Salemba

 

UI

10

2

850

88

5 Salemba

 

Carolus

11

2

600

89

5 Matraman

12

3

800

90

5 Tegalan

13

2

800

91

5 Slamet

 

Riyadi

14

2

850

92

5 Kebon

 

Pala

15

2

700

93

5 Pasar

 

Jatinegara

16

2

800

94

5 Kp.

 

Melayu

17

3

850

95

6 Ragunan

1

2

0

96

6 Dep

 

Pertanian

2

2

800

97

6 SMK

 

57

3

2

600

98

6 Jati

 

Padang

4

2

650

99

6 Pejaten

5

2

650

100

6 Buncit

 

Indah

6

2

600

101

6 Warung

 

Jati

7

2

800

102

6 Imigrasi

8

2

650

103

6 Duren

 

Tiga

9

2

650

104

6 Mampang

 

Prapatan

10

2

700

105

6 Kuningan

 

Timur

11

2

650

106

6 Patra

 

Kuningan

12

2

600

107

6 Depkes

13

2

650

108

6 GOR

 

Sumantri

14

2

750

109

6 Karet

 

Kuningan

15

2

600

110

6 Kuningan

 

Madya

 

AINI

16

2

700

111

6 Setia

 

Budi

 

AINI

17

2

650

112

6 Dukuh

 

Atas

 

2

18

3

0

113

6 Dukuh

 

Atas

19

3

1

114

6 Latuharhary

20

2

650

115

6 Seta

 

Budi

 

Utara

21

2

1100

116

6 Kuningan

 

Madya

 

AINI

22

2

900

117

7 Terminal

 

Kampung

 

Ram

1

2

0

118

7 Tanah

 

Merdeka

2

2

950

119

7 Fly

 

Over

 

Raya

 

Bogor

3

2

950

120

7 RS

 

Harapan

 

Bunda

4

2

950

121

7 Ps

 

Induk

 

Kramat

 

Jati

5

2

1000

122

7 Ps

 

Kramat

 

Jati

6

2

2700

123

7 PGC

 

(Cililitan)

7

2

900

124

7 BKN

8

2

950

125

7 Cawang

 

UKI

9

2

800

126

7 BNN

10

2

750


(59)

2/28/2009

jkt_busway

Page

 

6

general_fac

general1

general2

Pasar

 

Kenari

 

Baru,Pasar

 

Mall

 

Graha

 

Matraman

Plaza

 

Jatinegara,Pasar

 

Jat

Terminal

 

Bus

 

Kampung

 

Kebon

 

Binatang

 

Ragunan

Bumi

 

Perkemahan

 

Ragun

SMK

 

Negeri

 

57

 

Jakarta,ST

Mall

 

Pejaten,Kantor

 

Lura

SMK

 

Negeri

 

47

 

Jakarta,A

RS.

 

JMC,Wisma

 

Bakrie

 

Bu

STIE

 

Dharma

 

Bumi

 

Puter

SMU

 

Negeri

 

60

 

Jakarta,K

Kantor

 

Lurah

 

Duren

 

Tiga,

Kantor

 

Lurah

 

Mampang

 

Gedung

 

Infome

Kantor

 

Lurah

 

Kuningan

 

Ti Kedutaan

 

Besar Gedung

 

RNI,Bal

Apartemen

 

Puri

 

Casablan Kedutaan

 

Besar Gedung

 

Bina

 

M

Kantor

 

Lurah

 

Karet

 

Kunin Gedung

 

Graha

 

Apartemen

 

Setiabudi,Ap Gedung

 

Menar

Plaza

 

Menteng,Aparteme Museum

 

Peru

Terminal

 

Bus

 

Kampung

 

R

Makro

 

Pasar

 

Rebo

SMU

 

Teladan,Gedung

 

AK

SMU

 

Kuntum

 

Wijaya

 

Kus

Pasar

 

Induk

 

Kramat

 

Jati,S

Kramat

 

Jati

 

Indah

 

Plaza,P

Pusat

 

Grosir

 

Cililitan,SMK

SMU

 

Negeri

 

14

 

Jakarta,S

SMK

 

Bhakti

 

2,Universitas

Pegadaian,Gedung

 

Waski


(60)

2/28/2009

jkt_busway

Page

 

7

ID

koridor

halte_name

node_num

node_code

node_dist

128

7 Gelanggang

 

Remaja

12

2

800

129

7 Bidara

 

Cina

13

2

800


(61)

2/28/2009

jkt_busway

Page

 

8

general_fac

general1

general2

SMP

 

Vincentius,Hotel

 

Fid

Kantor

 

Lurah

 

Tebet

 

Timu


(62)

Bab 1 Pendahuluan

Universitas Kristen Maranatha

2

BAB I

PENDAHULUAN

Bab ini menjelaskan latar belakang Tugas Akhir, identifikasi masalah yang

akan diselesaikan, tujuan Tugas Akhir, pembatasan masalah, metodologi

pemecahan masalah, dan sistematika penulisan Tugas Akhir ini.

1.1

Latar Belakang

Kemacetan yang terjadi selama melakukan perjalanan, sering menggangu

aktifitas sehari-hari. Oleh karena itu, dibutuhkan suatu cara untuk menanggulangi

gangguan tesebut, agar mencapai suatu tempat dengan waktu yang lebih cepat,

dengan cara mencari lintasan terpendek dari tempat asal ke tempat tujuan. Maka

pada penulisan Tugas Akhir ini akan di berikan suatu solusi pencarian lintasan

terpendek dengan perhitungan jarak, dengan menggunakan Algoritma Iterative

Deepening dan Algoritma Djikstra. Sehingga didapatkan suatu solusi dengan jarak

tempuh terpendek dari asal ke tujuan.

Pada Tugas Akhir ini dilakukan pengembangan dan realisasi simulasi

pencarian rute terpendek transportasi Trans Jakarta Indonesia (Bus Way) dengan

menggunakan perhitungan Algoritma Iterative Deepening dan Djikstra.

1.2 Identifikasi Masalah

Bagaimana membuat suatu simulasi pencarian rute terpendek transportasi

Bus Trans Jakarta Indonesia dengan menggunakan metode Algoritma Iterative

Deepening dan Algoritma Djikstra?

1.3 Tujuan

Tujuan dari Tugas Akhir dengan topik ini adalah :

1.

Membuat suatu program simulasi pencarian rute terpendek, dengan

Algoritma Iterative Deepening dan Algoritma Djikstra.


(63)

Bab 1 Pendahuluan

Universitas Kristen Maranatha

3

2.

Memberikan suatu kepastian tentang jalur transportasi yang akan dipilih

untuk mencapai suatu tujuan dengan jalur terpendek, untuk kasus

transportasi Trans Jakarta Indonesia (Bus Way).

1.4 Pembatasan Masalah

Pembatasan masalah dari Tugas Akhir ini adalah :

1.

Dalam pengerjaan Tugas Akhir tidak dibahas waktu dan kecepatan

transportasi dari tempat asal ke tempat tujuan.

2.

Data yang digunakan berasal dari informasi yang merujuk ke kondisi

sebenarnya.

3.

Jumlah node atau halte persinggahan pada pencarian Algoritma Iterative

Deepening adalah jumlah transfer halte.

4.

Jumlah kedalaman pencarian Algoritma Iterative Deepening dibatasi pada

level 4.

5.

Menggunakan Bahasa Pemograman C/C++.

1.5 Metodologi Pemecahan Masalah

Metodologi yang digunakan dalam pengerjaan tugas akhir ini adalah :

1.

Mempelajari literatur yang ada dan relevan.

2.

Analisis kebutuhan sistem, yaitu penentuan kebutuhan sistem, batasan

sistem, pengumpulan data, serta menentukan perangkat lunak yang akan

digunakan.

3.

Rancangan, yaitu tahap penuangan hasil analisis yang dihasilkan pada

tahap sebelumnya kedalam bentuk kerangka aplikasi.

4.

Implementasi, yaitu tahap penuangan rancangan kedalam bahasa

pemrograman sehingga menjadi suatu yang fungsional.

5.

Pengujian aplikasi, yaitu dengan melihat apakah Algoritma Iterative

Deepening dan Algoritma Djikstra dapat digunakan untuk mengoptimasi

jalur terdekat untuk sarana transportasi dari tempat asal ke tempat tujuan,

melakukan analisis terhadap hasil tersebut, dan membuat suatu

kesimpulan.


(64)

Bab 1 Pendahuluan

Universitas Kristen Maranatha

4

1.6 Sistematika Penulisan

Laporan Tugas Akhir ini dibagi menjadi lima bab utama yang akan disusun

dengan sistematik sebagai berikut :

BAB I PENDAHULUAN

Berisi latar belakang Tugas Akhir, identifikasi masalah, tujuan dari Tugas Akhir,

pembatasan masalah, metodologi pemecahan masalah, dan sistematika penulisan

laporan Tugas Akhir ini.

BAB II LANDASAN TEORI

Bab ini memberikan pembahasan singkat mengenai teori graf, metode pencarian

pada suatu graf, Algoritma Iterative Deepening dan Algoritma Djikstra serta

bahasa program C / C++.

BAB III ANALISIS DAN PERANCANGAN

Pada bab ini akan dibahas mengenai perancangan perngkat lunak (software)

simulasi pencarian rute terpendek.

BAB IV PENGUJIAN DAN DATA PENGAMATAN

Pada bab ini akan menampilkan dan menganalisa hasil pengujian terhadap

perangkat lunak (software) yang dibuat.

BAB V KESIMPULAN DAN SARAN

Bab ini memaparkan kesimpulan dari perangkat lunak yang telah dibuat dan

memberikan saran mengenai hal-hal yang mungkin harus di perbaiki pada

perangkat lunak tersebut untuk mendapatkan hasil yang lebih baik.


(65)

Bab V Kesimpulan dan Saran

60

Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan pengujian dan analisis terhadap program simulasi yang telah

dibuat, maka dapat disimpulkan beberapa hal :

Program simulasi pencarian rute terpendek dengan menggunakan

Algoritma Iterartive Deepening dan Dijkstra telah selesai dirancang

dan direalisasikan.

Program simulasi ini dapat memberikan solusi untuk pencarian rute

terpendek dengan perhitungan jarak.

Dari pengujian keseluruhan program dimana diwakili 15 sampel

yang telah dilakukan dengan berbagai variasi perjalanan, seperti

pada tabel uji, solusi pencarian rute terpendek adalah benar.

Pengujian simulasi program dengan perhitungan mendapatkan

hasil yang sama dan benar.

5.2 Saran

Ada beberapa saran yang perlu diketengahkan sebagai bahan perbaikan

dari masalah ini :

Pengembangan dari rute perjalanan Trans Jakarta dapat

ditambahkan lagi.

Program simulasi ini diimplementasikan dengan graf animasi

perjalanan yang sesuai dengan keadaan sebenarnya.

Dilakukan pembenahan dengan lebih jelas pada pengelompokan

Halte Transfer yang dilengkapi fasilitas Skywalk nya.


(66)

Universitas Kristen Maranatha

DAFTAR PUSTAKA

1. Darmawan, Aan dan Theresia, Novie. Diktat Pengantar Sistem Cerdas.

Teknik Elektro. UKM. 2006.

2. Munir, Rinaldi, “Diktat Kuliah IF2251 Strategi Algoritmik “. Program Studi

Teknik Informatika, STEI ITB 2007.

3. Prijono, Agus dan Marcus, Teddy. Struktur Data. Informatika. Bandung

2006.

4. Raharjo, Budi. Pemograman C ++. Informatika Bandung 2007.

5. Russel, Stuart J and Norvig, Peter. Artificial Intelegence ( Teknik dan

Aplikasi ). Graha Ilmu. Yogyakarta 2003.

6. en. Wikipedia.org/wiki/Dijkstra_algorithm.htmC.Y, Tanggal akses : 22

September 2007, pukul 14.23Wib.

7.

http://www.rutebusway.com/

. Tanggal akses : 14 April 2007, pukul

10.23Wib.

8.

http://id.wikipedia.org/wiki/Busway

. Tanggal akses : 14 April 2007, pukul

10.11Wib.

9.

http://us.mc355.mail.yahoo.com/mc/welcome?.rand=8unb0nupehsq6

. Tanggal

akses 1 Agustus 2007.

10. www://google.com/teori graf.pdf. Tanggal akses 4 Agustus 2008,

pukul 21.15 Wib.


(1)

Kantor Lurah Tebet Timu


(2)

Bab 1 Pendahuluan 2

BAB I

PENDAHULUAN

Bab ini menjelaskan latar belakang Tugas Akhir, identifikasi masalah yang akan diselesaikan, tujuan Tugas Akhir, pembatasan masalah, metodologi pemecahan masalah, dan sistematika penulisan Tugas Akhir ini.

1.1

Latar Belakang

Kemacetan yang terjadi selama melakukan perjalanan, sering menggangu aktifitas sehari-hari. Oleh karena itu, dibutuhkan suatu cara untuk menanggulangi gangguan tesebut, agar mencapai suatu tempat dengan waktu yang lebih cepat, dengan cara mencari lintasan terpendek dari tempat asal ke tempat tujuan. Maka pada penulisan Tugas Akhir ini akan di berikan suatu solusi pencarian lintasan terpendek dengan perhitungan jarak, dengan menggunakan Algoritma Iterative Deepening dan Algoritma Djikstra. Sehingga didapatkan suatu solusi dengan jarak tempuh terpendek dari asal ke tujuan.

Pada Tugas Akhir ini dilakukan pengembangan dan realisasi simulasi pencarian rute terpendek transportasi Trans Jakarta Indonesia (Bus Way) dengan menggunakan perhitungan Algoritma Iterative Deepening dan Djikstra.

1.2 Identifikasi Masalah

Bagaimana membuat suatu simulasi pencarian rute terpendek transportasi Bus Trans Jakarta Indonesia dengan menggunakan metode Algoritma Iterative Deepening dan Algoritma Djikstra?

1.3 Tujuan

Tujuan dari Tugas Akhir dengan topik ini adalah :

1. Membuat suatu program simulasi pencarian rute terpendek, dengan Algoritma Iterative Deepening dan Algoritma Djikstra.


(3)

2. Memberikan suatu kepastian tentang jalur transportasi yang akan dipilih untuk mencapai suatu tujuan dengan jalur terpendek, untuk kasus transportasi Trans Jakarta Indonesia (Bus Way).

1.4 Pembatasan Masalah

Pembatasan masalah dari Tugas Akhir ini adalah :

1. Dalam pengerjaan Tugas Akhir tidak dibahas waktu dan kecepatan transportasi dari tempat asal ke tempat tujuan.

2. Data yang digunakan berasal dari informasi yang merujuk ke kondisi sebenarnya.

3. Jumlah node atau halte persinggahan pada pencarian Algoritma Iterative Deepening adalah jumlah transfer halte.

4. Jumlah kedalaman pencarian Algoritma Iterative Deepening dibatasi pada level 4.

5. Menggunakan Bahasa Pemograman C/C++.

1.5 Metodologi Pemecahan Masalah

Metodologi yang digunakan dalam pengerjaan tugas akhir ini adalah : 1. Mempelajari literatur yang ada dan relevan.

2. Analisis kebutuhan sistem, yaitu penentuan kebutuhan sistem, batasan sistem, pengumpulan data, serta menentukan perangkat lunak yang akan digunakan.

3. Rancangan, yaitu tahap penuangan hasil analisis yang dihasilkan pada tahap sebelumnya kedalam bentuk kerangka aplikasi.

4. Implementasi, yaitu tahap penuangan rancangan kedalam bahasa pemrograman sehingga menjadi suatu yang fungsional.

5. Pengujian aplikasi, yaitu dengan melihat apakah Algoritma Iterative Deepening dan Algoritma Djikstra dapat digunakan untuk mengoptimasi jalur terdekat untuk sarana transportasi dari tempat asal ke tempat tujuan, melakukan analisis terhadap hasil tersebut, dan membuat suatu


(4)

Bab 1 Pendahuluan 4

1.6 Sistematika Penulisan

Laporan Tugas Akhir ini dibagi menjadi lima bab utama yang akan disusun dengan sistematik sebagai berikut :

BAB I PENDAHULUAN

Berisi latar belakang Tugas Akhir, identifikasi masalah, tujuan dari Tugas Akhir, pembatasan masalah, metodologi pemecahan masalah, dan sistematika penulisan laporan Tugas Akhir ini.

BAB II LANDASAN TEORI

Bab ini memberikan pembahasan singkat mengenai teori graf, metode pencarian pada suatu graf, Algoritma Iterative Deepening dan Algoritma Djikstra serta bahasa program C / C++.

BAB III ANALISIS DAN PERANCANGAN

Pada bab ini akan dibahas mengenai perancangan perngkat lunak (software) simulasi pencarian rute terpendek.

BAB IV PENGUJIAN DAN DATA PENGAMATAN

Pada bab ini akan menampilkan dan menganalisa hasil pengujian terhadap perangkat lunak (software) yang dibuat.

BAB V KESIMPULAN DAN SARAN

Bab ini memaparkan kesimpulan dari perangkat lunak yang telah dibuat dan memberikan saran mengenai hal-hal yang mungkin harus di perbaiki pada perangkat lunak tersebut untuk mendapatkan hasil yang lebih baik.


(5)

BAB V

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan pengujian dan analisis terhadap program simulasi yang telah dibuat, maka dapat disimpulkan beberapa hal :

• Program simulasi pencarian rute terpendek dengan menggunakan Algoritma Iterartive Deepening dan Dijkstra telah selesai dirancang dan direalisasikan.

• Program simulasi ini dapat memberikan solusi untuk pencarian rute terpendek dengan perhitungan jarak.

• Dari pengujian keseluruhan program dimana diwakili 15 sampel yang telah dilakukan dengan berbagai variasi perjalanan, seperti pada tabel uji, solusi pencarian rute terpendek adalah benar.

• Pengujian simulasi program dengan perhitungan mendapatkan hasil yang sama dan benar.

5.2 Saran

Ada beberapa saran yang perlu diketengahkan sebagai bahan perbaikan dari masalah ini :

• Pengembangan dari rute perjalanan Trans Jakarta dapat ditambahkan lagi.

• Program simulasi ini diimplementasikan dengan graf animasi perjalanan yang sesuai dengan keadaan sebenarnya.

• Dilakukan pembenahan dengan lebih jelas pada pengelompokan Halte Transfer yang dilengkapi fasilitas Skywalk nya.


(6)

DAFTAR PUSTAKA

1. Darmawan, Aan dan Theresia, Novie. Diktat Pengantar Sistem Cerdas. Teknik Elektro. UKM. 2006.

2. Munir, Rinaldi, “Diktat Kuliah IF2251 Strategi Algoritmik “. Program Studi Teknik Informatika, STEI ITB 2007.

3. Prijono, Agus dan Marcus, Teddy. Struktur Data. Informatika. Bandung 2006.

4. Raharjo, Budi. Pemograman C ++. Informatika Bandung 2007.

5. Russel, Stuart J and Norvig, Peter. Artificial Intelegence ( Teknik dan Aplikasi ). Graha Ilmu. Yogyakarta 2003.

6. en. Wikipedia.org/wiki/Dijkstra_algorithm.htmC.Y, Tanggal akses : 22 September 2007, pukul 14.23Wib.

7. http://www.rutebusway.com/. Tanggal akses : 14 April 2007, pukul 10.23Wib.

8. http://id.wikipedia.org/wiki/Busway. Tanggal akses : 14 April 2007, pukul 10.11Wib.

9. http://us.mc355.mail.yahoo.com/mc/welcome?.rand=8unb0nupehsq6. Tanggal akses 1 Agustus 2007.

10. www://google.com/teori graf.pdf. Tanggal akses 4 Agustus 2008, pukul 21.15 Wib.