ACTIVITY NETWORKS Activity On Vertex (AOV) Networks Suatu proyek dapat dibagi menjadi beberapa sub proyek yang disebut aktivitas. Aktivitas-aktivitas ini harus dilaksanakan terlebih dahulu supaya suatu proyek dapat dituntaskan. Program S1 dapat kita dijadikan contoh. Supaya kita dapat meraih gelar Sarjana Teknik Informatika, kita harus lulus dari sekian banyak mata kuliah. Semua matakuliah wajib harus diikuti, beberapa diantaranya mempunyai prasyarat bahwa sebelumnya kita pernah mengambil matakuliah tertentu. Tabel 1 di bawah ini memuat daftar matakuliah dan prasyaratnya masing-masing. Kode Matakuliah C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Nama Matakuliah Programming I Matematika Diskrit Struktur Data Kalkulus I Kalkullus II Aljabar Linear Analisa Algoritma Bahasa Asembler Sistem Operasi Bahasa Pemrograman Desain Kompailer Intelegensi Buatan Terori Komputasi Algoritma Paralel Analisa Numerik Prasyarat C1, C2 C4 C5 C3, C6 C3 C7, C8 C7 C10 C7 C7 C13 C5 Tabel 1 Daftar mata kuliah Teknik Informatika di Universitas Bayangan Matakuliah C3 dapat diambil jika mahasiswa pernah mengikuti matakuliah C1 dan C2 sebelumnya. Sedangkan matakuliah C2 dapat langsung diambil tanpa prasyarat apapun. Prasyarat ini menunjukkan hubungan prioritas (precedence) antar matakuliah, yaitu matakuliah mana yang harus didahulukan sebelum matakuliah lainnya. Hubungan prioritas ini dapat digambarkan dengan jelas oleh directed graph. Kode Matakuliah sebagai verteks, prasyarat (hubungan prioritas) ditunjukkan dengan edge. Notasi <i, j> untuk edge yang berasal dari verteks i menuju ke verteks j, menyatakan matakuliah i menjadi prasyarat matakuliah jj. Berarti ii merupakan immediate predecessor jj, demikian sebaliknya j immediate successor dari i. Hubungan prioritas antara matakuliah pada tabel 1 dapat digambarkan oleh directed graph pada gambar 1 di halaman berikut. Directed graph itu disebut Network Activity On Vertex (AOV). 1 C9 C8 C1 C3 C10 C11 C7 C2 C12 C13 C6 C5 C4 C14 C15 Gambar 1 Network AOV sebagai representasi daftar matakuliah pada tabel 1 Topological Order Berdasarkan network AOV tersebut, dapat disusun suatu topological order yang merupakan urutan verteks-verteks dalam graph. Urutan tersebut memenuhi hubungan prasyarat predecessor dan succesor yang ada pada network. Algoritma Topological Order Algoritma penyusunan topological order adalah sebagai berikut. 1. Pilih satu verteks yang tidak mempunyai immediate predecessor (operasi I) 2. Print verteks tsb 3. Hapus verteks dan semua edge yang berasal dari verteks tsb (operasi II) 4. Ulang langkah 1 sampai 3 sampai seluruh verteks yang tidak punya predecessor habis. Jika setelah langkah 4 selesai masih terdapat beberapa verteks, berarti pada network terdapat satu atau lebih cycle, dan proyek atau pekerjaan tersebut tidak layak dikerjakan (feasible). Dalam algoritma di atas terdapat dua operasi. Untuk memudahkan pelaksanaan operasi tersebut pada tahap implementasi, graph direpresentasikan dengan adjacency list yang contoh deklarasinya tertulis di hal 307 buku Horowitz. Variabel count memuat jumlah immediate predecessor. Dalam implementasinya, fungsi topsort memanfaatkan stack untuk menyimpan sementara verteks-verteks yang tidak mempunyai predecessor. Pseudocode dari algoritma di atas dan fungsi topsort sudah ditulis di hal. 306 dan hal 308. V1 V0 Gambar 2 Contoh network AOV V2 V4 V3 V5 2 Gambar 2 di halaman sebelumnya merupakan contoh untuk pelaksanaan algoritma topsort. Adjacency list yang sesuai dengan deklarasi network hal 307 adalah seperti yang ditunjukkan pada gambar 3 di bawah ini. count link vertex link V0 0 1 V1 1 4 V2 1 4 5 NULL V3 1 5 4 NULL V4 3 NULL V5 2 NULL 2 3 NULL NULL node hdnodes Gambar 3 Adjacency list untuk network AOV pada gambar 2 Count : jumlah immediate predecessor (in-degree) Link dr hdnode memuat pointer ke node pertama dari adjacency list. Urutan node-node dalam list sesuai dengan urutan verteks dalam hdnodes. Graph[0] : V0 Graph[0].count = 0 Graph[2] : V2 Graph[2].count = 1 Graph[4] : V4 Graph[4].count = 3 Graph[1] : V1 Graph[1].count = 1 Graph[3] : V3 Graph[3].count = 1 Graph[5] : V5 Graph[5].count = 2 Jika fungsi topsort di hal 308 diikuti, maka gambaran graphnya akan menjadi seperti gambar 4. Dalam fungsi topsort, graph[i].count dari verteks yang tidak mempunyai predecessor digunakan sebagai stack. Top mencatat indeks dari verteks tersebut. Jika top –1 berarti semua verteks mempunyai predecessor, atau dengan kata lain graph merupakan cycle. V1 V1 V2 V4 V3 V5 Langkah 1 V2 V1 V4 V4 V5 V5 Langkah 2 Gambar 4 V1 Langkah 3 V4 V4 Langkah 4 Langkah 5 Langkah-langkah dalam fungsi topsort 3 i Langkah Printf K Stack 0 1 V0 1 2 V3 2 3 V2 1 2 3 5 4 4 5 3 4 5 4 5 V5 V1 V4 1 1, 2 1, 2, 3 1, 2 1, 2 1 1, 5 1 4 - 4 Hasil topological order: V0, V3, V2, V5, V1, V4 Jika adjacency list dibuat dengan urutan headnodes dan node list yang berbeda, hasil topological order akan berbeda juga. Dengan algoritma yang sama, cobalah untuk membuat adjacency list dan topological order untuk network AOV di gambar 1. 4 Latihan Activity On Edge (AOE) Networks Network AOE berguna untuk mengevaluasi performance proyek atau pekerjaan, termasuk menentukan waktu tersingkat untuk menyelesaikan proyek dan mengkaji ulang estimasi waktu untuk menyelesaikan subproyek apakah terlalu pendek atau panjang. Jika network AOV yang menggunakan digraph, network AOE menggunakan weighted digraph. Satu weighted digraph menyatakan satu proyek dan merupakan rangkaian aktivitas yang berurutan. Suatu aktivitas harus tuntas dilaksanakan baru aktivitas berikutnya dapat dimulai. Waktu untuk menuntaskannya dinyatakan oleh weight. Suatu aktivitas dinyatakan oleh edge, event (kejadian) yang menandai awal dan dinyatakan sebagai verteks. C1 C6 a3=1 a0=6 a9=2 a6=9 C8 C4 start C0 a1=4 C2 a4=1 a7=7 C7 finish a10=4 a2=5 a8=4 C3 Event C0 C1 C4 C7 C8 Gambar 5 a5=2 C5 Interpretasi Awal proyek Akhir aktivitas a0 Akhir aktivitas a3 dan a4 Akhir aktivitas a7 dan a8 Akhir proyek Contoh network AOE Setelah start, aktivitas a0, a1 dan a2 dapat dimulai serentak dan dikerjakan secara paralel. Estimasi pelaksanaan aktivitas a0 = 6 hari (aktivitas boleh diselesaikan dalam waktu lebih singkat). Aktivitas a3, a4 atau a5 tidak dapat dimulai sebelum kejadian C1, C2 atau C3 terjadi. Aktivitas a6 atau a7 dapat dimulai segera setelah kejadian C4. Jika aktivitas a6 atau a7 ingin dilaksanakan setelah C5, sebuat edge dapat ditambahkan antara C5 dan C4; berawal di C5 dan berakhir di C4 (disebut dummy activity). Waktu untuk melaksanakan aktivitas <C5, C4> adalah 0. Waktu yang diperlukan untuk menyelesaikan keseluruhan proyek adalah panjang dari path start-finish yang terpanjang. Critical path adalah path terpanjang dari start hingga finish. Critical path untuk graph di atas adalah C0, C1, C4, C7, C8 dan C0, C1, C4, C6, C8, yang panjangnya 18. 5 Earliest time (Ci) adalah saat paling awal Ci dapat terjadi, merupakan panjang path terpanjang dari start C0 hingga Ci. Misalnya saat paling awal C4 terjadi = 7. Earliest time Ci menentukan kapan aktivitas-aktivitas yang berasal dari Ci dapat dimulai secepatnya (earliest start time). Early(i) adalah saat paling awal aktivitas ai dapat dimulai. Misalnya early(a5 ) = 5, early(a6 ) = 7, early(a7 ) = 7 Latest(i) adalah selambat-lambatnya aktivitas ai dapat dimulai tanpa menunda penyelesaian proyek. Misalnya latest(a5) = 8, latest(a6) = 7, latest(a7) = 7. Aktivitas kritis (critical activity) adalah aktivitas yang early(i) = latest(i). Makin kecil perbedaan early(i) dan latest(i), makin kritis suatu aktivitas. Perbedaan waktu tsb menentukan sejauh mana suatu aktivitas dapat ditunda pelaksanaannya tanpa mengganggu jadual penyelesaian proyek. Metoda critical activity ini sangat berguna untuk identifikasi performance proyek atau bottleneck. Perhitungan Earliest Times k i l Earliest time dihitung berdasarkan rumus: early (i) = earliest (k) (1) late (i) = latest(l) – duration of i dimana: early(i) : saat paling awal aktivitas i dapat dimulai earliest(k) : saat paling awal event k dapat terjadi = panjang path terpanjang dari start hingga verteks k late(i) : paling lambat aktivitas i harus dimulai agar jadual proyek tidak tertunda latest(l) : paling lambat event l harus terjadi agar jadual proyek tidak tertunda = panjang path terpanjang dari start hingga verteks l Earliest dihitung berdasarkan pergerakan maju (forward stage) dan latest dihitung berdasarkan pergerakan mundur (backward stage). Pada forward stage, earliest untuk semua verteks atau event yang ada dalam network AOE dihitung berurutan dari verteks start menuju finish. Earliest dari event yang terjadi kemudian bergantung pada kapan event sebelumnya terjadi. Oleh karena itu perhitungan dimulai dengan earliest (0) = 0 dan diikuti dengan earliest (j) = max {earliest [i] + duration of <i,j> } (2) i P(j) P(j) adalah himpunan verteks immediate predecessor dari j. Contoh: 6 C1 a3=1 a0=6 C4 C0 a1=4 C2 a4=1 Jika earliest(C0)=0, maka earliest(C1)=6, karena event C1 baru akan terjadi setelah A0 selesai dikerjakan. Earliest(C2)=4. Event C4 baru terjadi setelah aktivitas a0 dan a3 serta a1 dan a4 selesai dikerjakan. Jadi earliest(C4)=7. Perhitungan earliest dapat dilakukan bersamaan dengan topological sort dari network AOV yang sudah dibahas sebelumnya. Satu statement yang terdapat di hal. 312 paling atas dimasukkan ke fungsi topsort hal. 308, di dalam kurung else (bagian paling bawah). Sebelum masuk ke loop for i, earliest untuk semua event harus diinisialisasi sama dengan 0. Karena ada weight dalam digraph, berarti deklarasi di hal. 307 harus diubah menjadi seperti berikut. typedef struct node *node_pointer; typedef struct node { int vertex; int duration; node_pointer link; } typedef struct { int count; node_pointer link; } hdnodes; hdnodes graph[MAX_VERTICES]; Untuk contoh perhitungan earliest dan latest, kita gunakan network AOE yang terdapat pada gambar 5. Representasi adjacency list dapat dilihat di hal. 313. Langkah-langkah perhitungan earliest jika kita mengikuti fungsi topsort adalah seperti pada tabel di bawah ini, yang melengkapi tabel di gambar 6.42 (b) di hal. 313. i Printf j 0 V0 0 1 2 3 4 5 V3 V5 V2 V1 V4 3 5 2 1 4 6 7 8 V7 V6 V8 7 6 8 K 1 2 3 5 7 4 4 6 7 8 8 Top -1,1 2 3 2,5 2 1 -1,4 -1,6 7 6 -1,8 Stack 0 1 1, 2 1, 2, 3 1, 2, 5 1,2 1 4 6 6, 7 6 8 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 6 6 6 6 0 0 4 4 4 4 4 4 4 4 4 4 4 0 0 0 5 5 5 5 5 5 5 5 5 5 earliest 4 5 0 0 0 0 0 0 5 7 7 7 7 7 7 0 0 0 0 7 7 7 7 7 7 7 7 7 6 7 8 0 0 0 0 0 0 0 0 16 16 16 16 16 0 0 0 0 0 11 11 11 11 14 14 14 14 0 0 0 0 0 0 0 0 0 0 18 18 18 7 Perhitungan Latest Times Earliest berarti suatu event paling cepat dapat terjadi setelah suatu aktivitas sebelum C6 a9=2 a6=9 C8 C4 a7=7 C7 a10=4 event tersebut diselesaikan. Sedangkan latest berarti paling lambat event tersebut harus terjadi supaya pelaksanaan proyek tidak terganggu. Earliest harus sama dengan atau lebih kecil dari latest. Latest dihitung berdasarkan pergerakan mundur (backward stage). Pada backward stage, latest untuk semua verteks atau event yang ada dalam network AOE dihitung berurutan dari verteks finish menuju start. Latest dari suatu event bergantung pada kapan event berikutnya harus selesai menurut jadual. Oleh karena itu perhitungan dimulai dengan latest[n-1] = earliest[n-1] dan diikuti dengan latest[j] = min {[latest[i]-durationof <j,i>} (3) iS(j) dimana S(j) adalah kumpulan immediate succesor dari event j. Event j harus terjadi lebih awal dari (latest[i]-duration aktivitas<j,i>). Perhitungan latest dimulai dari event finish, sehingga diperlukan representasi invers adjacency list. Invers adjacency list untuk network AOE di grambar 5 terdapat di hal. 314 gambar 6.43(a). Perhitungan latest juga dilakukan bersamaan dengan topological sort dari network AOV yang sudah dibahas sebelumnya. Satu statement yang terdapat di hal. 312 paling bawah dimasukkan ke fungsi topsort hal. 308, di dalam kurung else (bagian paling bawah). Langkah perhitungannya sudah pula tertulis di gambar 6.43(c). Setelah diperoleh earliest dan latest dari perhitungan di atas, early dan late aktivitas dapat dihitung menggunakan rumus (1). Early dan late ditunjukkan dalam tabel yang terdapat pada gambar 6.44. Seperti yang telah dibahas sebelumnya bahwa jika suatu aktivitas mempunyai early = late berarti aktivitas tersebut kritikal (tidak boleh ditunda dan selesainya tidak boleh terlambat). Path yang memiliki aktivitas kritikal dapat dilihat pada gambar 6.45. 8
© Copyright 2024 Paperzz