• Tidak ada hasil yang ditemukan

Bab II. Landasan Teori

II.7. SAMCRA (Self Adapting Multiple Constraints Routing Algorithm)

memecahkan masalah optimasi multi constraints, SAMCRA didasarkan pada empat konsep, yaitu: (1) definisi non-linear panjang jalur l(P), (2) k-shortest paths, (3) non-dominated paths, (4) look-ahead.

1. Definisi non-Linear Panjang Jalur l(P)

Bobot vektor jalur didefinisikan dalam penjumlahan vektor. Seperti pada aljabar linear, panjang vektor dibutuhkan, dimana bobot vektor didefinisikan dalam penjumlahan vektor. Definisi panjang jalur l(P) dibutuhkan untuk dapat membandingkan jalur ketika komponen bobot pada link memiliki ukuran mutu layanan yang berbeda pada spesifik unit. Berikut merupakan rumus panjang jalur :

l(P) = m i 1 diwi(P) = d.w(P) (2.1) Keterangan (2.1): wi = bobot ke i l = panjang P = jalur di = i L 1

Dalam konsep ini, masalah m-parameter ditransformasikan ke dalam satu parameter sehingga dapat menggunakan pencarian jalur terpendek

Dijkstra. Algoritma Dijkstra digunakan untuk mengurangi graf yang akan dikembalikan sebagai jalur terpendek P yang meminimalkan panjang jalur l(P) yang didefinisikan oleh (2.1).

2. k-Shortest Paths

Algoritma k-shortest path mirip dengan algoritma Dijkstra. Penyimpanan pada setiap vertex lanjutan hanya merupakan loncatan dari vertex sebelumnya dan panjang dari jalur terpendek dari sumber ke vertex lanjutan, kita dapat menyimpan jalur terpendek pertama, kedua, ketiga, hingga k jalur terpendek bersama dengan panjang yang sesuai. Ini memungkinkan untuk tidak menyimpan sama sekali k jalur pada sebuah vertex. Pada kasus dimana nilai k tidak terbatas, algoritma k jalur terpendek mengembalikan semua kemungkinan jalur yang diminta pada panjang antara sumber dan tujuan. Pada kasus tersebut selalu ada kemungkinan bahwa end-to-end jalur terpendek tidak dapat ditemukan. SAMCRA memilih „self-adaptively’ yang dibutuhkan nilai dari knpada setiap vertex n dari graf G, yang kontras dengan algoritma k jalur terpendek dimana pada setiap vertex n nilai sama dari k dialokasikan dan oleh karena itu tempat penyimpanan yang sama dalam antrian dari jalur per vertex. Didefinisikan sebagai kSAMCRA= maxn G(kn) atau disebut juga sebagai ukuran kompleksitas SAMCRA.

3. Dominated paths

Dominated path pada dasarnya adalah teknik pengurangan tempat secara drastis yang dapat meningkatkan efisiensi proses perhitungan.

”Kekuasaan jalur” dapat dianggap sebagai relaksasi multidimensional.

Relaksasi merupakan properti kunci dari satu parameter algoritma jalur terpendek seperti Dijkstra dan Bellman-Ford.

Definisi non-dominated

Dibatasi m = 2 dimensi, diasumsikan dua jalur P1 dan P2 dari vertex sumber ke vertex lanjutan, setiap dengan bobot vektor jalur (w1(P1),w2(P1)) = (x1,y1) dan (w1(P2), w2(P2)) = (x2,y2)), pada gambar 2.4 ditunjukan dua skenario yang mungkin dari dua jalur.

Gambar 2.4 Dominated paths : skenario (a) dan (b)

Pada gambar 2.4, dalam skenario (a), P1 mendominasi P2, tapi dalam skenario (b) P1 dan P2 tidak saling mendominasi satu sama lain. Pada skenario (a), P1 lebih pendek daripada P2 dan w1(P1) < w1(P2) untuk semua komponen 1≤ i ≤ m. Pada skenario (b) kedua jalur mempunyai sumbu absis dan ordinat yang berseberangan :

w1(P1) < w2(P2) untuk beberapa indikasi i, tapi wj(P1) > wj(P2) untuk setidak-tidaknya satu indeks j.

