download

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)
iS(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