III. METODE PENELITIAN
3.3. Alur Penelitian
Langkah-langkah yang digunakan dalam penelitian ini adalah : a) Mengumpulkan bahan literatur serta studi kepustakaan. b) Membuat program untuk memanggil data.
Data diperoleh dari penelitian yang telah dilakukan oleh Wamiliana dkk. (2005). Data tersebut merupakan data yang di-generate secara acak dengan distribusi uniform.
Data terbagi menjadi 10 folder dengan masing-masing folder berisi 30 file berekstensi .dat. Berikut data yang telah dimasukan kedalam GNU Octave :
Gambar 11. Tampilan data folder 10-vertex file 1.dat di Octave
Program pada editor GNU Octave
29
c) Membuat program GNU Octave yang dapat menghitung banyaknya titik yang dihasilkan oleh suatu data sisi yang diperoleh
Graf yang akan diteliti merupakan graf terhubung sederhana, yang mana setiap titik terhubung dengan titik lainnya oleh satu buah sisi. Berikut tabel hubungan antara banyak titik dan sisi pada suatu graf terhubung sederhana.
Tabel 3. Tabel banyak titik dan banyak sisi pada graf terhubung sederhana
Banyak titik
Banyak sisi Banyak
titik Banyak sisi 1 0 8 28 2 1 9 36 3 3 10 45 4 6 20 190 5 10 30 435 6 15 40 780 7 21 50 1125
Jika diperhatikan banyak sisi yang terbentuk pada tabel 3 membentuk suatu pola barisan. Sehingga dapat diperoleh rumus suku ke-Un dari pola tersebut adalah sebagai berikut:
𝑈𝑛 = 𝑛(𝑛−1)
2 (3.1)
2𝑈𝑛 = 𝑛2− 𝑛 (3.2)
Dengan menggunakan Persamaan 2.3 bisa ditemukan banyak titik dengan mensubstitusikan Persamaan 3.2. sehingga diperoleh persamaan baru yaitu :
𝑛 =1+√1+8𝑈𝑛
30
Dari Persamaan 3.3 dapat diperoleh banyak titik (banyak titik selalu bernilai positif).
Misal banyak data pada data 1 dalam folder 10-vertex adalah 45, maka program ini akan menghitung bahwa banyak titiknya adalah 10.
Program pada GNU Octave
function titik = cek_titik(matriks) bykisi=length(matriks); %bykisi=Un c=2*bykisi;
n=(1+sqrt(1+(4*c)))/2; titik=n;
end
d) Membuat program yang dapat memberikan nilai X dan Y secara otomatis pada setiap data. Dengan X adalah titik awal dan Y adalah titik yang dituju. Misal pada data 1, folder 10 vertek, terdapat 10 titik, maka program ini akan memunculkan secara otomatis sebagai berikut
X = 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 6 6 6 6 7 7 7 8 8 9 Y = 2 3 4 5 6 7 8 9 10 3 4 5 6 7 8 9 10 4 5 6 7 8 9 10 5 6 7 8 9 10 6 7 8 9 10 7 8 9 10 8 9 10 9 10 10
Program pada GNU Octave
function [X Y]=inputanya(n) j=1;
31
while j <= n && n > 2 %perulangan akan berjalan jika n lebih dari 2 r=n-j; k=j*ones(1,r); j=j+1; cr=length(X); rk=cr+1; dk=length(k); X(1,rk:cr+dk)=k; if j==n break end end Y=[]; p=1; while p <= n && n > 2 yh=p+1; if yh > n break end h=yh:n; p=p+1; iu=length(Y); yu=iu+1; tu=length(h); Y(1,yu:iu+tu)=h; end
e) Membuat program untuk memasukan bobot pada setiap titik X dan Y. Sehingga di hasilkan matrik sebagai berikut.
Data =
Gambar 12. Hasil menggabungkan titik X dan Y dengan bobotnya
Program pada GNU Octave
32
f) Membuat matriks data menjadi matriks persegi dan segitiga atas RO =
Gambar 13. Bentuk matriks persegi dari data folder 10-vertex file 1.dat
Program pada GNU Octave
function stgb = sgitiga(disatukan) [M, N]=size(disatukan); while M < N disatukan(N,:)=0; M=M+1; end while M > N disatukan(:,M)=0; N=N+1; end stgb=tril(disatukan + disatukan'); end
g) Membuat program untuk merubah matriks RO menjadi matriks tetangga Perubahan ini dilakukan agar entri entri pada matriks 𝑅𝑂𝑖𝑗 = 𝑅𝑂𝑗𝑖 dengan
33
Gambar 14. Matriks Tetangga data 1 pada folder 10-vertex Program pada GNU Octave
function Y =matrikstetangga(RO) [M N]=size(RO); Y=full(RO); for r=1:M for j=1:N Y(r,j)=Y(j,r); end end end
h) Membuat program Algoritma Prim.
Program ini berjalan dengan membuat matriks kosong (T) berukuran M x N sesuai dengan ukuran yang dibentuk dari matriks tetangga dan v1 sebagai v pada Algoritma Prim. Matriks T berfungsi sebagai matrik yang menerima entri-entri yang telah diproses, yang nantinya akan menjadi matriks MST. v1 menginisialkan setiap kolom pada matriks, jika v1 atau titik awal tidak diberi nilai maka akan otomatis bernilai 1. Artinya Algoritma Prim yang di jalankan dimulai dari kolom 1 sebagai titik awalnya.
34
Gambar 15. Hasil nilai T dan V Algoritma Prim
Program pada GNU Octave
function [T V1]=MSTjadi(DG) V1 = [1]; V2 = 2:length(DG); T = zeros(size(DG)); od = max(max(DG)) ; while (~isempty(V2)) min = od; for i=1:length(V1) for j=1:length(V2) if (DG(V2(j),V1(i))>0 && DG(V2(j),V1(i))<min) min = DG(V2(j),V1(i)); u = V1(i); v = V2(j); end end end T(v,u) = min; V1 = [V1 v]; V2(V2==v)=[]; end end
i) Membuat program DCMST(Degree Constrained Minimum Spanning Tree) dengan algoritma Modified Prim.
Pada tahap ini sama saja dengan program MST. Namun penulis memasukkan perlakuan atau kendala bahwa setiap titik hanya boleh terhubung paling banyak 3 titik (degree ≤ 3).
35
j) Membuat program MPDCMST (Multi Period Degree Constrained Minimum Spanning Tree) dengan Algoritma Modified Prim
Pada Tahap ini, penyelesaian MST dilakukan dengan memberikan kendala batasan degree ≤ 3 dan membagi proses instalasi menjadi 3 tahap. Contoh :
Gambar 16. Contoh graf dengan 10 titik
Pada permasalahan MPDCMST tersebut diberikan degree ≤ 3 dan tahap sebanyak 3 kali. v1 dianggap sebagai titik sumber. |HVTk| adalah himpunan titik-titik yang harus di-install pada tahap ke k atau sebelumnya. |HVTk| diinisiasi sebagai berikut :
Tahap 1 : titik v2 dan v4. Tahap 2 : titik v5. Tahap 3 : titik v10.
Tahap 1
Pada tahap ini titik yang wajib di instal adalah v2 dan v4. Sesuai dengan Algoritma Prim dengan DCMST, diperoleh titik terdekat dari sumber yaitu v2, v3 dan v5. Diperiksa ternyata pada tahap 1, |HVTk| = v2 dan v4 ini berarti
36
titik v4 belum diinstall, maka v5 diganti dengan v4. Sehingga diperoleh graf sebagai berikut :
Gambar 17. Graf hasil MPDCMST tahap 1
Tahap 2
Pada tahap ini |HVTk| = v5. Dilakukan pengecekan kembali dengan menggunakan Algoritma Prim dan DCMST. Diperoleh titik yang diinstall adalah v2, v3, v4, v6, v5, dan v7. Dapat dilihat bahwa v5 telah diinstall pada tahap ini, maka tahap ini selesai dan di peroleh graf sebagai berikut :
37
Tahap 3
Pada tahap ini |HVTk| = v10. Dilakukan pemilihan sisi terdekat menggunakan Algoritma Prim dan DCMST sehingga di peroleh titik yang telah diinstall yaitu v2, v3, v4, v6, v5, v7, v10, v8, v9. Dapat dilihat bahwa vertex v10 telah diinstall pada tahap ini. Maka tahap ini selesai dan diperoleh graf sebagai berikut :
Gambar 19. Graf hasil tahap 3
Karena seluruh vertex telah terinstall maka proses ini selesai.
k) Mengimplementasi dengan data yang telah dibangkitkan
V. KESIMPULAN
Berdasarkan penelitian yang telah dilakukan didapat kesimpulan sebagai berikut: 1. Nilai optimal MST merupakan lower bound dari DCMST dan nilai optimal
DCMST merupakan lower bound untuk MDCMST.
2. Hasil rata-rata bobot disetiap vertex yang diuji dengan Algoritma Modified Prim lebih tinggi dari hasil Algoritma Prim. Hal ini terjadi karena pada Algoritma Modified Prim terdapat kendala yang mempengaruhi besar bobot.
3. Pada permasalahan MPDCMST, waktu penyelesaian Algoritma Modified Prim terbaik diperoleh menggunakan Algoritma MPDCMST_awal.
4. Pada permasalahan MPDCMST, solusi Algoritma Modified Prim terbaik diperoleh menggunakan Algoritma MPDCMST_kick.
5. Dalam penyelesaian permasalahan MPDCMST dengan GNU Octave, solusi hasil dan waktu penyelesaian Algoritma Modified Prim yang terbaik diperoleh menggunakan Algoritma MPDCMST_akhir.
1