Sebuah jalur P disebut non-dominated jika tidak ada jalur P untuk wi(P‟) ≤ wi(P) untuk semua bobot komponen link i kecuali untuk setidak-tidaknya satu j untuk wj(P‟) < wj(P).

4. Look- Ahead

Di samping jalur dominasi, konsep look-ahead dapat dilihat sebagai penambahan mekanisme untuk mengurangi tempat pencarian jalur yang mungkin. Konsep look-ahead membatasi kelompok jalur yang mungkin dengan menggunakan informasi jalur yang tersisa untuk mencapai vertex tujuan. Konsep look ahead mengajukan untuk menghitung jalur terpendek akar pohon pada tujuan untuk setiap vertex n dalam graf G untuk setiap m link yang terpisah. Prinsip dasar yang paling penting dari look-ahead adalah untuk menyediakan setiap vertex dengan pasti, batas bawah dari w1(Pn→B;i) untuk setiap individu i komponen bobot link.

Meta-Code SAMCRA INITIALIZE(G, m, A, B) 1 for each v {N} 2 Counter[v]← 0 3 maxlength ← 1.0 4 for i = 1,….,m 5 DIJKSTRA(G,A,B,i) → bi(n), P i B A ; * 6 if l(P i B A ; * ) < maxlength 7 maxlength ← l(P i B A ; * ) 8 queue Q ← Ø 9 counter[A] ← counter[A] + 1

10 INSERT(Q, A, counter[A], NIL, l(b(A)

))

Gambar 2.5 Meta-Code Fase Inisialisasi

Pada fase inisialisasi (gambar 2.5) dibutuhkan algoritma dan perhitungan informasi look-ahead. Pada baris 1 dan 2, angka pada jalur penyimpanan (counter) setiap vertex diset menjadi 0. Maxlength menunjuk panjang maksimum yang mungkin dimiliki sub jalur. Jalur dengan length > maxlength dapat dihapus, maxlength diset menjadi 1,0 pada baris 3. Pada baris 5, batas bawah look-ahead dihitung dengan fungsi DIJKSTRA. Untuk setiap jalur terpendek m, baris 6 menghitung panjang dan mengecek mana yang nilai lengthnya lebih dibanding maxlength. Jika ada nilai panjang yang lebih rendah, pada baris 7, maxlength diupdate dengan nilai baru yang lebih rendah tersebut. SAMCRA dimulai dengan sumber A, yang dimasukkan dalam antrian (pada baris 10).

FEASIBILITY(G, u, i, v, counter, d, w, maxlength) 1 dominated ← 0 2 for j = 1,…..,counter[v] 3 if((d[u[i]] w(u v) ) - d[v[j]] 0 OR l(d[v[j]] ) > maxlength) 4 v[j] ← BLACK 5 else if ( d[v[j]] - d[u[i]] w(u v) ≥ 0 6 dominated ← 1 7 return dominated

Gambar 2.6 Meta-Code Feasibility

Pada tahap FEASIBILITY (gambar 2.6), dilakukan pengecekan jalur terdominasi satu sama lain atau memaksa nilai maxlength. Sub jalur u[i] menunjuk i jalur yang disimpan pada vertex u. FEASIBILITY selanjutnya jalur i pada vertex u terhadap vertex tetangga v, dimana counter[v] vertex sudah disimpan. Untuk setiap counter[v] sub jalur v[j] disimpan pada vertex v (pada baris 2-3). Jika semua komponen dari vektor yang berbeda tidak negatif, kemudian sub jalur v[j] memaksa nilai maxlength maka tandai dengan warna hitam pada baris 4. Jalur yang telah ditandai dengan warna hitam menjadi nilai lama dan mungkin dapat ditempatkan kembali dengan jalur yang baru. Baris 5 mengecek jika jalur selanjutnya merupakan dirinya sendiri terdominasi oleh sub jalur v[j]. Jika

UPDATEQUEUE(Q, u, i, j, d, w, , counter[v], predicted_length) 1 for j = 1,…….,counter[v] 2 if (v[j] = BLACK AND l( d[v[j]] + b(v) ) > predicted_length 3 DECREASE-KEY(Q, v, j, predicted_length) 4 d[v[j]] d[u[i]] w(u v) 5 [ v[j]] ← u[i] 6 stop 7 counter[v] ← counter[v] + 1

8 INSERT(Q, v, counter[v], predicted_length)

9 d

[v[counter[v]]] ← (d[u[i]] w(u v) ) 10 [v[counter[v]]] ← u[i]

Gambar 2.7 Meta-Code Update Antrian

Tahap terakhir disebut dengan UPDATEQUEUE atau update antrian. UPDATEQUEUE mempunyai tugas untuk mengupdate antrian Q dengan jalur baru, menamai jalur selanjutnya dari u[i] ke vertex v. Baris 1-2 mengecek jika ada jalur hitam dengan predicted_length dibanding jalur baru selanjutnya. Jika ada, jalur baru ini akan ditempatkan pada jalur hitam tersebut pada baris 3-5. Baris 3 mengurangi predicted_length dari sub jalur v[j] dengan predicted yang lebih kecil dari jalur selanjutnya dan mengupdate bobot vektor jalur (pada baris 4) dan predessor list (pada baris 5). Jika antrian telah diupdate melalui DECREASE-KEY pada baris 3-5, UPDATEQUEUE berhenti pada baris 6 dan kembali pada algoritma utama. Bagaimanapun, jika baris 1-6 gagal dan tidak ada jalur hitam yang dapat direplace, kemudian jalur selanjutnya telah dimasukkan dalam antrian

(baris 7-10). Bukan panjang asli yang disimpan, tapi ini merupakan predicted_length.

Algoritma utama pada gambar 2.8 dimulai dengan mengeksekusi fase inisialisasi (baris 1). Antrian Q tidak kosong, fungsi extract-min pada baris 3 memilih length minimum jalur pada antrian Q dan mengembalikan u[i], jalur i PA→u disimpan dalam antrian pada vertex u.

SAMCRA(G, m, A, B, L)

1 INITIALIZE(G, m, A, B) → b 2 while(Q ≠ Ø)

3 EXTRACT-MIN(Q) → u[i] 4 u[i] ← GREY

5 if( u = B)

6 STOP → return path

7 else

8 for each v Adj [u] \ { [u[i]], A}

9 FEASIBILITY(G, u, i, v, counter, d, w, maxlength)

→ dominated 10 predicted_length ← l( d[u[i]] w(u v) + b(v) ) 11 if (predicted_length < maxlength AND dominated ≠ 1 ) 12 UPDATEQUEUE(Q, u, i, j, d, w, , counter[v], predicted_length)

13 if(v = B AND predicted_length < maxlength)

14 maxlength ← predicted_length

Dengan angka tersebut dan predesessor list , jalur selanjutnya ditandai dengan warna abu-abu pada baris 4. jika vertex u, berkoresponden ke jalur selanjutnya u[i], jumlah tujuan B, jalur terpendek dikembalikan. Jika u B, pembacaan prosedur dikenali pada baris 8. Baris 8 menjelaskan bagaimana i jalur sampai vertex u diperpanjang terhadap vertex tetangga v, kecuali untuk asal vertex sebelumnya. Vertex sebelumnya pada jalur u[i] disimpan pada predecessor list . Pengembalian vertex sebelumnya yang dapat menyebabkan loop, harus dapat dihindari. Sejak bobot link non-negatif, jalur yang mempunyai loop selalu didominasi oleh jalur tanpa dominasi. Baris 9 meminta tahap FEASIBILITY untuk mengecek dimana seluruh jalur disimpan pada vertex v yang tidak terdominasi oleh jalur yang disimpan sebelumnya pada vertex v. Pada baris 10, length dari prediksi end-to-end bobot vektor jalur dihitung. Baris 11 mengetes jika jalur baru selanjutnya tidak non-dominated dan predicted_length ≤ maxlength.

Jika kasus ini dapat disimpan dan antriannya harus bisa diupdate (baris 12). Hapus jalur yang predicted_lengthnya > maxlength adalah pengurangan tempat pencarian dari konsep look-ahead. Terakhir, maxlength dapat diupdate pada baris 13-14.

Dokumen terkait