TESIS SM2310
MEMBANGUN MODEL PETRI NET LAMPU LALULINTAS DAN SIMULASINYA DIEKY ADZKIYA NRP. 1205 201 009
DOSEN PEMBIMBING Dr. Subiono M.S
PROGRAM MAGISTER JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT TEKNOLOGI SEPULUH NOPEMBER SURABAYA 2008
TESIS SM2310
MEMBANGUN MODEL PETRI NET LAMPU LALULINTAS DAN SIMULASINYA DIEKY ADZKIYA NRP. 1205 201 009
DOSEN PEMBIMBING Dr. Subiono M.S
PROGRAM MAGISTER JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT TEKNOLOGI SEPULUH NOPEMBER SURABAYA 2008
MEMBANGUN MODEL PETRI NET LAMPU LALULINTAS DAN SIMULASINYA Tesis disusun untuk memenuhi salah satu syarat memperoleh gelar Magister Sains (M.Si) di Institut Teknologi Sepuluh Nopember oleh : Dieky Adzkiya Nrp. 1205 201 009 Tanggal Ujian Periode Wisuda
: :
31 Juli 2008 September 2008
Disetujui oleh:
1. Dr. Subiono M.S NIP: 131 413 442
(Pembimbing)
2. Drs. Hariyanto M.Si NIP: 131 124 884
(Penguji)
3. Drs. Sulistiyo MT NIP: 131 651 249
(Penguji)
4. Drs. I Gusti Ngurah Rai Usadha M.Si NIP: 131 846 103
(Penguji)
Direktur Program Pascasarjana
Prof. Dr. Ir. Suparno MSIE NIP. 130 532 035
i
ii
MEMBANGUN MODEL PETRI NET LAMPU LALULINTAS DAN SIMULASINYA Nama Mahasiswa NRP Pembimbing
: : :
Dieky Adzkiya 1205 201 009 Dr. Subiono M.S
ABSTRAK Petri net dapat digunakan untuk memodelkan sistem event diskrit. Salah satu contoh sistem event diskrit adalah dinamika lampu lalulintas yang menyala. Dalam penelitian ini dibangun Petri net lampu lalulintas yang mencantumkan waktu tunggu di persimpangan dengan jumlah jalur sebarang dalam bentuk algoritma. Petri net yang dibangun kemudian dianalisis dan direduksi. Analisis Petri net meliputi keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. Reduksi bertujuan mengurangi dimensi ruang keadaan. Jumlah place dan transisi Petri net lampu lalulintas di persimpangan masing-masing sebanyak 5ℓ dan 4ℓ dengan ℓ menyatakan jumlah jalur di persimpangan. Sifat Petri net adalah terbatas (bounded ), tidak konservatif dan banyak keadaan yang coverable berhingga. Reduksi keadaan menyebabkan jumlah place Petri net menjadi ℓ + 4 tetapi tidak mengubah sifatnya. Distribusi normal dan uniform digunakan untuk mendekati jumlah kedatangan pengguna di persimpangan. Jumlah kedatangan yang dibangkitkan dengan distribusi normal dibulatkan ke bilangan bulat terdekat. Pendekatan ini digunakan untuk mensimulasikan jumlah pengguna di persimpangan. Dari hasil simulasi dapat dihitung mean dan maksimum jumlah pengguna di setiap jalur. Kedua hasil tersebut dapat digunakan untuk menentukan kestabilan sistem. Jika mean dan maksimum jumlah pengguna konvergen maka sistem stabil tetapi jika keduanya tidak konvergen maka sistem tidak stabil. Kata kunci: Petri net, reduksi, simulasi jumlah pengguna, kestabilan
iii
iv
MODELING TRAFFIC LIGHTS USING PETRI NET AND ITS SIMULATION By Student Identity Number Supervisor
: : :
Dieky Adzkiya 1205 201 009 Dr. Subiono M.S
ABSTRACT We use Petri net to model discrete event systems. An example of these systems is traffic lights dynamics. In this research we design algorithms to build Petri net for traffic lights with waiting times in an intersection. Then we analyze the Petri net and reduce its state. The analysis consists of boundedness, conservation and state coverability. We reduce state of the Petri net to minimize its state space dimension. Petri net for traffic lights in intersection has 5ℓ place and 4ℓ transition with ℓ represents number of lanes in intersection. Properties of the Petri net are bounded, not conservative and finite coverable state. Number of place in Petri net become ℓ + 4 after we reduce its state. Properties of the Petri net don’t changed. We approximate number of vehicle’s arrival using normal and uniform distribution. Number of vehicle’s arrival generated from normal distribution is rounded to closest integer. We use these approximation to simulate number of vehicle in intersection. We calculate number of vehicle’s mean and maximum in each lanes to check stability of the system. If number of vehicle’s mean and maximum is converge then the system is stable but if these don’t converge then the system is not stable. Key words: Petri net, reduce, number of vehicle’s simulation, stability
v
vi
KATA PENGANTAR Segala puji bagi Allah SWT yang telah memberikan karuniaNya berupa kekuatan iman serta kesehatan sehingga penulis dapat menyelesaikan tesis dengan judul “Membangun Model Petri net Lampu Lalulintas dan Simulasinya” sesuai dengan keinginan dan tepat waktu. Keinginan penulis adalah membuat laporan dengan LATEX dan memanfaatkan perangkat lunak yang gratis. Dalam mengerjakan penelitian ini, penulis tidak lepas dari bantuan beberapa pihak diantaranya: 1. Prof. Dr. Ir. Suparno MSIE selaku Direktur Program Pascasarjana ITS. 2. Dr. M. Isa Irawan MT selaku Koordinator Program Studi Pascasarjana Matematika ITS. 3. Dr. Subiono M.S selaku dosen pembimbing telah mengarahkan dan memotivasi penulis untuk segera menyelesaikan studi. 4. Dosen penguji atas saran dan informasi yang telah diberikan. 5. Drs. Sadjidon M.Si selaku dosen wali penulis. 6. Seluruh dosen Jurusan Matematika FMIPA ITS yang telah mendidik penulis baik di dalam kuliah maupun di luar kuliah. 7. Kedua Orang Tua dan seluruh keluarga atas perhatian, doa dan segala dukungannya selama ini. Baity Jannaty dan Via Salavia yang telah memberikan suntikan semangat kepada penulis. 8. Mas Hanif, mas Ibad, Lubab, Afif, Arif, pak Zaenal dan Rudi yang telah mengobati kegundahan hati penulis selama ini. 9. Budi, Zaenal dan Erdy yang telah menemani dan membantu penulis dalam suka maupun duka. 10. Mas Ghozali yang selalu menjadi teman dalam mencurahkan segala isi hati penulis. 11. Serta semua pihak yang tidak dapat disebutkan satu per satu. vii
Semoga Allah SWT membalas segala budi baik yang telah diberikan kepada penulis dengan limpahan rahmat dan hidayah. Dalam menyusun laporan ini, penulis berusaha memberikan keterangan yang lengkap dan contoh yang sederhana agar materi yang disajikan mudah dipahami. Akhirnya penulis menyadari bahwa tesis ini masih banyak terdapat kekurangan yang semuanya disebabkan oleh kelemahan dan keterbatasan penulis. Saran dan kritik demi perbaikan di masa datang akan sangat penulis hargai. Surabaya, Agustus 2008 Penulis
viii
DAFTAR ISI LEMBAR PENGESAHAN . . . . . . . . . . . . . . . . . . . . . .
i
ABSTRAK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iii
ABSTRACT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
v
KATA PENGANTAR . . . . . . . . . . . . . . . . . . . . . . . . .
vii
DAFTAR ISI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii
DAFTAR GAMBAR . . . . . . . . . . . . . . . . . . . . . . . . . .
xii
DAFTAR TABEL . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xv
DAFTAR ALGORITMA
. . . . . . . . . . . . . . . . . . . . . . .
xxi
BAB 1 PENDAHULUAN . . . . . . . . . . . . . . . . . . . . . .
1
1.1
Latar Belakang . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Rumusan Masalah . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
Batasan Masalah . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.4
Tujuan dan Manfaat . . . . . . . . . . . . . . . . . . . . . . .
3
BAB 2 KAJIAN PUSTAKA DAN TEORI DASAR . . . . . .
5
2.1
Notasi dan Definisi . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2
Tanda Petri net dan Ruang Keadaan . . . . . . . . . . . . . .
8
2.3
Dinamika Petri net . . . . . . . . . . . . . . . . . . . . . . . .
16
2.4
Representasi Petri net Menggunakan Matriks . . . . . . . . . .
23
2.5
Analisis Model Sistem Event Diskrit Tak Berwaktu . . . . . .
27
2.5.1
Liveness dan Deadlocks
. . . . . . . . . . . . . . . . .
28
2.5.2
Coverability Tree . . . . . . . . . . . . . . . . . . . . .
30
2.5.2.1
Definisi Coverability Tree . . . . . . . . . . .
36
2.5.2.2
Menentukan parent bertingkat . . . . . . . . .
39
2.5.2.3
Menguji hubungan dominasi . . . . . . . . . .
45
2.5.2.4
Mencari Keberadaan Node Duplicate . . . . .
49
2.5.2.5
Membangun Coverability Tree . . . . . . . . .
53
2.5.3
Keterbatasan (boundedness) . . . . . . . . . . . . . . .
62
2.5.4
Konservasi (conservation) . . . . . . . . . . . . . . . .
67
2.5.5
Coverability Keadaan . . . . . . . . . . . . . . . . . . .
70
BAB 3 METODA PENELITIAN . . . . . . . . . . . . . . . . . .
75
3.1
Tahap-tahap Penelitian . . . . . . . . . . . . . . . . . . . . . .
75
3.2
Diagram Alir Penelitian . . . . . . . . . . . . . . . . . . . . .
76
BAB 4 PETRI NET DAN SIMULASI PENGGUNA . . . . .
77
4.1
Pendahuluan
. . . . . . . . . . . . . . . . . . . . . . . . . . . ix
77
4.2 Petri net Lampu Lalulintas Sederhana . . . . . . . . . . . . . 4.2.1 4.2.2
78
Matriks Incidence . . . . . . . . . . . . . . . . . . . . . Coverability Tree . . . . . . . . . . . . . . . . . . . . .
80 81
4.2.3 Konservasi . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Petri net Lampu Lalulintas Dengan Waktu Tunggu . . . . . .
82 82
4.3.1 4.3.2
Matriks Incidence . . . . . . . . . . . . . . . . . . . . . Coverability Tree . . . . . . . . . . . . . . . . . . . . .
85 86
4.3.3 Konservasi . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Petri net Lampu Lalulintas Tanpa Waktu Idle . . . . . . . . .
89 90
4.4.1 4.4.2 4.4.3
Matriks Incidence . . . . . . . . . . . . . . . . . . . . . Coverability Tree . . . . . . . . . . . . . . . . . . . . . Konservasi . . . . . . . . . . . . . . . . . . . . . . . . .
93 95 97
4.5 Petri net Lampu Lalulintas di Persimpangan . . . . . . . . . . 4.5.1 Matriks Incidence . . . . . . . . . . . . . . . . . . . . .
98 104
4.5.2 4.5.3
Coverability Tree . . . . . . . . . . . . . . . . . . . . . Konservasi . . . . . . . . . . . . . . . . . . . . . . . . .
109 118
4.6 Reduksi Keadaan Petri net Lampu Lalulintas . . . . . . . . . 4.6.1 Matriks Incidence . . . . . . . . . . . . . . . . . . . . .
121 124
4.6.2 4.6.3
Coverability Tree . . . . . . . . . . . . . . . . . . . . . Konservasi . . . . . . . . . . . . . . . . . . . . . . . . .
128 137
4.7 Simulasi Jumlah Pengguna di Persimpangan . . . . . . . . . . 4.7.1 Kedatangan Berdistribusi Normal . . . . . . . . . . . .
140 142
4.7.2 Kedatangan Berdistribusi Uniform . . . . . . . . . . . BAB 5 IMPLEMENTASI DAN EVALUASI . . . . . . . . . . .
158 171
5.1 Pengujian Sifat Pure pada Petri net . . . . . . . . . . . . . . . 5.2 Menentukan Transisi Enabled . . . . . . . . . . . . . . . . . . 5.3 Pemfirean Transisi . . . . . . . . . . . . . . . . . . . . . . . .
171 172 173
5.4 Pengujian Dominasi . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Membangun Coverability Tree . . . . . . . . . . . . . . . . . .
174 176
5.6 Menentukan Batas Atas Place di Petri net . . . . . . . . . . . 5.7 Menentukan Place yang terbatas (bounded ) . . . . . . . . . . .
179 180
5.8 Keterbatasan (boundedness) pada Petri net . . . . . . . . . . . 5.9 Pengujian Konservasi (Conservation) . . . . . . . . . . . . . .
181 182
5.10 Pengujian Cover Dua Keadaan . . . . . . . . . . . . . . . . . 5.11 Pengujian Coverable . . . . . . . . . . . . . . . . . . . . . . .
184 185
5.12 Keadaan Setelah Pemfirean Transisi yang Enabled . . . . . . . 5.13 Penentuan Urutan Pemfirean Transisi . . . . . . . . . . . . . .
186 188
x
5.14 Petri net Lampu Lalulintas . . . . . . . . . . . . . . . . . . . .
191
5.14.1 Lampu Lalulintas Sederhana . . . . . . . . . . . . . . . 5.14.2 Lampu Lalulintas dengan Waktu Tunggu . . . . . . . .
191 192
5.14.3 Lampu Lalulintas Tanpa Waktu Idle . . . . . . . . . . 5.14.4 Lampu Lalulintas di Persimpangan . . . . . . . . . . .
194 195
5.14.5 Lampu Lalulintas Tereduksi . . . . . . . . . . . . . . . 5.15 Simulasi Jumlah Pengguna di Persimpangan . . . . . . . . . .
198 199
5.16 Identifikasi Petri net yang dibuat dengan PIPE . . . . . . . . 5.17 Simulasi Petri net berbasis GUI . . . . . . . . . . . . . . . . .
201 202
5.18 Simulasi Petri net yang dibuat dari PIPE . . . . . . . . . . . . 5.19 Representasi Grafik dari Coverability Tree . . . . . . . . . . .
207 208
5.20 Simulasi Jumlah Pengguna Berbasis GUI . . . . . . . . . . . . 5.21 Simulasi Lampu Lalulintas di Persimpangan . . . . . . . . . .
210 213
5.22 Simulasi Lampu Lalulintas Berbasis GUI . . . . . . . . . . . . 5.23 Evaluasi Hasil Simulasi . . . . . . . . . . . . . . . . . . . . . . 5.23.1 Kedatangan Berdistribusi Normal . . . . . . . . . . . .
216 217 218
5.23.1.1 Mean Keberangkatan Ketika Lampu Hijau Menyala . . . . . . . . . . . . . . . . . . . . . . 220 5.23.1.2 Jumlah Jalur di Persimpangan . . . . . . . . 222 5.23.1.3 Mean Keberangkatan Ketika Lampu Hijau Menyala . . . . . . . . . . . . . . . . . . . . . . 5.23.1.4 Mean Kedatangan . . . . . . . . . . . . . . .
224 225
5.23.1.5 Lama Lampu Kuning Menyala . . . . . . . . 5.23.1.6 Lama Lampu Hijau Menyala . . . . . . . . .
226 227
5.23.1.7 Keadaan Awal . . . . . . . . . . . . . . . . . 5.23.2 Kedatangan Berdistribusi Uniform . . . . . . . . . . .
229 230
5.23.2.1 Mean Keberangkatan Ketika Lampu Hijau Menyala . . . . . . . . . . . . . . . . . . . . . . 231 5.23.2.2 Jumlah Jalur di Persimpangan . . . . . . . . 233 5.23.2.3 Mean Keberangkatan Ketika Lampu Hijau Menyala . . . . . . . . . . . . . . . . . . . . . . 234 5.23.2.4 Maksimum Kedatangan . . . . . . . . . . . . 5.23.2.5 Lama Lampu Kuning Menyala . . . . . . . .
235 236
5.23.2.6 Lama Lampu Hijau Menyala . . . . . . . . . 5.23.2.7 Keadaan Awal . . . . . . . . . . . . . . . . .
237 239
BAB 6 PENUTUP . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Kesimpulan . . . . . . . . . . . . . . . . . . . . . . . . . . . .
241 241
xi
6.2 Saran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
241
LAMPIRAN A SOURCE CODE . . . . . . . . . . . . . . . . . . A.1 File ispure.sci . . . . . . . . . . . . . . . . . . . . . . . . .
243 243
A.2 File findenabled.sci . . . . . . . . . . . . . . . . . . . . . . A.3 File isdominate.sci . . . . . . . . . . . . . . . . . . . . . . . A.4 File buildtree.sci . . . . . . . . . . . . . . . . . . . . . . .
243 244 244
A.5 File findbound.sci . . . . . . . . . . . . . . . . . . . . . . . A.6 File boundedplace.sci . . . . . . . . . . . . . . . . . . . . .
245 246
A.7 File ispetrinetbounded.sci . . . . . . . . . . . . . . . . . . A.8 File isconservation.sci . . . . . . . . . . . . . . . . . . . . A.9 File iscovers.sci . . . . . . . . . . . . . . . . . . . . . . . .
246 246 247
A.10 File iscoverable.sci . . . . . . . . . . . . . . . . . . . . . . A.11 File findchild.sci . . . . . . . . . . . . . . . . . . . . . . .
247 247
A.12 File firingorder.sci . . . . . . . . . . . . . . . . . . . . . . A.13 File firingorderbig.sci . . . . . . . . . . . . . . . . . . . . A.14 File tlintersection.sci . . . . . . . . . . . . . . . . . . . .
248 249 252
A.15 File tlreduced.sci . . . . . . . . . . . . . . . . . . . . . . . A.16 File intersection.sci . . . . . . . . . . . . . . . . . . . . . A.17 File intersectionext.sci . . . . . . . . . . . . . . . . . . .
254 255 258
A.18 File readpipe.sci . . . . . . . . . . . . . . . . . . . . . . . . A.19 File petrinetsimulation.sci . . . . . . . . . . . . . . . . .
260 264
A.20 File pipesimulation.sci . . . . . . . . . . . . . . . . . . . . A.21 File treeposition.sci . . . . . . . . . . . . . . . . . . . . . A.22 File covtree.sci . . . . . . . . . . . . . . . . . . . . . . . . .
270 271 272
A.23 File covpipe.sci . . . . . . . . . . . . . . . . . . . . . . . . . A.24 File intersectiongui.sci . . . . . . . . . . . . . . . . . . .
274 275
A.25 File intersectionguiext.sci . . . . . . . . . . . . . . . . . A.26 File lightsgui.sci . . . . . . . . . . . . . . . . . . . . . . . A.27 File lightsguiext.sci . . . . . . . . . . . . . . . . . . . . .
279 284 291
A.28 File lightsimulation.sci . . . . . . . . . . . . . . . . . . . A.29 File lightsimulationext.sci . . . . . . . . . . . . . . . . .
299 305
A.30 File buildmacros.sce . . . . . . . . . . . . . . . . . . . . . . A.31 File loadmacros.sce . . . . . . . . . . . . . . . . . . . . . . . A.32 File builder.sce . . . . . . . . . . . . . . . . . . . . . . . . .
310 310 311
A.33 File loader.sce . . . . . . . . . . . . . . . . . . . . . . . . . LAMPIRAN B HASIL SIMULASI . . . . . . . . . . . . . . . . .
311 313
DAFTAR PUSTAKA . . . . . . . . . . . . . . . . . . . . . . . . . .
387
xii
DAFTAR GAMBAR 2.1
Petri net Sederhana . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2
Petri net dengan Transisi yang Tidak Mempunyai Place Input
7
2.3
Contoh Transisi yang Tidak Enabled . . . . . . . . . . . . . .
9
2.4
Contoh Transisi yang Enabled . . . . . . . . . . . . . . . . . .
10
2.5
Keadaan Awal Petri net . . . . . . . . . . . . . . . . . . . . .
12
2.6
Sebelum Transisi t1 Difire . . . . . . . . . . . . . . . . . . . .
17
2.7
Sesudah Transisi t1 Difire
. . . . . . . . . . . . . . . . . . . .
18
2.8
Keadaan Awal Petri net Bertanda . . . . . . . . . . . . . . . .
20
2.9
Keadaan Petri net Setelah Transisi t1 Difire . . . . . . . . . .
21
2.10 Keadaan Petri net Setelah Transisi t1 Difire Kemudian t2 . . .
22
2.11 Keadaan Petri net Setelah Transisi t1 Difire Kemudian t3 . . .
22
2.12 Transisi dengan Liveness Berbeda-beda . . . . . . . . . . . . .
29
2.13 Keadaan Awal Petri net . . . . . . . . . . . . . . . . . . . . .
30
2.14 Coverability Tree untuk Petri net di Gambar 2.13 . . . . . . .
31
2.15 Keadaan Awal Petri net . . . . . . . . . . . . . . . . . . . . .
32
2.16 Sebagian Coverability Tree Petri net di Gambar 2.15 . . . . .
32
2.17 Representasi Hingga Coverability Tree di Gambar 2.16 . . . .
35
2.18 Input Algoritma 2.10 adalah idparent = 0 dan idtran = 0 . .
56
2.19 Input Algoritma 2.10 adalah idparent = 1 dan idtran = 1 . .
57
2.20 Input Algoritma 2.10 adalah idparent = 2 dan idtran = 2 . .
58
2.21 Input Algoritma 2.10 adalah idparent = 3 dan idtran = 1 . .
59
2.22 Input Algoritma 2.10 adalah idparent = 4 dan idtran = 2 . .
59
2.23 Algoritma dijalankan dengan Menggunakan Input idparent = 4 dan idtran = 3 . . . . . . . . . . . . . . . . . . . . . . . . . .
60
2.24 Input Algoritma 2.10 adalah idparent = 2 dan idtran = 3 . .
61
2.25 Petri net Antrian Sederhana . . . . . . . . . . . . . . . . . . .
62
2.26 Coverability Tree untuk Petri net Antrian Sederhana . . . . .
64
3.1
Diagram Alir Penelitian . . . . . . . . . . . . . . . . . . . . .
76
4.1
Petri net Antrian Sederhana . . . . . . . . . . . . . . . . . . .
78
4.2
Petri net Sederhana untuk Satu Lampu Lalulintas . . . . . . .
79
4.3
Coverability Tree untuk Petri net di Gambar 4.2 . . . . . . . .
82
4.4
Petri net yang Mengandung Informasi Lama Lampu Lalulintas Menyala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
Coverability Tree untuk Petri net di Gambar 4.4 . . . . . . . .
87
4.5
xiii
4.6 Keadaan Petri net yang Menyatakan Semua Lampu Lalulintas Padam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Petri net Lampu Lalulintas Tanpa Waktu Idle . . . . . . . . .
90 91
4.8 Coverability Tree untuk Petri net di Gambar 4.7 . . . . . . . . 4.9 Model Persimpangan Sederhana . . . . . . . . . . . . . . . . .
96 99
4.10 Modifikasi Model Petri net Sebelumnya . . . . . . . . . . . . . 4.11 Hubungan Place Merah dengan Transisi pada Jalur yang Lain
100 101
4.12 Modifikasi Petri net untuk Menyatakan Perubahan Jalur . . . 4.13 Petri net untuk Dua Lampu Lalulintas . . . . . . . . . . . . .
101 102
4.14 Coverability Tree untuk Petri net di Gambar 4.13 . . . . . . . 110 4.15 Hasil Reduksi Keadaan pada Petri net Lampu Lalulintas di Persimpangan dengan Dua Jalur . . . . . . . . . . . . . . . . . . 4.16 Coverability Tree untuk Petri net di Gambar 4.15 . . . . . . .
122 129
4.17 Grafik Perubahan Jumlah Pengguna Terhadap Waktu di Persimpangan dengan Dua Jalur . . . . . . . . . . . . . . . . . . 158 4.18 Grafik Perubahan Jumlah Pengguna Terhadap Waktu di Persimpangan Dengan Dua Jalur . . . . . . . . . . . . . . . . . . 169 5.1 Bobot Arc dari Transisi ke Place yaitu Elemen Tidak Nol pada Matriks Forward Incidence . . . . . . . . . . . . . . . . . . . . 203 5.2 Bobot Arc dari Place ke Transisi yaitu Elemen Tidak Nol pada Matriks Backward Incidence . . . . . . . . . . . . . . . . . . . 5.3 Jumlah Token Awal pada Setiap Place di Petri net . . . . . .
204 205
5.4 Nama Transisi yang Enabled . . . . . . . . . . . . . . . . . . . 5.5 Urutan Transisi yang Difire Sebelumnya . . . . . . . . . . . .
205 206
5.6 Petri net Mengalami Deadlock . . . . . . . . . . . . . . . . . . 5.7 Memilih File xml yang Dibuat dengan PIPE . . . . . . . . . .
206 208
5.8 Coverability Tree Petri net Antrian Sederhana . . . . . . . . . 5.9 Menginputkan Jumlah Jalur dan Waktu Simulasi . . . . . . .
209 211
5.10 Menginputkan Data Kondisi Awal, Mean Kedatangan dan Varian Kedatangan pada Masing-Masing Jalur . . . . . . . . . . 212 5.11 Simulasi Jumlah Pengguna dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 5.12 Simulasi Lampu Lalulintas di Persimpangan dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . . . . . 214 5.13 Simulasi Lampu Lalulintas di Persimpangan dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . . . . . . 5.14 Menginputkan Jumlah Lampu Lalulintas yang Ditampilkan . . xiv
215 216
5.15 Memilih Lampu Lalulintas yang Ditampilkan . . . . . . . . . .
217
5.16 Perbandingan Jumlah Pengguna Simulasi yang Pertama dan Kedua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 5.17 Simulasi Jumlah Pengguna dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
xv
xvi
DAFTAR TABEL 5.1
Mean Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . 219
5.2
Maksimum Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . 219
5.3
Mean Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . .
220
5.4
Maksimum Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . 220
5.5
Mean Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . 222
5.6
Maksimum Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . 222
5.7
Mean Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . .
224
5.8
Maksimum Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . 224
5.9
Mean Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . 225
5.10 Maksimum Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . .
226
5.11 Mean Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . .
227
5.12 Maksimum Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . 227 5.13 Mean Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . . . . 228 5.14 Maksimum Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . .
228
5.15 Mean Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . .
229
5.16 Maksimum Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Normal . . . . . . . . . . . . . . . . 230 5.17 Mean Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 231 xvii
5.18 Maksimum Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . 231 5.19 Mean Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 232 5.20 Maksimum Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . 232 5.21 Mean Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 233 5.22 Maksimum Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . 234 5.23 Mean Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 235 5.24 Maksimum Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . 235 5.25 Mean Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 236 5.26 Maksimum Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . 236 5.27 Mean Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 237 5.28 Maksimum Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . 237 5.29 Mean Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . . 238 5.30 Maksimum Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . 238 5.31 Mean Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . . . 239 5.32 Maksimum Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Uniform . . . . . . . . . . . . . . . 239 B.1 Mean Simulasi Pertama di Jalur 1 Berdistribusi Normal . . . .
313
B.2 Mean Simulasi Pertama di Jalur 2 Berdistribusi Normal . . . . B.3 Maksimum Simulasi Pertama di Jalur 1 Berdistribusi Normal .
314 315
B.4 Maksimum Simulasi Pertama di Jalur 2 Berdistribusi Normal . B.5 Waktu Komputasi Simulasi Pertama Berdistribusi Normal . .
316 316
B.6 Mean Simulasi Kedua di Jalur 1 Berdistribusi Normal . . . . . B.7 Mean Simulasi Kedua di Jalur 2 Berdistribusi Normal . . . . .
317 318
xviii
B.8 Maksimum Simulasi Kedua di Jalur 1 Berdistribusi Normal . .
319
B.9 Maksimum Simulasi Kedua di Jalur 2 Berdistribusi Normal . . B.10 Waktu Komputasi Simulasi Kedua Berdistribusi Normal . . .
320 320
B.11 Mean Simulasi Ketiga di Jalur 1 Berdistribusi Normal . . . . . B.12 Mean Simulasi Ketiga di Jalur 2 Berdistribusi Normal . . . . .
321 322
B.13 Mean Simulasi Ketiga di Jalur 3 Berdistribusi Normal . . . . . B.14 Maksimum Simulasi Ketiga di Jalur 1 Berdistribusi Normal . .
323 324
B.15 Maksimum Simulasi Ketiga di Jalur 2 Berdistribusi Normal . . B.16 Maksimum Simulasi Ketiga di Jalur 3 Berdistribusi Normal . .
325 326
B.17 Waktu Komputasi Simulasi Ketiga Berdistribusi Normal . . . B.18 Mean Simulasi Keempat di Jalur 1 Berdistribusi Normal . . . B.19 Mean Simulasi Keempat di Jalur 2 Berdistribusi Normal . . .
326 327 328
B.20 Mean Simulasi Keempat di Jalur 3 Berdistribusi Normal . . . B.21 Maksimum Simulasi Keempat di Jalur 1 Berdistribusi Normal
329 330
B.22 Maksimum Simulasi Keempat di Jalur 2 Berdistribusi Normal B.23 Maksimum Simulasi Keempat di Jalur 3 Berdistribusi Normal
331 332
B.24 Waktu Komputasi Simulasi Keempat Berdistribusi Normal . . B.25 Mean Simulasi Kelima di Jalur 1 Berdistribusi Normal . . . .
332 333
B.26 Mean Simulasi Kelima di Jalur 2 Berdistribusi Normal . . . . B.27 Maksimum Simulasi Kelima di Jalur 1 Berdistribusi Normal .
334 335
B.28 Maksimum Simulasi Kelima di Jalur 2 Berdistribusi Normal . B.29 Waktu Komputasi Simulasi Kelima Berdistribusi Normal . . .
336 336
B.30 Mean Simulasi Keenam di Jalur 1 Berdistribusi Normal . . . . B.31 Mean Simulasi Keenam di Jalur 2 Berdistribusi Normal . . . .
337 338
B.32 Maksimum Simulasi Keenam di Jalur 1 Berdistribusi Normal . B.33 Maksimum Simulasi Keenam di Jalur 2 Berdistribusi Normal . B.34 Waktu Komputasi Simulasi Keenam Berdistribusi Normal . .
339 340 340
B.35 Mean Simulasi Ketujuh di Jalur 1 Berdistribusi Normal . . . . B.36 Mean Simulasi Ketujuh di Jalur 2 Berdistribusi Normal . . . .
341 342
B.37 Maksimum Simulasi Ketujuh di Jalur 1 Berdistribusi Normal . B.38 Maksimum Simulasi Ketujuh di Jalur 2 Berdistribusi Normal .
343 344
B.39 Waktu Komputasi Simulasi Ketujuh Berdistribusi Normal . . B.40 Mean Simulasi Kedelapan di Jalur 1 Berdistribusi Normal . .
344 345
B.41 Mean Simulasi Kedelapan di Jalur 2 Berdistribusi Normal . . 346 B.42 Maksimum Simulasi Kedelapan di Jalur 1 Berdistribusi Normal 347 B.43 Maksimum Simulasi Kedelapan di Jalur 2 Berdistribusi Normal 348 B.44 Waktu Komputasi Simulasi Kedelapan Berdistribusi Normal . 348 xix
B.45 Mean Simulasi Pertama di Jalur 1 Berdistribusi Uniform . . .
349
B.46 Mean Simulasi Pertama di Jalur 2 Berdistribusi Uniform . . . B.47 Maksimum Simulasi Pertama di Jalur 1 Berdistribusi Uniform
350 351
B.48 Maksimum Simulasi Pertama di Jalur 2 Berdistribusi Uniform B.49 Waktu Komputasi Simulasi Pertama Berdistribusi Uniform . .
352 352
B.50 Mean Simulasi Kedua di Jalur 1 Berdistribusi Uniform . . . . B.51 Mean Simulasi Kedua di Jalur 2 Berdistribusi Uniform . . . .
353 354
B.52 Maksimum Simulasi Kedua di Jalur 1 Berdistribusi Uniform . B.53 Maksimum Simulasi Kedua di Jalur 2 Berdistribusi Uniform .
355 356
B.54 Waktu Komputasi Simulasi Kedua Berdistribusi Uniform . . . B.55 Mean Simulasi Ketiga di Jalur 1 Berdistribusi Uniform . . . . B.56 Mean Simulasi Ketiga di Jalur 2 Berdistribusi Uniform . . . .
356 357 358
B.57 Mean Simulasi Ketiga di Jalur 3 Berdistribusi Uniform . . . . B.58 Maksimum Simulasi Ketiga di Jalur 1 Berdistribusi Uniform .
359 360
B.59 Maksimum Simulasi Ketiga di Jalur 2 Berdistribusi Uniform . B.60 Maksimum Simulasi Ketiga di Jalur 3 Berdistribusi Uniform .
361 362
B.61 Waktu Komputasi Simulasi Ketiga Berdistribusi Uniform . . . B.62 Mean Simulasi Keempat di Jalur 1 Berdistribusi Uniform . . .
362 363
B.63 Mean Simulasi Keempat di Jalur 2 Berdistribusi Uniform . . . B.64 Mean Simulasi Keempat di Jalur 3 Berdistribusi Uniform . . .
364 365
B.65 Maksimum Simulasi Keempat di Jalur 1 Berdistribusi Uniform B.66 Maksimum Simulasi Keempat di Jalur 2 Berdistribusi Uniform
366 367
B.67 Maksimum Simulasi Keempat di Jalur 3 Berdistribusi Uniform B.68 Waktu Komputasi Simulasi Keempat Berdistribusi Uniform .
368 368
B.69 Mean Simulasi Kelima di Jalur 1 Berdistribusi Uniform . . . . B.70 Mean Simulasi Kelima di Jalur 2 Berdistribusi Uniform . . . . B.71 Maksimum Simulasi Kelima di Jalur 1 Berdistribusi Uniform .
369 370 371
B.72 Maksimum Simulasi Kelima di Jalur 2 Berdistribusi Uniform . B.73 Waktu Komputasi Simulasi Kelima Berdistribusi Uniform . . .
372 372
B.74 Mean Simulasi Keenam di Jalur 1 Berdistribusi Uniform . . . B.75 Mean Simulasi Keenam di Jalur 2 Berdistribusi Uniform . . .
373 374
B.76 Maksimum Simulasi Keenam di Jalur 1 Berdistribusi Uniform B.77 Maksimum Simulasi Keenam di Jalur 2 Berdistribusi Uniform
375 376
B.78 Waktu Komputasi Simulasi Keenam Berdistribusi Uniform . . B.79 Mean Simulasi Ketujuh di Jalur 1 Berdistribusi Uniform . . .
376 377
B.80 Mean Simulasi Ketujuh di Jalur 2 Berdistribusi Uniform . . . B.81 Maksimum Simulasi Ketujuh di Jalur 1 Berdistribusi Uniform
378 379
xx
B.82 Maksimum Simulasi Ketujuh di Jalur 2 Berdistribusi Uniform
380
B.83 Waktu Komputasi Simulasi Ketujuh Berdistribusi Uniform . . B.84 Mean Simulasi Kedelapan di Jalur 1 Berdistribusi Uniform . .
380 381
B.85 Mean Simulasi Kedelapan di Jalur 2 Berdistribusi Uniform . . 382 B.86 Maksimum Simulasi Kedelapan di Jalur 1 Berdistribusi Uniform 383 B.87 Maksimum Simulasi Kedelapan di Jalur 2 Berdistribusi Uniform 384 B.88 Waktu Komputasi Simulasi Kedelapan Berdistribusi Uniform .
xxi
384
xxii
DAFTAR ALGORITMA 2.1 2.2
Mencari Transisi Enabled . . . . . . . . . . . . . . . . . . . . . Alternatif Penentuan Transisi Enabled . . . . . . . . . . . . .
10 14
2.3 2.4 2.5
Pemfirean Transisi . . . . . . . . . . . . . . . . . . . . . . . . Himpunan Parent Bertingkat . . . . . . . . . . . . . . . . . . Modifikasi Parent Bertingkat . . . . . . . . . . . . . . . . . .
19 39 43
2.6 2.7
Pengujian Dominasi . . . . . . . . . . . . . . . . . . . . . . . . Pengujian Sederetan Dominasi . . . . . . . . . . . . . . . . . .
45 47
2.8 Perbandingan Keadaan . . . . . . . . . . . . . . . . . . . . . . 2.9 Pencarian Node . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10 Membangun Coverability Tree . . . . . . . . . . . . . . . . . .
49 51 54
2.11 Menentukan Batas Atas Setiap Place di Petri net . . . . . . . 2.12 Pengujian Cover . . . . . . . . . . . . . . . . . . . . . . . . .
65 71
2.13 Pengujian Coverable . . . . . . . . . . . . . . . . . . . . . . . 4.1 Petri net Lampu Lalulintas Sederhana . . . . . . . . . . . . . 4.2 Petri net Lampu Lalulintas Dengan Waktu Tunggu . . . . . .
73 80 84
4.3 4.4
Petri net Lampu Lalulintas Tanpa Waktu Idle . . . . . . . . . Petri net Lampu Lalulintas di Persimpangan . . . . . . . . . .
92 104
4.5 4.6 4.7
Forward Incidence Petri net Lampu Lalulintas di Persimpangan 106 Backward incidence Petri net Lampu Lalulintas di Persimpangan 108 Petri net Lampu Lalulintas Tereduksi . . . . . . . . . . . . . . 123
4.8 Forward Incidence Petri net Lampu Lalulintas Tereduksi . . . 4.9 Backward Incidence Petri net Lampu Lalulintas Tereduksi . . 4.10 Tahap Inisialisasi Simulasi Jumlah Pengguna . . . . . . . . . .
125 127 147
4.11 Perpindahan Jalur Simulasi Jumlah Pengguna . . . . . . . . . 4.12 Simulasi Jumlah Pengguna di Persimpangan . . . . . . . . . .
150 152
4.13 Modifikasi Tahap Inisialisasi Simulasi Jumlah Pengguna . . . . 4.14 Modifikasi Perpindahan Jalur Simulasi Jumlah Pengguna . . . 4.15 Modifikasi Simulasi Jumlah Pengguna di Persimpangan . . . .
160 162 164
xxiii
xxiv
BAB 1 PENDAHULUAN Pada bab ini dibahas latar belakang penelitian yang membahas hasil penelitian dan uraian kegiatan yang telah dilakukan. Berdasarkan uraian tersebut, dirumuskan masalah yang diteliti beserta batasan-batasan yang digunakan. Selanjutnya dituliskan tujuan yang ingin dicapai dan manfaat yang ingin diperoleh dari penelitian ini.
1.1
Latar Belakang Dengan perkembangan jaman yang semakin pesat, banyak teknologi
yang menjadikan hidup lebih mudah. Salah satu contohnya adalah adanya waktu tunggu di persimpangan jalan. Sebelum adanya hal itu, para pengguna jalan tidak mengetahui kapan lampu akan berganti menjadi hijau atau merah. Selain itu pengguna diharuskan menunggu untuk waktu yang cukup lama meskipun kondisi jalan saat itu tidak begitu ramai. Hal ini disebabkan penentuan lama lampu lalulintas menyala yang tidak sesuai sehingga berakibat penumpukan pengguna pada suatu jalur. Jenis persimpangan yang dikaji disini menggunakan urutan jalur pelayanan tetap. Tujuannya adalah tidak membingungkan pengguna dengan urutan yang selalu berubah-ubah. Batasan penelitian ini adalah pada setiap saat hanya terdapat satu lampu lalulintas hijau yang menyala. Penelitian sebelumnya (De Schutter dkk, 1998) telah mengindentifikasi permasalahan ini sebagai kontrol optimum untuk meminimumkan jumlah pengguna yang menunggu atau waktu tunggu. Pada masing-masing lampu lalulintas di setiap jalur terdapat interval lama nyala yang diperbolehkan. Penyelesaian dapat diperoleh menggunakan Extended Linear Complementarity Problem (ELCP). Banyak operasi pada metode ini cukup besar sehingga simulasi tidak dapat dilakukan untuk waktu yang lama. Permasalahan serupa juga dibahas oleh (Hanzalek dkk, 2006) dengan membandingkan Linear Quadratic Regulator (LQR) dan Nonlinear Model Predictive Controller (NMPC). Perbedaan dengan (De Schutter dkk, 1998) pada batasan lama lampu lalulintas menyala. Waktu untuk melayani semua jalur pada satu periode sudah ditetapkan. Dengan memodelkan permasalahan ini menjadi sistem dengan waktu diskrit maka kontrol optimum dapat digunakan untuk meminimumkan rata-rata waktu tunggu. 1
Perubahan lampu lalulintas yang menyala adalah event dan lampu lalulintas yang menyala pada masing-masing jalur adalah keadaan. Jelas bahwa jumlah semua keadaan yang mungkin adalah berhingga. Berdasarkan keterangan sebelumnya maka permasalahan ini termasuk sistem event diskrit. Salah satu kegunaan Petri net adalah memodelkan sistem event diskrit seperti pada (Cassandras, 1993). Dalam penelitian ini akan dibangun model Petri net untuk lampu lalulintas yang menyala di persimpangan dengan jumlah jalur sebarang. Metode membangun Petri net disajikan dalam bentuk algoritma. Pembahasan dimulai dengan membangun Petri net untuk mensimulasikan lampu lalulintas yang sederhana. Pada tiap permasalahan disertakan algoritma untuk membangun Petri netnya. Representasi Petri net dalam bentuk matriks incidence merupakan kajian berikutnya. Setelah itu dibahas bagaimana membangun coverability tree dari Petri net. Coverability tree digunakan untuk menganalisis sifat-sifat Petri net. Aspek yang dianalisis meliputi keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. Pada bagian berikutnya dibahas implementasi dari algoritma yang telah dibahas menggunakan Scilab. Implementasi secara garis besar mencakup simulasi Petri net, analisis Petri net dan membangun Petri net lampu lalulintas. Petri net dibuat terlebih dahulu sebelum melakukan analisis. Pendefinisian Petri net menggunakan Scilab sulit dilakukan karena harus dibuat dalam representasi matriks. Pembuatan Petri net lebih mudah menggunakan Platform Independent Petri net Editor (PIPE) karena menggunakan representasi grafik. Pada penelitian ini dibuat fungsi untuk membaca Petri net yang dibangun menggunakan PIPE agar Petri net tersebut dapat disimulasikan dan dianalisis dengan program yang dibuat menggunakan Scilab. Jika jumlah place dan transisi di Petri net besar maka representasi dalam bentuk grafik menjadi rumit. Pada kasus ini digunakan representasi matriks dari Petri net yang dapat dibuat dengan Scilab. Simulasi perubahan jumlah pengguna pada setiap jalur di persimpangan diimplementasikan menggunakan Scilab. Ada dua pendekatan yang digunakan dalam simulasi ini yaitu kedatangan berdistribusi normal dan kedatangan berdistribusi uniform diskrit (Allen, 2003). Hasil yang diperoleh dari simulasi berupa mean jumlah pengguna dan maksimum jumlah pengguna. Kedua informasi tersebut dapat digunakan untuk menentukan kestabilan sistem. Lama setiap lampu lalulintas menyala dapat diketahui dengan simulasi lampu lalulintas pada beberapa jalur di persimpangan. 2
1.2
Rumusan Masalah
Permasalahan yang dibahas dalam penelitian ini adalah. 1. Berapa jumlah place pada model Petri net lampu lalulintas di persimpangan dengan jumlah jalur sebarang. 2. Berapa jumlah place pada Petri net lampu lalulintas di persimpangan setelah direduksi. 3. Bagaimana mensimulasikan perubahan jumlah pengguna pada masingmasing jalur tiap waktu. 4. Bagaimana menentukan kestabilan dari model.
1.3
Batasan Masalah
Ruang lingkup permasalahan dibatasi sebagai berikut. 1. Lama lampu lalulintas menyala merupakan bilangan bulat positif. 2. Urutan jalur yang dilayani sudah ditetapkan sebelumnya. 3. Pengguna yang dibahas adalah pengguna yang tidak dapat melewati persimpangan ketika lampu lalulintas merah menyala.
1.4
Tujuan dan Manfaat
Tujuan yang ingin dicapai dan manfaat yang diperoleh dari penelitian ini sebagai berikut. 1. Memberikan kepastian waktu tunggu kepada pengguna. 2. Mengurangi waktu tunggu di persimpangan. 3. Mengurangi tingkat kecelakaan lalulintas di persimpangan. 4. Mengurangi tingkat kemacetan karena penumpukan kendaraan di persimpangan. 5. Memperlancar arus kendaraan saat melewati persimpangan.
3
4
BAB 2 KAJIAN PUSTAKA DAN TEORI DASAR Pada bab ini dikaji hal-hal yang berkaitan dengan pemodelan sistem event diskrit menggunakan Petri net. Pembahasan diawali dengan notasi dan definisi yang digunakan. Konsep Petri net bertanda dan ruang keadaan menjadi topik berikutnya. Selanjutnya dibahas salah satu bagian penting yaitu dinamika Petri net. Bagian terakhir adalah analisis Petri net. Analisis Petri net terdiri dari keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. Ketiga analisis tersebut diperoleh dengan menggunakan coverability tree yang dibangun dari Petri net.
2.1
Notasi dan Definisi
Petri net dikembangkan pertama kali oleh C.A. Petri pada awal 1960an. Petri net merupakan salah satu alat untuk memodelkan sistem event diskrit selain menggunakan automata yang telah dikenal sebelumnya. Setiap automata dapat diubah menjadi Petri net. Pada Petri net event berkaitan dengan transisi. Agar suatu event dapat terjadi, beberapa keadaan harus dipenuhi terlebih dahulu. Informasi mengenai event dan keadaan ini masingmasing dinyatakan dengan transisi dan place. Place dapat berfungsi sebagai input atau output suatu transisi. Place sebagai input menyatakan keadaan yang harus dipenuhi agar transisi dapat terjadi. Setelah transisi terjadi maka keadaan akan berubah. Place yang menyatakan keadaan tersebut adalah output dari transisi. Definisi 2.1 (Cassandras, 1993). Petri net adalah 4-tuple (P, T, A, w) dengan • P : himpunan berhingga place, P = {p1 , p2 , . . . , pn }, • T : himpunan berhingga transisi, T = {t1 , t2 , . . . , tm }, • A : himpunan arc, A ⊆ (P × T ) ∪ (T × P ), • w : fungsi bobot, w : A → {1, 2, 3, . . . }. Berdasarkan Definisi 2.1 maka himpunan place dan transisi tidak harus berupa himpunan berhingga melainkan bisa berupa himpunan takhingga 5
terhitung (countable sets). Pada hampir semua kasus yang rumit dapat dimodelkan dengan Petri net yang mempunyai place dan transisi berhingga. Petri net dapat digambarkan sebagai graph berarah. Node dari graph berupa place yang diambil dari himpunan place P atau transisi yang diambil dari himpunan transisi T . Pada Petri net graph diperbolehkan menggunakan beberapa arc untuk menghubungkan dua node atau ekivalen dengan memberikan bobot ke setiap arc yang menyatakan jumlah arc. Struktur ini dikenal dengan struktur multigraph. Dalam membahas representasi Petri net secara grafik akan digunakan notasi I(tj ) dan O(tj ) yang masing-masing menyatakan himpunan place input dan output ke transisi tj . Secara matematis definisi tersebut dapat ditulis menjadi persamaan berikut (Cassandras, 1993). I(tj ) = {pi : (pi , tj ) ∈ A} O(tj ) = {pi : (tj , pi ) ∈ A}
(2.1)
Notasi yang sama dapat digunakan untuk mendeskripsikan input dan output transisi untuk place pi sebagai berikut. I(pi ) = {tj : (tj , pi ) ∈ A} O(pi) = {tj : (pi , tj ) ∈ A}
(2.2)
Grafik Petri net terdiri dari dua macam node yaitu lingkaran dan garis. Lingkaran menyatakan place sedangkan garis menyatakan transisi. Arc disimbolkan dengan panah yang menghubungkan place dan transisi. Arc yang menghubungkan place pi ke transisi tj berarti pi ∈ I(tj ). Jika bobot arc dari place pi ke transisi tj adalah k ditulis w(pi, tj ) = k maka terdapat k arc dari place pi ke transisi tj atau sebuah arc dengan bobot k.
p1
t1
p2
Gambar 2.1 Petri net Sederhana
Contoh 2.1. Perhatikan Petri net pada Gambar 2.1. Terdapat dua place pada Petri net tersebut yaitu p1 dan p2 ditulis P = {p1 , p2 }. Untuk menyatakan bahwa terdapat sebuah transisi yaitu t1 maka ditulis T = {t1 }. Arc dinyatakan dengan pasangan berurutan. Elemen pertama menyatakan asal dan elemen 6
kedua menyatakan tujuan misalnya arc dari place p1 ke transisi t1 ditulis (p1 , t1 ) dan (t1 , p2 ) menyatakan arc dari transisi t1 ke place p2 . Secara lengkap ditulis A = {(p1 , t1 ), (t1 , p2 )}. Bobot arc dari place p1 ke transisi t1 adalah dua yaitu w(p1, t1 ) = 2 dan bobot dari transisi t1 ke place p2 adalah satu yaitu w(t1 , p2 ) = 1. Pada contoh ini I(t1 ) = {p1 } dan O(t1 ) = {p2 }. Terlihat pada Contoh 2.1 bahwa bobot arc dari place p1 ke transisi t1 adalah 2 dan digambarkan dengan dua buah arc. Bobot arc dari transisi t1 ke place p2 adalah satu. Transisi tidak harus mempunyai place input dan place output seperti transisi t1 pada Gambar 2.1. Kadang transisi tidak mempunyai place input. Ini berarti event yang dinyatakan oleh transisi tersebut tidak membutuhkan kondisi untuk dapat terjadi. Transisi t2 pada Petri net Contoh 2.2 tidak mempunyai place input. 2 p1
p2
t1
t2
Gambar 2.2 Petri net dengan Transisi yang Tidak Mempunyai Place Input Berikut merupakan penjelasan dari Petri net pada Gambar 2.2 beserta cara identifikasi dan penulisan place, transisi, arc dan bobotnya. Contoh 2.2. Petri net pada Gambar 2.2 mempunyai dua place dan dua transisi yang masing-masing dapat ditulis P = {p1 , p2 } dan T = {t1 , t2 }. Arc dinyatakan dengan pasangan berurutan misalnya arc dari place p1 ke transisi t1 dinotasikan dengan (p1 , t1 ). Jumlah arc pada Petri net tersebut sebanyak 4 yang ditulis A = {(p1 , t1 ), (t1 , p2 ), (p2 , t1 ), (t2 , p2 )}. Berikut merupakan bobot pada masing-masing arc w(p1 , t1 ) = 2,
w(t1 , p2 ) = w(p2 , t1 ) = w(t2 , p2 ) = 1
(2.3)
Terlihat dari Gambar 2.2 bahwa I(t1 ) = P , yang menyatakan bahwa semua place pada Petri net merupakan input dari transisi t1 . Jelas bahwa himpunan O(t1 ) = {p2 } = O(t2 ) dan I(t2 ) = ∅ karena tidak ada place yang menjadi input dari transisi t2 . 7
Kadang berguna untuk membedakan antara Petri net yang pure dan impure. Petri net disebut pure jika tidak ada place yang menjadi input dan output untuk suatu transisi. Jika terdapat place yang menjadi input dan output untuk transisi tertentu maka Petri net dikatakan impure. Definisi 2.2 (Cassandras, 1993). Petri net dikatakan pure jika tidak mempunyai place yang menjadi input sekaligus output untuk suatu transisi. Secara formal ditulis ∄ pi ∈ P, tj ∈ T ∋ {(pi , tj ), (tj , pi)} ⊆ A
(2.4)
Jelas bahwa Petri net pada Gambar 2.1 adalah pure karena tidak ada place yang menjadi input sekaligus output untuk suatu transisi sedangkan Petri net pada Gambar 2.2 adalah impure, karena p2 adalah place input dan output untuk transisi t1 .
2.2
Tanda Petri net dan Ruang Keadaan
Transisi pada Petri net menyatakan event pada sistem event diskrit dan place merepresentasikan kondisi agar event dapat terjadi. Diperlukan mekanisme untuk mengindikasikan apakah kondisi telah terpenuhi. Token adalah sesuatu yang diletakkan di place yang menyatakan terpenuhi tidaknya suatu kondisi. Secara grafik token digambarkan dengan dot dan diletakkan di dalam place. Jika jumlah token besar maka dituliskan dengan angka. Definisi 2.3 (Cassandras, 1993). Penanda (marking) x pada Petri net adalah fungsi x : P → {0, 1, 2, . . . } Penanda dinyatakan dengan vektor yang berisi bilangan bulat taknegatif yang menyatakan jumlah token yaitu x = [x(p1 ), x(p2 ), . . . , x(pn )]T . Jumlah elemen x sama dengan banyak place di Petri net. Elemen ke-i pada vektor ini merupakan jumlah token pada place pi , x(pi ) ∈ {0, 1, 2, . . . }. Definisi 2.4 (Cassandras, 1993). Petri net bertanda (marked ) adalah 5-tuple (P, T, A, w, x0 ) dimana (P, T, A, w) adalah Petri net dan x0 adalah penanda awal 8
Selanjutnya Petri net bertanda cukup disebut Petri net. Seperti pemodelan sistem pada umumnya, maka harus didefinisikan keadaan (state) pada Petri net. Keadaan pada Petri net adalah penanda Petri net. Definisi 2.5 (Cassandras, 1993). Keadaan (state) Petri net bertanda adalah x = [x(p1 ), x(p2 ), . . . , x(pn )]T Perhatikan bahwa jumlah token pada place adalah sebarang bilangan bulat taknegatif, tidak harus terbatas (bounded ). Secara umum jumlah penanda yang mungkin adalah takhingga. Ruang keadaan (state space) X pada Petri net bertanda dengan n place didefinisikan oleh semua vektor berdimensi n dengan elemen bilangan bulat taknegatif, sehingga X = {0, 1, 2, . . . }n . Untuk selanjutnya digunakan istilah keadaan dan penanda bergantian. Jika semua keadaan yang diperlukan sudah terpenuhi maka transisi dapat terjadi. Dalam hal ini keadaan merupakan place input dari transisi. Bobot arc dari place input ke transisi menunjukkan jumlah token minimum di place agar transisi enabled. Jika semua place input mempunyai token lebih dari atau sama dengan jumlah token minimum yang dibutuhkan maka transisi enabled. Definisi 2.6 (Cassandras, 1993). Transisi tj ∈ T pada Petri net bertanda enabled jika x(pi ) ≥ w(pi, tj ),
∀pi ∈ I(tj )
(2.5)
Gambar 2.3 merupakan contoh transisi yang tidak enabled. Jelas bahwa I(t1 ) = {p1 }, x(p1 ) = 1 dan w(p1 , t1 ) = 2 seperti yang terlihat pada Gambar 2.3 Transisi t1 tidak enabled karena 1 = x(p1 ) < w(p1 , t1 ) = 2. • p1
2 t1
p2
Gambar 2.3 Contoh Transisi yang Tidak Enabled Transisi t1 enabled jika jumlah token pada place p1 lebih dari atau sama dengan 2. Terlihat pada Petri net Gambar 2.4 bahwa x(p1 ) = 2 sehingga transisi t1 pada Petri net tersebut enabled. Dari sini dapat disimpulkan agar 9
transisi tj enabled maka jumlah token pada place pi paling sedikit sebesar bobot arc yang menghubungkan pi ke tj . Kenyataan ini sesuai dengan definisi transisi enabled yang telah dituliskan sebelumnya. •• p1
2 t1
• p2
Gambar 2.4 Contoh Transisi yang Enabled Berdasarkan keterangan sebelumnya didesain algoritma untuk menentukan transisi yang enabled pada Petri net. Definisi 2.6 digunakan untuk mencari transisi yang enabled. Seperti terlihat pada Algoritma 2.1 langkah pertama yang dilakukan adalah menginisialisasi variabel En dengan himpunan kosong. Setelah itu pengujian dilakukan untuk setiap transisi di Petri net. Ingat bahwa jumlah transisi di Petri net adalah |T |. Variabel i menyatakan place dan diinisialisasi dengan nilai 1 karena indeks terkecil dari place adalah 1. Pertidaksamaan x(pi ) ≥ w(pi, tuji) diuji untuk 1 ≤ i ≤ |P | pada perulangan while. Jika saat keluar dari perulangan ini i ≤ |P | maka x(pi ) < w(pi , tuji) sehingga place pi tidak memenuhi pertidaksamaan. Jika i > |P | saat keluar dari perulangan maka semua place memenuhi pertidaksamaan tersebut sehingga transisi tuji enabled dan transisi tersebut merupakan elemen dari En yaitu himpunan transisi enabled. Algoritma 2.1 Mencari Transisi Enabled Input: P = {p1 , p2 , . . . , pn }, T, w, x Output: En /* himpunan transisi enabled */ 1 En ← ∅ /* inisialisasi */ 2 for all tuji ∈ T do 3 i←1 4 while x(pi ) ≥ w(pi , tuji) and i ≤ |P | do 5 i←i+1 6 end while 7 if i > |P | then 8 En ← En ∪ {tuji} 9 end if 10 end for Pengujian algoritma dapat dilakukan dengan mengimplementasikan algoritma tersebut dan dilihat waktu komputasinya. Metode pengujian ini tidak efektif karena memerlukan usaha yang besar dan hasil yang diperoleh 10
belum tentu benar. Pengujian algoritma yang efektif dilakukan dengan menghitung kompleksitasnya. Kompleksitas algoritma terdiri dari banyak kerja yang dilakukan dan banyak memori yang dipakai. Banyak kerja yang dilakukan suatu algoritma dapat dinyatakan dalam notasi big-Oh. Notasi big-Oh adalah O. Big-Oh merupakan himpunan fungsi yang didominasi oleh fungsi tertentu. Dalam ilmu komputasi untuk menyatakan bahwa fungsi T (n) anggota dari O(f (n)) tidak dituliskan T (n) ∈ O(f (n)) melainkan T (n) = O(f (n)). Berikut merupakan definisi big-Oh. Definisi 2.7 (Shaffer, 1998). Diberikan T (n) fungsi tak negatif. Fungsi T (n) adalah anggota himpunan O(f (n)) jika terdapat dua bilangan c dan n0 sedemikian hingga T (n) ≤ c f (n) untuk semua n > n0 . Selanjutnya dibahas bagaimana menggunakan Definisi 2.7 untuk menentukan apakah suatu fungsi mendominasi fungsi yang lain. Disini definisi tersebut digunakan untuk menentukan apakah fungsi n mendominasi 3n + 9 sehingga T (n) = 3n + 9 dan f (n) = n. Misal dipilih c = 4 sehingga akan ditentukan n0 agar pertidaksamaan 3n + 9 ≤ 4n dipenuhi untuk setiap n > n0 . Jelas bahwa pertidaksamaan sebelumnya dipenuhi untuk n = 9, 10, 11, . . . sehingga diperoleh n0 = 8. Jadi fungsi f (n) = n mendominasi T (n) = 3n + 9 yang ditulis 3n + 9 = O(n). Definisi 2.7 tidak dipenuhi jika untuk setiap c yang mungkin, tidak ada n0 yang menyebabkan pertidaksamaan dipenuhi. Hal ini dapat diilustrasikan dengan memilih T (n) = n2 dan f (n) = 3n. Misal dipilih c = 1 maka pertidaksamaan n2 ≤ 3n dipenuhi untuk 1 ≤ n ≤ 3. Secara umum berapapun nilai c yang dipilih maka tidak pertidaksamaan n2 ≤ 3cn tidak berlaku untuk n > 3c sehingga dapat disimpulkan fungsi 3n tidak mendominasi n2 . Dalam menghitung banyak kerja yang dilakukan algoritma, harus ditentukan jenis operasi yang dihitung. Operasi yang dihitung adalah operasi utama atau operasi dengan kompleksitas yang besar yaitu operasi yang terdiri dari banyak operasi dasar. Pada umumnya banyak kerja yang dilakukan algoritma tergantung input yang diberikan sehingga terdapat lebih dari satu kemungkinan banyak kerja yang dilakukan. Banyak kerja yang dihitung disini adalah banyak kerja dalam kemungkinan terburuk (worst case). Jenis operasi yang dihitung pada Algoritma 2.1 adalah operasi utama yaitu perbandingan. Langkah berikutnya yang dilakukan adalah menentukan 11
input yang menyebabkan banyak kerja Algoritma 2.1 paling besar. Jelas bahwa operasi x(pi ) ≥ w(pi, tuji) dilakukan untuk setiap transisi di Petri net yang terlihat pada baris 2. Dalam kemungkinan terburuk, operasi dilakukan sebanyak jumlah place di Petri net yaitu ketika suatu transisi enabled. Berdasarkan keterangan sebelumnya dapat disimpulkan bahwa input yang menyebabkan banyak kerja Algoritma 2.1 paling besar adalah keadaan Petri net dengan semua transisi enabled. Pada kemungkinan terburuk (worst case), banyak kerja algoritma mencari transisi enabled sebanyak |P | × |T | yang dapat dituliskan W (|P |, |T |) = |P | × |T | = O(|P | × |T |). Faktor yang harus dipertimbangkan dalam kompleksitas algoritma selain banyak kerja yang dilakukan adalah banyak memori (memory) yang dipakai algoritma seperti telah dijelaskan sebelumnya. Banyak memori yang dipakai algoritma merupakan banyak memori yang dipakai variabel tambahan. Variabel tambahan adalah semua variabel dalam algoritma selain variabel input dan output. Jika banyak memori yang dipakai variabel tambahan tetap untuk semua kemungkinan input maka algoritma bekerja di tempat (work in place). Jika banyak memori yang dipakai variabel tambahan tergantung input yang diberikan maka algoritma tidak bekerja di tempat. Algoritma yang baik adalah algoritma yang bekerja di tempat (work in place). Banyak memori yang dipakai Algoritma 2.1 tergantung variabel tambahan sehingga variabel tambahan ditentukan terlebih dahulu. Variabel tambahan pada algoritma menentukan transisi enabled adalah i dan t. Jelas bahwa apapun input yang diberikan banyak memori yang dipakai untuk menyimpan kedua variabel tersebut tetap sehingga Algoritma 2.1 bekerja di tempat. Agar Algoritma 2.1 lebih mudah dipahami maka selanjutnya dibahas proses yang dilakukan oleh algoritma tersebut pada Petri net tertentu. Petri net berikut digunakan sebagai contoh (Cassandras, 1993). p4 p2
t2 • p1
p3
t1
t3
Gambar 2.5 Keadaan Awal Petri net Terdapat 4 place dan 3 transisi pada Petri net di Gambar 2.5 sehingga |P | = 4 dan |T | = 3. Himpunan place P mempunyai anggota p1 , p2 , p3 dan p4 yang ditulis P = {p1 , p2 , p3 , p4 }. Himpunan transisi T mempunyai 3 12
anggota yaitu t1 , t2 dan t3 yang ditulis T = {t1 , t2 , t3 }. Pada contoh berikut Algoritma 2.1 digunakan untuk menentukan transisi yang enabled saat keadaan awal x0 = [1, 0, 0, 0]T . Contoh 2.3. Variabel En diinisialisasi ∅ pada baris 1. Jumlah transisi pada Petri net sebanyak 3 sehingga |T | = 3 dan iterasi dilakukan 3 kali. Saat iterasi pertama, variabel i diinisialisasi 1 pada baris 3. Terlihat bahwa x(p1 ) = 1 = w(p1 , t1 ) dan 1 = i ≤ |P | = 4 sehingga pernyataan pada baris 4 bernilai benar dan variabel i bernilai 2. Place p2 tidak mempunyai token dan tidak ada arc dari p2 ke t1 menyebabkan x(p2 ) = 0 = w(p2 , t1 ) dan 2 = i ≤ |P | = 4 sehingga pernyataan pada while bernilai benar dan variabel i ditambah satu menjadi 3. Perhatikan bahwa jika tidak ada arc dari place p ke t maka w(p, t) = 0 dan ingat jumlah token pada place bilangan bulat tak negatif yaitu x(p) ≥ 0 sehingga berapapun nilai x(p) pernyataan x(p) ≥ w(p, t) selalu benar. Dengan menggunakan kesimpulan sebelumnya maka untuk i = 3, 4 pernyataan x(pi ) ≥ w(pi , t1 ) dan i ≤ |P | bernilai benar yang menyebabkan nilai variabel i berubah menjadi 5. Jelas bahwa 5 = i |P | = 4 sehingga pernyataan pada baris 4 bernilai salah dan dilanjutkan ke baris 7. Pernyataan 5 = i > |P | = 4 bernilai benar sehingga variabel En = {t1 } setelah menjalankan baris 8. Hal ini menyatakan transisi t1 enabled. Selanjutnya diproses transisi kedua. Sama dengan sebelumnya yaitu variabel i diisi nilai 1 kemudian menuju ke perulangan while. Tidak ada arc dari p1 ke t2 menyebabkan x(p1 ) ≥ w(p1 , t2 ) dan 1 = i ≤ |P | = 4 bernilai benar dan pernyataan pada baris 5 dikerjakan sehingga nilai variabel i menjadi 2. Terlihat pada Gambar 2.5 bahwa 0 = x(p2 ) w(p2 , t2 ) = 1 sehingga pernyataan di while bernilai salah. Kenyataan 2 = i ≯ |P | = 4 menyebabkan kondisi pada baris 7 tidak terpenuhi. Hal ini menunjukkan bahwa transisi t2 tidak enabled. Transisi yang diproses berikutnya adalah transisi ketiga. Nilai variabel i diinisialisasi 1. Jelas bahwa tidak ada arc dari place p1 ke t3 sehingga pernyataan di while bernilai benar dan nilai variabel i berubah menjadi 2. Kenyataan bahwa 0 = x(p2 ) w(p2 , t3 ) = 1 mengakibatkan pernyataan pada baris 4 bernilai salah. Variabel En tetap yaitu En = {t1 } karena 2 = i ≯ |P | = 4. Jadi outputnya adalah En = {t1 } yang menyatakan bahwa pada keadaan awal terdapat satu transisi yang enabled yaitu t1 . 13
Algoritma 2.1 menentukan suatu transisi enabled dengan menguji keberlakuan pertidaksamaan (2.5) untuk semua place di Petri net. Berdasarkan Definisi 2.6 dan keterangan pada contoh sebelumnya diperoleh kesimpulan bahwa penentuan transisi yang enabled dilakukan dengan menguji keberlakuan pertidaksamaan (2.5) untuk setiap place input dari transisi tersebut. Untuk place yang lain pertidaksamaan (2.5) pasti dipenuhi. Diharapkan dengan menggunakan pendekatan ini, banyak kerja yang dilakukan untuk menentukan transisi yang enabled lebih sedikit dibandingkan sebelumnya. Berikut merupakan perubahan pada algoritma sebelumnya agar penentuan transisi enabled dilakukan dengan menguji keberlakuan pertidaksamaan (2.5) untuk setiap place input dari transisi. Algoritma 2.2 Alternatif Penentuan Transisi Enabled Input: T, w, x Output: En /* himpunan transisi enabled */ 1 En ← ∅ /* inisialisasi */ 2 for all tuji ∈ T do 3 isenabled ← true; Masukan ← I(tuji) 4 for all pm ∈ Masukan do 5 if x(pm) < w(pm, tuji) then 6 isenabled ← false; break 7 end if 8 end for 9 if isenabled then 10 En ← En ∪ {tuji} 11 end if 12 end for Tahap inisialisasi dari Algoritma 2.1 tidak perlu diubah. Perulangan pada baris 2 juga tidak diubah karena perulangan ini bertujuan untuk menguji semua transisi pada Petri net. Variabel i pada Algoritma 2.1 yang berfungsi sebagai indeks place diganti dengan variabel isenabled yang bertipe boolean. Variabel ini bernilai true jika transisi yang diuji enabled dan bernilai false jika transisi yang diuji tidak enabled. Pengujian dilakukan untuk setiap place input dari transisi yang diuji seperti ditunjukkan pada baris 2 di Algoritma 2.2. Jika terdapat place input yang tidak memenuhi pertidaksamaan (2.5), yaitu berlaku x(pm) < w(pm, t) untuk pm ∈ I(t) maka variabel isenabled diganti false dan segera keluar dari perulangan untuk place input pada baris 4 dengan perintah break. Diharapkan banyak kerja yang dilakukan Algoritma 2.2 lebih kecil dibandingkan Algoritma 2.1. 14
Selanjutnya menentukan kompleksitas Algoritma 2.2 yaitu menghitung banyak kerja yang dilakukan dan memori yang dipakai oleh algoritma tersebut. Sebelum menghitung banyak kerja yang dilakukan algoritma, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung sama dengan algoritma sebelumnya yaitu operasi perbandingan. Operasi perbandingan yang dimaksud berada pada baris 5. Berikutnya ditentukan input yang menyebabkan kemungkinan terburuk terjadi. Untuk menguji suatu transisi tuji ∈ T maka kemungkinan terburuk (worst case) kerja yang dilakukan sebanyak jumlah place input dari transisi tuji yaitu |I(tuji)|. Hal ini terjadi jika transisi tuji enabled. Algoritma 2.2 menguji semua transisi sehingga input yang menyebabkan banyak kerja yang dilakukan paling besar sama dengan sebelumnya yaitu keadaan Petri net dengan semua transisi enabled. Dengan input ini algoritma tersebut melakukan kerja sebanyak P P t∈T |I(t)| yang ditulis W (|A|, T ) = t∈T |I(t)| = O(|A|). Jelas bahwa banyak kerja yang dilakukan oleh Algoritma 2.2 lebih kecil atau sama dengan P Algoritma 2.1 yaitu t∈T |I(t)| ≤ |P | × |T | karena himpunan place input setiap transisi merupakan himpunan bagian dari himpunan place di Petri net P yang ditulis I(t) ⊆ P, ∀t ∈ T . Persamaan t∈T |I(t)| = |P | × |T | berlaku jika dan hanya jika himpunan place input dari setiap transisi sama dengan
himpunan place yaitu I(t) = P, ∀t ∈ T . Untuk menghitung banyak memori yang dipakai Algoritma 2.2, harus ditentukan variabel tambahan dari algoritma tersebut. Ada 3 variabel tambahan dalam Algoritma 2.2 yaitu Masukan, isenabled dan pinput. Variabel isenabled dan pinput memakai memori tetap sedangkan Masukan tergantung jumlah anggota himpunan place input setiap transisi di Petri net. Jadi algoritma ini tidak bekerja di tempat (work in place). Berikut dibahas urutan proses yang dilakukan oleh Algoritma 2.2. Contoh yang digunakan sama dengan sebelumnya yaitu Petri net dengan keadaan awal x0 = [1, 0, 0, 0]T pada Gambar 2.5. Contoh 2.4. Pada baris 1, variabel En diinisialisasi dengan himpunan kosong. Proses dilanjutkan dengan menguji setiap transisi pada Petri net yang dimulai dengan transisi t1 . Variabel isenabled diinisialisasi dengan true pada baris 3. Jelas bahwa I(t1 ) = {p1 } dan x(p1 ) = 1 = w(p1 , t1 ) sehingga kondisi pada baris 5 tidak terpenuhi dan menuju ke baris 9. Nilai variabel isenabled tidak berubah yaitu bernilai true sehingga kondisi pada baris 9 terpenuhi dan nilai variabel En berubah menjadi {t1 }. 15
Proses dilanjutkan dengan menguji transisi t2 . Place input dari transisi t2 adalah p2 yang ditulis I(t2 ) = {p2 }. Kondisi pada baris 5 terpenuhi karena 0 = x(p2 ) < w(pi , tj ) = 1 sehingga variabel isenabled berubah menjadi false dan keluar dari perulangan ini menuju ke baris 9. Kondisi pada baris ini tidak terpenuhi karena variabel isenabled bernilai false sehingga variabel En tidak berubah. Pengujian terakhir adalah transisi t3 . Place input dari transisi ini adalah p2 dan p3 yang ditulis I(t3 ) = {p2 , p3 }. Kondisi pada baris 5 dipenuhi untuk place p2 dan p3 sehingga place manapun yang dijalankan lebih dahulu kondisi dipenuhi yang menyebabkan variabel isenabled berubah menjadi false dan keluar dari perulangan forall. Hal ini disebabkan 0 = x(pi ) < w(pi, t3 ) = 1 untuk i = 2, 3. Kondisi pada baris 9 tidak dipenuhi karena variabel isenabled bernilai false. Output dari Algoritma 2.2 sama dengan output Algoritma 2.1 yaitu {t1 }. Berdasarkan pembahasan sebelumnya maka banyak kerja yang dilakukan oleh Algoritma 2.2 kurang dari atau sama dengan Algoritma 2.1. Jika dilihat dari segi kebutuhan memori maka Algoritma 2.1 membutuhkan memori lebih kecil dibandingkan Algoritma 2.2. Jadi kedua algoritma masing-masing mempunyai kelebihan dan kelemahan. Pemilihan algoritma tergantung kerumitan permasalahan yang ingin diselesaikan. Pada bagian berikutnya dibahas bagaimana mekanisme perubahan keadaan pada Petri net. Mekanisme ini berperan penting dalam proses pemodelan Petri net dan simulasinya.
2.3
Dinamika Petri net
Jika Petri net digunakan untuk memodelkan sistem dinamik event diskrit, seharusnya Petri net dilengkapi dengan mekanisme yang mirip dengan transisi keadaan (state transition) pada automata. Mekanisme ini berupa menjalankan token melewati jaringan (net) ketika transisi menjadi enabled dan proses ini mengubah keadaan Petri net. Hanya transisi enabled yang dapat difire. Transisi difire saat event yang dinyatakan oleh transisi terjadi. Berikut ini adalah proses yang terjadi pada pemfirean transisi. Semua token di place input dikurangi/diambil sebanyak bobot arc yang menghubungkannya. Berdasarkan Definisi 2.6 maka 16
jumlah token di place input setelah dikurangi adalah bilangan bulat taknegatif. Token di place output ditambah sebanyak bobot arc yang menghubungkannya. Definisi 2.8 (Cassandras, 1993). Fungsi perubahan keadaan pada Petri net bertanda (P, T, A, w, x0 ) yaitu f : {0, 1, 2, . . . }n ×T → {0, 1, 2, . . . }n terdefinisi untuk transisi tj ∈ T jika dan hanya jika x(pi ) ≥ w(pi, tj ),
∀pi ∈ I(tj )
(2.6)
Jika f (x, tj ) terdefinisi maka ditulis x′ = f (x, tj ), dimana x′ (pi ) = x(pi ) − w(pi , tj ) + w(tj , pi ),
i = 1, 2, . . . , n
(2.7)
Kondisi (2.6) menjamin fungsi perubahan keadaan hanya didefinisikan untuk transisi yang enabled. Fungsi perubahan keadaan didasarkan pada struktur Petri net. Keadaan berikutnya yang didefinisikan pada (2.7) secara eksplisit tergantung dari fungsi bobot pada setiap input dan output pada transisi. Berdasarkan (2.7), jika pi adalah place input untuk transisi tj , maka token pada place pi berkurang sebanyak bobot arc dari pi ke tj . Sebaliknya jika pi adalah place output dari transisi tj maka token pada place pi bertambah sebesar bobot arc dari tj ke pi . Mungkin pi adalah place input dan output dari transisi tj sehingga menurut (2.7) token pada place pi berkurang sebanyak w(pi, tj ) dan bertambah sebanyak w(tj , pi ). Perhatikan bahwa jumlah token pada Petri net bertanda tidak tetap. Jelas dari (2.7) bahwa mungkin w(tj , pi ) > w(pi , tj ) sehingga token yang ditambahkan pada place pi lebih banyak daripada yang diambil ketika transisi tj difire. Secara umum token pada Petri net mungkin habis setelah beberapa kali pemfirean atau jumlahnya bertambah menuju takhingga. •• p1
2 t1
• p2
Gambar 2.6 Sebelum Transisi t1 Difire Berikut dibahas proses pemfirean Petri net pada Gambar 2.6 dan keadaan Petri net setelah terjadi pemfirean transisi. 17
Contoh 2.5. Inisialisasi jumlah token pada p1 dan p2 masing-masing adalah 2 dan 1 sehingga penanda awal Petri net adalah x0 = [x(p1 ), x(p2 )]T = [2, 1]T . Arc dari p1 ke t1 mempunyai bobot 2 ditulis w(p1 , t1 ) = 2. Jelas bahwa x(p1 ) = 2 ≥ w(p1, t1 ) sehingga transisi t1 enabled dan dapat difire. Untuk memfire transisi t1 dibutuhkan dua token dari place p1 sehingga token di place tersebut habis dan sebuah token ditambahkan di place p2 . Penanda Petri net berubah menjadi x′ = [0, 2]T setelah transisi t1 difire dan bisa ditulis x′ = f (x0 , t1 ). Transisi t1 tidak enabled karena tidak ada token pada place p1 . Pada keadaan ini tidak ada transisi yang enabled karena Petri net pada Gambar 2.6 mempunyai sebuah transisi yaitu t1 . Keadaan dimana tidak ada transisi yang enabled seperti yang terlihat pada Gambar 2.7 disebut keadaan terminal dan Petri net mengalami deadlock. Petri net yang baik seharusnya menghindari terjadinya deadlock. Pembahasan mengenai deadlock secara lebih terperinci dapat dilihat pada bagian analisis Petri net tak berwaktu. Selanjutnya didesain algoritma pemfirean transisi pada Petri net. 2 p1
t1
•• p2
Gambar 2.7 Sesudah Transisi t1 Difire Algoritma pemfirean transisi juga dapat disusun dengan menggunakan persamaan (2.7) pada Definisi 2.8. Persamaan (2.7) dijalankan untuk setiap place yang menjadi input atau output dari transisi yang difire. Jumlah token pada place yang lain tidak mengalami perubahan. Proses ini dapat dijelaskan sebagai berikut. Misal tf adalah transisi yang difire dan place pnt bukan place input atau output dari transisi tf yang ditulis pnt ∈ / I(tf ) ∪ O(tf ). Jumlah token pada place pnt tidak mengalami perubahan setelah transisi tf difire. Hal ini disebabkan w(pnt, tf ) = 0 = w(tf, pnt) sehingga x′ (pnt) = x(pnt). Dengan menggunakan pendekatan tersebut maka place yang dipengaruhi oleh pemfirean transisi adalah gabungan dari himpunan place input dan himpunan place output transisi yang difire. Pada Algoritma 2.3, himpunan place yang dipengaruhi oleh pemfirean transisi tf dinyatakan dengan T erhubung. 18
Berikut merupakan algoritma pemfirean transisi menggunakan pendekatan yang dibahas sebelumnya. Algoritma 2.3 Pemfirean Transisi Input: x, tf ∈ T Output: x′ = f (x) /* keadaan setelah transisi tf difire */ 1 x′ ← x; T erhubung ← I(tf ) ∪ O(tf ) /* inisialisasi */ 2 for all pt ∈ T erhubung do 3 x′ (pt) ← x(pt) − w(pt, tf ) + w(tf, pt) 4 end for Selanjutnya dibahas kompleksitas algoritma pemfirean transisi yang terdiri dari banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Jenis operasi yang dihitung adalah penjumlahan dan operasi lain yang selevel misalnya pengurangan. Terlihat pada Algoritma 2.3 bahwa kedua operasi tersebut dilakukan pada baris 3. Perintah pada baris ini dijalankan sebanyak jumlah anggota dari himpunan I(tf ) ∪ O(tf ) dengan tf adalah transisi yang difire. Jelas bahwa gabungan himpunan place input dan himpunan place output dari transisi tf adalah himpunan bagian dari himpunan place P yang ditulis I(tf ) ∪ O(tf ) ⊆ P sehingga jumlah anggota himpunan tersebut kurang dari atau sama dengan jumlah anggota himpunan place yaitu |I(tf ) ∪ O(tf )| ≤ |P |. Dengan menggunakan notasi big-Oh, banyak kerja yang dilakukan Algoritma 2.3 dapat ditulis W (tf, |P |) = |I(tf ) ∪ O(tf )| = O(|P |) dengan |P | menyatakan banyak place di Petri net. Pada algoritma ini variabel tambahan yang digunakan adalah T erhubung dan pt. Banyak memori yang dipakai untuk T erhubung tergantung jumlah place yang terhubung dengan tf sehingga Algoritma 2.3 tidak bekerja di tempat (work in place). Telah dibahas pada Contoh 2.3 bahwa transisi yang enabled adalah t1 . Pada contoh berikut Algoritma 2.3 digunakan untuk mengetahui keadaan setelah transisi t1 difire. Contoh 2.6. Input Algoritma 2.3 adalah Petri net pada Gambar 2.5 dengan keadaan x = [1, 0, 0, 0]T dan transisi t1 ∈ T . Variabel x′ diinisialisasi dengan x pada baris 1 sehingga x′ = [1, 0, 0, 0]T . Terlihat dari Gambar 2.5 bahwa place input dari t1 adalah p1 dan place outputnya adalah p2 dan p3 yang masing-masing ditulis I(t1 ) = {p1 } dan O(t1 ) = {p2 , p3 }. Pernyataan pada baris 3 dijalankan yaitu x′ (p1 ) = x(p1 ) − w(p1 , t1 ) + w(t1 , p1 ) = 1 − 1 + 0 = 0 dengan variabel pt = p1 sehingga variabel x′ menjadi [0, 0, 0, 0]T . Selanjutnya pernyataan dijalankan dua kali masing-masing dengan pt = p2 dan pt = p3 . 19
Untuk pt = p2 diperoleh x′ (p2 ) = x(p2 ) − w(p2 , t1 ) + w(t1 , p2 ) = 0 − 0 + 1 = 1. Dengan cara yang sama diperoleh x′ (p3 ) = x(p3 ) − w(p3 , t1 ) + w(t1 , p3 ) untuk pi = p3 sehingga x′ (p3 ) = 0 − 0 + 1 = 1. Jadi keadaan Petri net setelah transisi t1 difire adalah x′ = [0, 1, 1, 0]T . Token pada place dan bobot arc ditulis secara ringkas agar penulisan lebih sederhana. Dalam hal ini digunakan notasi vektor. Untuk menyatakan [x(p1 ), x(p2 ), . . . , x(pn )]T ditulis x [p1 , p2 , . . . , pn ]T dan untuk menyatakan [w(p1 , tj ), w(p2, tj ), . . . , w(pn , tj )]T dapat ditulis w [p1 , p2 , . . . , pn ]T , tj dengan 1 ≤ j ≤ m. Pengertian ini dituliskan dalam definisi berikut. Definisi 2.9. Diberikan (P, T, A, w) Petri net. Jika {p′1 , p′2 , . . . , p′n1 } ⊆ P dan t ∈ T maka berlaku def x [p′1 , p′2 , . . . , p′n1 ]T = [x(p′1 ), x(p′2 ), . . . , x(p′n1 )]T def w [p′1 , p′2 , . . . , p′n ]T , t = [w(p′1 , t), w(p′2, t), . . . , w(p′n , t)]T
(2.8)
Untuk memperjelas penggunaan Definisi 2.9, berikut dibahas penggunaan notasi vektor pada permasalahan pemfirean transisi. Tujuan penggunaan notasi vektor adalah mempersingkat penulisan. t1
•• p1
t2
p2
• p4
p3 t3
Gambar 2.8 Keadaan Awal Petri net Bertanda Pada contoh berikut dibahas pemfirean Petri net pada Gambar 2.8. Disini terdapat dua hal yang penting yaitu proses pemfirean dan penggunaan notasi pada Definisi 2.9. Contoh 2.7. Gambar 2.8 merupakan keadaan awal Petri net sebagai contoh ilustrasi pemfirean transisi dan perubahan keadaan. Place input dari transisi t1 adalah p1 sedangkan place outputnya adalah p2 dan p3 yang dapat dinotasikan I(t1 ) = {p1 } dan O(t1 ) = {p2 , p3 }. Place input dari transisi t2 adalah p2 20
dan p3 sedangkan p2 dan p4 merupakan place outputnya yang dapat ditulis I(t2 ) = {p2 , p3 } dan O(t2 ) = {p2 , p4 }. Transisi t3 mempunyai place input p1 , p3 dan p4 tetapi tidak mempunyai place output, yaitu I(t3 ) = {p1 , p3 , p4 } dan O(t3 ) = ∅. Keadaan awal Petri net adalah x0 = [x(p1 ), x(p2 ), x(p3 ), x(p4 )]T yaitu x0 = [2, 0, 0, 1]T . Terlihat pada Gambar 2.8 bahwa satu-satunya transisi yang enabled adalah t1 , karena transisi tersebut hanya membutuhkan sebuah token dari place p1 dan token pada place p1 berjumlah dua, yaitu x(p1 ) = 2. Jelas bahwa 2 = x(p1 ) ≥ w(p1 , t1 ) = 1 sehingga transisi t1 memenuhi persamaan (2.6). Transisi t2 tidak enabled karena tidak ada token pada place p2 dan p3 yang dapat ditulis 0 = x [p2 , p3 ]T < w [p2 , p3 ]T , t2 = 1. No-
tasi 0 dan 1 menyatakan vektor yang semua elemennya masing-masing 0 dan 1. Jumlah elemen pada vektor tergantung kondisi, pada pertidaksamaan tersebut vektor terdiri dari dua elemen. Transisi t3 tidak enabled karena [2, 0, 1]T = x [p1 , p3 , p4 ]T w [p1 , p3 , p4 ]T , t3 = 1. Ketika transisi t1 difire maka sebuah token diambil dari place p1 dan sebuah token ditambahkan ke place p2 dan p3 seperti pada Gambar 2.9. Persamaan (2.7) juga dapat digunakan untuk mengetahui keadaan berikutnya.
t1
• p1
• p2 • p3
t2 • p4 t3
Gambar 2.9 Keadaan Petri net Setelah Transisi t1 Difire Keadaan Petri net menjadi x1 = 1 seperti terlihat pada Gambar 2.9. Transisi t1 enabled karena ada satu token di p1 , ditulis x(p1 ) = 1 = w(p1 , t1 ). Kondisi x [p2 , p3 ]T = 1 = w [p2 , p3 ]T , t2 menyebabkan transisi t2 enabled.
Pemfirean dapat dilakukan pada transisi t3 karena terdapat token pada place p1 , p3 dan p4 , yaitu x [p1 , p3 , p4 ]T = 1 = w [p1 , p3 , p4 ]T , t3 . Jadi pada
keadaan ini semua transisi enabled karena semua place sudah terisi token. Selanjutnya misal transisi t2 difire. Pada setiap place input dari transisi t2 , token dikurangi satu. Dalam hal ini pada place p2 dan p3 sehingga kedua place tersebut tidak mempunyai token. Place output dari transisi t2 adalah p2 dan p4 . Sebuah token ditambahkan ke place p2 sehingga place p2 21
kembali mempunyai sebuah token. Ingat bahwa place p2 adalah place input sekaligus place output dari transisi t2 yang ditulis p2 ∈ I(t2 ) ∩ O(t2 ). Selain place p2 , place output dari transisi t2 adalah place p4 sehingga pada place tersebut ditambahkan sebuah token. Jumlah token yang berada pada place p4 bertambah menjadi dua. Keadaan Petri net menjadi x2 = [1, 1, 0, 2]T yang ditunjukkan oleh Petri net pada Gambar 2.10. Transisi t1 tetap enabled karena place p1 mempunyai sebuah token dan arc yang menghubungkan place p1 ke transisi t1 mempunyai bobot satu yang dapat ditulis x(p1 ) = 1 = w(p1, t1 ). Tidak adanya token pada place p3 menyebabkan transisi t2 dan t3 tidak enabled. Hal ini dapat ditulis sebagai [1, 0]T = x [p2 , p3 ]T w [p2 , p3 ]T , t2 = 1 dan.[1, 0, 2]T = x [p1 , p3 , p4 ]T w [p1 , p3 , p4 ]T , t3 = 1. Jadi pada keadaan ini satu-satunya transisi yang enabled adalah t1 . t1
• p1
• p2
t2 •• p4
p3 t3
Gambar 2.10 Keadaan Petri net Setelah Transisi t1 Difire Kemudian t2 Mari kembali ke keadaan x1 yaitu Petri net pada Gambar 2.9 dimana semua transisi enabled. Jika sebelumnya transisi yang difire adalah t1 maka sekarang transisi t3 difire. Token pada setiap place input dari transisi t3 dikurangi satu yaitu pada place p1 , p3 dan p4 . Perhatikan bahwa tidak ada place output dari transisi t3 . Keadaan ini juga dinotasikan dengan x2 karena pemfirean sudah dilakukan dua kali sejak keadaan x0 . t1
• p2
t2
p3
p4
p1
t3
Gambar 2.11 Keadaan Petri net Setelah Transisi t1 Difire Kemudian t3 Keadaan Petri net pada Gambar 2.11 menjadi x2 = [0, 1, 0, 0]T . Transisi t1 tidak enabled karena 0 = x(p1 ) < w(p1 , t1 ) = 1 yaitu tidak ada token 22
pada place p1 . Kondisi [1, 0]T = x [p2 , p3 ]T
w [p2 , p3 ]T , t2
= 1 me-
nyebabkan transisi t2 tidak enabled. Transisi t3 juga tidak enabled karena 0 = x [p1 , p3 , p4 ]T < w [p1 , p3 , p4 ]T , t3 = 1, yaitu semua place input dari
t3 tidak mempunyai token. Jadi semua transisi tidak enabled dengan keadaan x2 = [0, 1, 0, 0]T . Keadaan dimana Petri net mengalami deadlock disebut keadaan terminal dari Petri net.
Urutan pemfirean transisi tidak diberikan pada Petri net. Seperti contoh sebelumnya, pada keadaan x1 ketiga transisi dapat difire. Tidak adanya data mengenai transisi mana yang difire bukan hal yang mengejutkan karena model sistem event diskrit yang dibahas adalah tanpa waktu (untimed ). Pada model Petri net ini tidak ada informasi terjadinya event (transisi). Dengan tidak adanya mekanisme untuk menentukan transisi berikutnya maka harus diteliti setiap kemungkinan urutan pemfirean secara terpisah. Dengan menggunakan definisi yang telah dibahas pada bagian ini, sulit untuk mengimplementasikan Petri net ke dalam program. Pada pembahasan berikutnya dikaji representasi Petri net dalam matriks yang bertujuan memudahkan implementasi Petri net ke program. Representasi dengan matriks dapat digunakan untuk mendesain Petri net dengan jumlah place dan transisi yang besar. Hal ini sulit dilakukan secara visual.
2.4
Representasi Petri net Menggunakan Matriks
Pada bagian ini dikaji representasi Petri net dalam notasi matriks. Seperti yang telah dikutip pada bagian sebelumnya, hal ini bertujuan untuk memudahkan dalam implementasi. Petri net dapat direpresentasikan dalam dua matriks yang disebut backward incidence dan forward incidence. Kedua matriks ini masing-masing berukuran n×m dengan n adalah jumlah place dan m adalah jumlah transisi. Elemen matriks ini adalah bilangan bulat taknegatif. Matriks backward incidence dan forward incidence masing-masing serupa dengan definisi place input dan output pada persamaan (2.1). Elemen pada matriks backward incidence merupakan bobot arc yang menghubungkan place ke transisi. Jika tidak ada arc yang menghubungkan place ke transisi maka bobot arc diisi nol. Jelas bahwa place ini adalah place input dari transisi. Definisi serupa juga digunakan untuk matriks forward incidence. Bedanya 23
elemen pada matriks ini merupakan bobot arc yang menghubungkan transisi ke place sehingga merupakan place output dari transisi. Definisi 2.10. Matriks backward (forward ) incidence yang merepresentasikan Petri net adalah matriks berukuran n×m dengan elemen baris ke-i kolom ke-j def
def
adalah Ab (i, j) = w(pi , tj ) (Af (i, j) = w(tj , pi)). Salah satu kegunaan matriks backward incidence adalah menentukan transisi yang enabled. Perhatikan kembali persamaan (2.5), persamaan itu berlaku hanya untuk place input. Jika pi bukan merupakan place input dari transisi tj yaitu pi ∈ / I(tj ) maka bobot arc dari place pi ke transisi tj adalah nol karena tidak ada arc yang menghubungkannya, ditulis w(pi, tj ) = 0. Persamaan (2.5) pasti benar karena x(pi ) ≥ 0. Jadi persamaan (2.5) berlaku untuk semua place sehingga dapat ditulis dalam notasi vektor berikut. x([p1 , . . . , pn ]T ) ≥ w([p1 , . . . , pn ]T , tj ) = Ab (:, j)
(2.9)
= Ab ej dengan Ab (:, j) menyatakan kolom ke-j dari matriks Ab dan ej merupakan kolom ke-j matriks identitas berorder m. Terlihat pada persamaan (2.9) transisi tj enabled jika vektor keadaan lebih besar atau sama dengan kolom ke-j dari matriks backward incidence yaitu x ≥ Ab (:, j). Dengan kata lain penentuan transisi yang enabled dapat dilakukan dengan mencari kolom dari matriks backward incidence yang kurang dari atau sama dengan vektor keadaan. Persamaan (2.9) dapat ditulis lebih ringkas menjadi x ≥ Ab ej
(2.10)
Perhatikan persamaan (2.7) yang mendeskripsikan bagaimana tanda pada place berubah ketika suatu transisi difire. Selanjutnya akan diturunkan bentuk persamaan vektor dari (2.7) untuk memperoleh keadaan Petri net beri kutnya yang dinotasikan x′ = x′ [p1 , p2 , . . . , pn ]T jika keadaan saat ini adalah x = x [p1 , p2 , . . . , pn ]T dan kenyataan bahwa suatu transisi tj ∈ T telah difire
dengan 1 ≤ j ≤ m. Perhatikan bahwa persamaan (2.7) berlaku untuk semua place di Petri net. Dengan menggunakan notasi vektor yang telah didefinisikan 24
sebelumnya maka persamaan (2.7) dapat ditulis kembali menjadi persamaan yang lebih ringkas dan sederhana. x′ [p1 , . . . , pn ]T = x [p1 , . . . , pn ]T −w [p1 , . . . , pn ]T , tj +w tj , [p1 , . . . , pn ]T (2.11) Berdasarkan Definisi 2.10 maka w [p1 , . . . , pn ]T , tj merupakan kolom ke-j matriks backward incidence yang dinotasikan Ab (:, j). Notasi Af (:, j) menyatakan kolom ke-j matriks forward incidence yaitu w tj , [p1 , . . . , pn ]T pada persamaan (2.11). Dengan menggunakan notasi Af dan Ab maka persamaan (2.11) dapat ditulis menjadi x′ [p1 , . . . , pn ]T = x [p1 , . . . , pn ]T − Ab (:, j) + Af (:, j) = x [p1 , . . . , pn ]T − Ab ej + Af ej = x [p1 , . . . , pn ]T + (−Ab + Af ) ej = x [p1 , . . . , pn ]T + A ej
(2.12)
dengan ej adalah kolom ke-j dari matriks identitas berorder m dan A = Af −Ab . Matriks A disebut matriks combined incidence atau matriks incidence. Elemen matriks ini adalah bilangan bulat yang merupakan selisih bobot arc place input dan output yaitu A(i, j) = w(tj , pi ) − w(pi, tj ). Terlihat dari persamaan (2.12) bahwa nilai j menentukan indeks transisi yang difire. Dengan menggunakan notasi vektor maka persamaan (2.12) dapat dinyatakan sebagai x′ = x + A u
(2.13)
dengan u menyatakan vektor kolom yang mempunyai elemen sebanyak m yaitu diperoleh dari kolom matriks identitas. Contoh 2.8. Petri net yang dibahas disini adalah Petri net pada Gambar 2.6 di Contoh 2.5. Terdapat dua place dan sebuah transisi sehingga n = 2 dan m = 1. Matriks backward incidence dan forward incidence berukuran 2 × 1 yaitu Ab = [2, 0]T dan Af = [0, 1]T . Keadaan awal Petri net dapat ditulis x0 = [2, 1]T . Berdasarkan persamaan (2.10) maka transisi t1 enabled karena x0 ≥ Ab sehingga transisi t1 dapat difire. Sebelum memfire transisi t1 dihitung matriks incidence terlebih dahulu supaya dapat menggunakan persamaan (2.13) untuk menentukan keadaan berikutnya. Matriks incidence merupakan selisih antara forward incidence dan backward incidence yaitu A = Af − Ab = [0, 1]T − [2, 0]T = [−2, 1]T . Dengan 25
menggunakan persamaan (2.13) diperoleh x1 = [2, 1]T + [−2, 1]T 1 = [0, 2]T yang sama dengan keadaan Petri net setelah transisi t1 difire seperti pada Gambar 2.7. Setelah mengetahui proses pencarian transisi yang enabled dan proses pemfirean transisi yang enabled pada Contoh 2.5, berikutnya dikaji Petri net pada Contoh 2.7. Contoh 2.9. Terdapat empat place dan tiga transisi pada Petri net ini sehingga n = 4 dan m = 3. Matriks backward incidence dan forward incidence masing-masing berukuran 4 × 3 sebagai berikut.
1 0 Ab = 0 0
0 1 1 0 , 1 1 0 1
0 1 Af = 1 0
0 0 1 0 0 0 1 0
(2.14)
Keadaan awal Petri net adalah x0 = [2, 0, 0, 1]T . Transisi t1 enabled karena x0 ≥ Ab (:, 1) sedangkan transisi t2 dan t3 tidak enabled karena x0 Ab (:, j) untuk j = 2, 3. Selanjutnya dihitung matriks incidence yang dapat digunakan untuk menentukan keadaan berikutnya. 0 0 0 1 1 1 0 0 A = Af − Ab = 1 0 0 − 0 0 1 0 0
0 1 −1 0 −1 1 0 0 0 = 1 1 −1 −1 1 1 0 1 0 1 −1
(2.15)
Untuk menentukan keadaan berikutnya, gunakan persamaan (2.13). Transisi yang difire adalah t1 karena transisi tersebut enabled. 2 −1 0 −1 2 −1 1 1 0 1 0 0 0 1 1 x1 = x0 + A e1 = 0 + 1 −1 −1 0 = 0 + 1 = 1 (2.16) 0 1 0 1 −1 1 0 1 Dari persamaan (2.16) diperoleh x1 = [1, 1, 1, 1]T sama seperti Petri net pada Gambar 2.9. Tidak sulit untuk melihat bahwa x1 ≥ Ab (:, j) dengan 1 ≤ j ≤ 3 sehingga semua transisi enabled. Transisi yang difire berikutnya adalah t2 26
agar urutan transisi yang difire sama dengan Contoh 2.7. Cara yang sama digunakan untuk memperoleh keadaan setelah transisi t2 difire. 1 0 1 −1 0 −1 1 0 1 1 0 0 1 + 0 = 1 (2.17) + = x2 = x1 + A e2 = 1 1 −1 0 1 1 −1 −1 0 2 1 1 0 1 −1 1 Keadaan berikutnya adalah x2 = [1, 1, 0, 2]T yang sama dengan keadaan Petri net pada Gambar 2.10. Pada keadaan ini satu-satunya transisi yang enabled adalah t1 karena x2 ≥ Ab (:, 1) dan x2 Ab (:, j) untuk j = 2, 3. Telah diketahui bahwa pada keadaan x1 , semua transisi enabled. Jika sebelumnya transisi yang difire adalah t2 maka sekarang dipilih transisi yang lain untuk difire yaitu t3 . 0 −1 1 −1 0 −1 1 0 1 1 0 0 1 0 1 x2 = x1 + A e2 = 1 + 1 −1 −1 0 = 1 + −1 = 0 (2.18) 1 0 −1 1 0 1 −1 1 Perhatikan bahwa persamaan (2.18) menyatakan keadaan Petri net pada Gambar 2.11. Pada keadaan ini tidak ada transisi yang enabled karena x2 Ab (:, j) untuk 1 ≤ j ≤ 3 sehingga Petri net mengalami deadlock. Permasalahan yang akan dikaji berikutnya adalah analisis sistem event diskrit. Aspek yang dianalisis pada sistem event diskrit meliputi keterbatasan (boundedness), liveness, deadlock dan lain-lain. Analisis sistem dapat digunakan untuk menentukan performa sistem event diskrit dan menentukan kestabilan sistem.
2.5
Analisis Model Sistem Event Diskrit Tak Berwaktu Analisis model sistem event diskrit tak berwaktu terdiri dari peng-
kajian logika dan perilaku kualitatifnya. Saat mendesain sistem event diskrit diberikan spesifikasi yang harus dipenuhi. Spesifikasi berupa menghindari keadaan yang ”tidak diinginkan” atau mencapai keadaan yang ”diinginkan” dalam waktu tertentu. Setelah sistem event diskrit sudah didesain maka sistem harus diverifikasi apakah sudah memenuhi spesifikasi yang diberikan. 27
Langkah pertama adalah mengkategorikan beberapa permasalahan yang berhubungan dengan analisis sistem event diskrit. Permasalahan ini berhubungan dengan sistem tanpa memperhatikan representasi yang digunakan misalnya Petri net atau automata. Agar terminologi dan notasi yang digunakan konsisten maka dipilih salah satu representasi sebagai acuan. Pada penelitian ini Petri net digunakan sebagai acuan karena sifatnya yang umum sehingga memudahkan dalam menunjukkan keterbatasan teknik yang dikaji. Sebelum mengkaji permasalahan yang berhubungan dengan analisis sistem event diskrit, terlebih dahulu dibahas teknik analisis yang digunakan. Teknik analisis yang digunakan adalah coverability tree. Beberapa permasalahan dapat dianalisis menggunakan teknik ini meskipun teknik ini juga mempunyai kelemahan. 2.5.1
Liveness dan Deadlocks
Pada kajian sebelumnya sering dijumpai istilah deadlock yang secara mudah berarti keadaan dimana tidak ada transisi yang enabled. Deadlock dapat disebabkan persaingan memperoleh resource. Ketika semua pihak tidak memperoleh resource yang dibutuhkan maka terjadi deadlock. Resource dalam Petri net biasanya dinyatakan dengan token dan pihak yang bersaing memperoleh token adalah transisi. Dengan menggunakan keterangan sebelumnya maka dapat disimpulkan bahwa deadlock terjadi ketika transisi tertentu atau himpunan transisi pada Petri net tidak dapat difire. Transisi yang tidak berhubungan dengan deadlock disebut live. Perhatikan bahwa transisi yang live tidak harus enabled. Istilah liveness dapat diartikan dengan transisi yang mungkin enabled. Idealnya setiap transisi pada Petri net dapat difire setelah beberapa pemfirean. Hal ini menjamin deadlock tidak terjadi. Definisi 2.11 (Cassandras, 1993). Petri net dengan keadaan awal x0 disebut live jika terdapat beberapa sample path sedemikian hingga selalu ada transisi yang dapat difire untuk setiap keadaan yang dapat dicapai dari x0 . Pengujian liveness dengan menggunakan Definisi 2.11 merupakan pekerjaan yang tidak mudah. Pada beberapa sistem, pengujian liveness tidak bisa dilakukan. Cara mengatasi permasalahan ini yaitu menggunakan klasifikasi liveness. 28
Diberikan keadaan awal x0 , berikut merupakan klasifikasi dari liveness suatu transisi di Petri net (Cassandras, 1993). • Dead atau L0-live, jika transisi tidak pernah dapat difire dengan keadaan awal ini. • L1-live, jika terdapat beberapa urutan pemfirean dari x0 sedemikian hingga transisi ini dapat difire paling tidak sekali. • L2-live, jika transisi dapat difire paling tidak sebanyak k kali dengan k adalah bilangan integer positif. • L3-live, jika terdapat takhingga urutan pemfirean dengan pemfirean transisi ini sebanyak takhingga. • Live atau L4-live, jika transisi ini L1-live untuk setiap kemungkinan keadaan yang dapat dicapai dari x0 .
t3
t2
• p1
p2 t1
Gambar 2.12 Transisi dengan Liveness Berbeda-beda Pemahaman klasifikasi liveness akan menjadi lebih mudah jika diberikan contoh. Berikut merupakan contoh yang menjelaskan tingkat liveness setiap transisi pada Petri net di Gambar 2.12. Transisi pada Petri net tersebut akan diklasifikasikan. Contoh 2.10. Transisi t2 termasuk dead. Hal ini disebabkan transisi t2 dapat difire jika terdapat token pada p1 dan p2 yang tidak pernah terjadi (jika t1 difire maka p2 menerima sebuah token sedangkan p1 kehilangan tokennya). Transisi t1 adalah L1-live karena transisi tersebut hanya dapat difire sekali. Jika transisi t1 difire maka semua transisi menjadi dead pada keadaan tersebut. Transisi t3 merupakan L3-live karena transisi tersebut dapat difire sebanyak takhingga tetapi transisi itu tidak L4-live karena dapat menjadi dead pada keadaan setelah pemfirean t1 . 29
Setelah mengetahui definisi deadlock dan liveness maka pada bagian berikutnya dikaji coverability tree. Seperti yang telah dijelaskan sebelumnya teknik ini dapat digunakan untuk menganalisis performa model dan menentukan kestabilannya. 2.5.2
Coverability Tree
Coverability tree merupakan teknik yang digunakan untuk menyelesaikan beberapa aspek analisis pada sistem event diskrit. Aspek analisis yang dapat diselesaikan dengan menggunakan coverability tree antara lain keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. Ketiga aspek tersebut dibahas setelah membahas coverability tree. Setiap node pada coverability tree menyatakan keadaan Petri net. Coverability tree dapat dibangun dari Petri net dengan keadaan awal. Keadaan awal Petri net didefinisikan sebagai node root. Anak dari node root merupakan keadaan yang dapat dicapai dari keadaan awal dengan memfire sebuah transisi. Keadaan-keadaan ini dihubungkan ke node root dengan edge. Setiap edge pada coverability tree mempunyai bobot sebuah transisi yaitu transisi yang difire untuk mencapai keadaan tersebut. • p2 • p1
p3
t1
t2
Gambar 2.13 Keadaan Awal Petri net Perhatikan Petri net pada Gambar 2.13. Terdapat tiga place pada Petri net tersebut yaitu p1 , p2 dan p3 sehingga himpunan place P ditulis P = {p1 , p2 , p3 }. Terlihat dari Gambar 2.13 bahwa Petri net mempunyai 2 transisi yaitu t1 dan t2 sehingga himpunan transisi T ditulis T = {t1 , t2 }. Keadaan awal Petri net adalah x0 = [1, 1, 0]T . Contoh berikut menjelaskan proses membangun coverability tree dari Petri net di Gambar 2.13. Contoh 2.11. Tulis keadaan ini pada coverability tree sebagai root. Satusatunya transisi yang enabled pada keadaan ini adalah t1 . Setelah transisi t1 difire keadaan Petri net berubah menjadi x1 = [0, 0, 1]T . Tambahkan pada coverability tree keadaan x1 sebagai anak dari keadaan awal dan hubungkan dengan anak panah dari x0 ke x1 . Pada anak panah dituliskan transisi yang 30
difire, dalam hal ini adalah t1 . Jelas bahwa pada keadaan x1 hanya transisi t2 yang dapat difire. Keadaan menjadi x2 = [1, 1, 0]T setelah t2 difire yaitu sama dengan keadaan awal Petri net. Sama dengan sebelumnya, tambahkan keadaan x2 pada coverability tree sebagai anak dari x1 dan cantumkan pada anak panah transisi yang difire yaitu t2 . Hasil akhir coverability tree dapat dilihat pada Gambar 2.14. Coverability tree pada Gambar 2.14 mempunyai 3 node. Banyak keadaan yang berbeda dari coverability tree ada 2 yaitu [1, 1, 0]T dan [0, 0, 1]T . Coverability tree dapat dilihat sebagai diagram perubahan keadaan Petri net yang dapat dijelaskan sebagai berikut. Pemfirean transisi t1 pada keadaan [1, 1, 0]T menyebabkan keadaan berubah menjadi [0, 0, 1]T . Keadaan [0, 0, 1]T berubah menjadi [1, 1, 0]T setelah transisi t2 difire. Pada umumnya untuk menggambarkan tree, root terletak di bagian atas dan anak dari node berada di bagian bawah. Mengingat node pada coverability tree merupakan vektor kolom maka posisi root berada di kiri dan anak berada di bagian kanan agar daerah yang dibutuhkan untuk menggambar coverability tree lebih kecil. Semua coverability tree yang dibahas disini menggunakan urutan ini.
1 0 1 1 t1 0 t2 1 0 1 0 Gambar 2.14 Coverability Tree untuk Petri net di Gambar 2.13 Pada Contoh 2.11, coverability tree yang dibangun termasuk sederhana karena semua place pada Petri net terbatas (bounded ) sehingga banyak keadaan yang dapat dicapai dari keadaan awal adalah berhingga. Coverability tree ini juga disebut reachability tree karena memuat semua keadaan yang mungkin terjadi. Banyak node dan edge pada coverability tree tidak berhingga jika Petri net tidak terbatas (unbounded ) yaitu terdapat place yang tidak terbatas. Dengan menggunakan metode membangun coverability tree yang dibahas pada (Cassandras, 1993) dapat dicari representasi hingga dari coverability tree meskipun dengan resiko kehilangan beberapa informasi. 31
Selanjutnya dibahas metode membangun coverability tree jika tidak semua place di Petri net terbatas (bounded ). p4 p2
t2 • p1
p3
t1
t3
Gambar 2.15 Keadaan Awal Petri net Perhatikan Petri net pada Gambar 2.15. Terdapat 4 place pada Petri net yaitu p1 , p2 , p3 dan p4 sehingga himpunan place P dapat ditulis dengan ekspresi P = {p1 , p2 , p3 , p4 }.
1 0 0 0
t1
0 0 1 1
t 3 0 1 1 t 2 1 0 0 1 0
t1
0 0 2 1
t 3 0 1 2 t 2 1 0 0 2 0
Gambar 2.16 Sebagian Coverability Tree Petri net di Gambar 2.15 Proses membuat coverability tree untuk Petri net pada Gambar 2.15 dengan keadaan awal x0 = [1, 0, 0, 0]T diilustrasikan pada contoh berikut. Contoh 2.12. Tuliskan keadaan awal Petri net pada coverability tree sebagai root. Jelas bahwa pada keadaan ini hanya transisi t1 yang enabled. Setelah transisi t1 difire keadaan Petri net menjadi x1 = [0, 1, 1, 0]T dan terdapat dua transisi yang dapat difire yaitu t2 dan t3 . Hal ini dapat digambarkan pada coverability tree dengan menuliskan x1,2 = [1, 0, 1, 0]T dan x1,3 = [0, 0, 1, 1]T sebagai anak dari keadaan x1 . Tidak ada transisi yang enabled pada keadaan x1,3 sehingga keadaan ini tidak mempunyai anak sedangkan keadaan x1,2 mempunyai sebuah anak yaitu keadaan x1,2,1 = [0, 1, 2, 0]T yang merupakan keadaan setelah transisi t1 difire. Pada keadaan x1,2,1 transisi t2 dan t3 32
enabled dan jika difire diperoleh keadaan masing-masing x1,2,1,2 = [1, 0, 2, 0]T dan x1,2,1,3 = [0, 0, 2, 1]T . Terlihat bahwa jumlah node dan arc coverability tree untuk Petri net pada Gambar 2.15 sebanyak takhingga. Coverability tree untuk Petri net pada Gambar 2.15 dapat dilihat pada Gambar 2.16. Proses ini sudah cukup untuk mendapatkan pola tree ini. Setiap anak pada bagian atas adalah keadaan terminal dengan sebuah tambahan token pada p3 . Anak yang diperoleh pada bagian bawah mengulang bagian sebelumnya dengan sebuah tambahan token pada p3 . Proses membangun coverability tree tidak pernah selesai karena terdapat takhingga node di coverability tree. Ini adalah contoh coverability tree takhingga yang disebabkan place p3 tak terbatas (unbounded ). Berikut notasi yang digunakan pada (Cassandras, 1993) untuk menjelaskan langkah-langkah yang dilakukan untuk membangun coverability tree dengan jumlah node berhingga. 1. Node root. Ini adalah node pertama dari tree dan merupakan keadaan awal yang diberikan seperti [1, 1, 0]T pada Contoh 2.11 dan [1, 0, 0, 0]T pada Contoh 2.12. 2. Node terminal. Ini adalah node yang menyatakan keadaan deadlock yaitu tidak ada transisi yang enabled. Sebagai contoh adalah keadaan [0, 0, 1, 1]T dan [0, 0, 2, 1]T pada Gambar 2.15. 3. Node duplicate. Ini adalah node yang sama dengan node yang sudah ada di tree. Misalnya pada Gambar 2.13, node [1, 1, 0]T yang diperoleh dari pemfirean transisi t1 t2 adalah node duplicate dari node root. 4. Hubungan dominasi node. Misalkan notasi x = [x(p1 ), . . . , x(pn )]T dan notasi y = [y(p1 ), . . . , y(pn )]T menyatakan dua keadaan, yaitu node pada coverability tree. Node x mendominasi y yang dinotasikan x >d y jika kedua kondisi berikut dipenuhi. (a) x(pi ) ≥ y(pi) untuk semua i = 1, . . . , n (b) x(pi ) > y(pi) untuk satu atau lebih i = 1, . . . , n Sebagai contoh pada tree di Gambar 2.16 yaitu keadaan [1, 0, 2, 0]T mendominasi [1, 0, 1, 0]T sehingga dapat ditulis [1, 0, 2, 0]T >d [1, 0, 1, 0]T . Keadaan [1, 0, 2, 0]T tidak mendominasi [0, 1, 1, 0]T . 33
5. Simbol ω. Ini menyatakan ”takhingga” yang merepresentasikan penanda place yang unbounded. Simbol ini digunakan ketika terdapat relasi dominasi pada node di coverability tree. Jika x >d y maka nilai x(pi ) diganti ω untuk semua i yang memenuhi x(pi ) > y(pi). Perhatikan bahwa menambah (mengurangi) token ke (dari) place dengan penanda ω tidak berpengaruh, yaitu ω ± k = ω untuk setiap k = 0, 1, 2, . . . . Pada Gambar 2.16 berlaku [1, 0, 1, 0]T >d [1, 0, 0, 0]T . Jelas bahwa elemen ketiga dari [1, 0, 1, 0]T lebih besar daripada [1, 0, 0, 0]T sehingga keadaan [1, 0, 1, 0]T berubah menjadi [1, 0, ω, 0]T . Dengan menggunakan notasi dan definisi pada pembahasan sebelumnya maka urutan langkah untuk membangun coverability tree dengan jumlah node berhingga dapat dituliskan sebagai berikut (Cassandras, 1993). Diberikan Petri net (P, T, A, w, x0 ). 1. Inisialisasi x = x0 (keadaan awal). 2. Untuk setiap node x, evaluasi nilai fungsi transisi f (x, tj ) untuk semua tj ∈ T seperti di bawah ini. (a) Jika f (x, tj ) tidak terdefinisi untuk semua tj ∈ T (tidak ada transisi yang enabled pada keadaan x) maka x adalah node terminal. (b) Jika f (x, tj ) terdefinisi untuk satu atau lebih tj ∈ T , maka hitung keadaan x′ sebagai node baru dengan persamaan x′ = f (x, tj ). Jika terdapat node y pada path dari node root x0 (termasuk) ke x sedemikian hingga x′ >d y maka x′ (pi ) = ω untuk semua pi yang memenuhi x′ (pi ) > y(pi). 3. Jika semua node baru merupakan node terminal atau duplicate maka berhenti. Selanjutnya dibahas contoh yang sederhana agar metode membangun coverability tree dengan node berhingga lebih mudah dipahami. Pada contoh ini diilustrasikan proses yang dilakukan dalam membangun coverability tree yang mempunyai node berhingga dengan menggunakan metode yang telah dituliskan. Perhatikan lagi Petri net pada Gambar 2.15. Langkah pertama yang dilakukan adalah mendefinisikan keadaan awal Petri net sebagai node root. Ingat bahwa keadaan awal Petri net adalah x0 = [1, 0, 0, 0]T sehingga keadaan tersebut didefinisikan sebagai node root pada coverability tree. 34
Node root berada di sebelah kiri pada coverability tree seperti terlihat pada Gambar 2.17. Proses yang dilakukan berikutnya dibahas pada contoh berikut. Contoh 2.13. Pada keadaan awal t1 enabled jadi x′ = f (x0 , t1 ) = [0, 1, 1, 0]T . Jika selanjutnya transisi yang difire adalah t3 maka diperoleh node terminal [0, 0, 1, 1]T . Keadaan [1, 0, 1, 0]T didapatkan jika transisi yang difire bukan t3 melainkan t2 . Perhatikan bahwa [1, 0, 1, 0]T >d [1, 0, 0, 0]T sehingga berdasarkan langkah 2b keadaan [1, 0, 1, 0]T diganti [1, 0, ω, 0]T . Ketika transisi t1 kemudian difire maka diperoleh node baru [0, 1, ω, 0]T yang mendominasi [0, 1, 1, 0]T pada path dari root ke [0, 1, ω, 0]T . Simbol ω telah digunakan pada place p3 sehingga keadaan ini tidak berubah. Keadaan [0, 0, ω, 1]T yang merupakan node terminal diperoleh dengan memfire transisi t3 . Jika transisi t2 yang difire maka diperoleh node duplicate [1, 0, ω, 0]T . Coverability tree yang lengkap dapat dilihat pada Gambar 2.17. Terlihat pada Gambar 2.17 bahwa metode tersebut menghasilkan coverability tree dengan jumlah node yang berhingga yaitu sebanyak 7 buah. Notasi ω pada coverability tree menunjukkan node berjumlah takhingga.
1 0 0 0
t1
0 0 1 1
t 3 0 1 1 t 2 1 0 0 ω 0
t1
0 0 ω 1
t 3 0 1 ω t 2 1 0 0 ω 0
Gambar 2.17 Representasi Hingga Coverability Tree di Gambar 2.16 Metode membangun coverability tree akan diubah menjadi algoritma agar dapat diimplementasikan ke bahasa pemrograman. Selanjutnya dibahas desain algoritma membangun coverability tree. Algoritma belum bisa dibuat 35
karena belum ada definisi yang jelas mengenai coverability tree. Untuk itu pada bagian berikut didefinisikan coverability tree. Selain itu juga dijelaskan beberapa istilah yang digunakan pada coverability tree seperti node, parent, anak (child ) beserta sifat-sifatnya. 2.5.2.1
Definisi Coverability Tree Petri net identik dengan coverability tree pada beberapa hal. Node
pada Petri net dapat berupa place atau transisi sedangkan node pada coverability tree berupa keadaan (state). Selain pada node perbedaan juga ada pada arc dan bobotnya. Arc Petri net menghubungkan place dengan transisi atau sebaliknya sedangkan arc coverability tree menghubungkan keadaan dan keadaan. Bobot arc Petri net merupakan bilangan bulat tak negatif sedangkan pada coverability tree bobot arc merupakan transisi. Coverability tree dari Petri net (P, T, A, w) dapat dinyatakan dengan 3-tuple yaitu (S, E, v) yang masing-masing menyatakan himpunan keadaan, himpunan edge dan fungsi bobot. Anggota dari himpunan keadaan merupakan n-tuple dengan n adalah jumlah place pada Petri net. Selain berupa bilangan bulat tak negatif, keadaan pada coverability tree juga bisa berupa ω. Untuk membedakan dengan Petri net maka pada coverability tree digunakan istilah edge. Definisi 2.12. Coverability tree untuk Petri net (P, T, A, w, x0 ) dinyatakan dengan 4-tuple (S, E, T, v) dimana • S : himpunan berhingga keadaan (state), S ⊆ {ω, 0, 1, . . . }n , • E : himpunan berhingga edge, E ⊆ S × S, • T : himpunan berhingga transisi, T = {t1 , t2 , . . . , tm }, • v : fungsi bobot, v : E → T . Perhatikan himpunan keadaan pada coverability tree bisa memuat simbol ω. Himpunan transisi pada coverability tree sama dengan himpunan transisi pada Petri net sehingga digunakan simbol yang sama yaitu T . Bobot pada coverability tree adalah transisi yang terletak pada edge. Berikutnya dibahas contoh mengidentifikasi coverability tree dengan menggunakan Definisi 2.12. Coverability tree yang digunakan sebagai contoh adalah coverability tree pada Gambar 2.17. 36
Contoh 2.14. Himpunan S = [1, 0, 0, 0]T , [0, 1, 1, 0]T , [0, 0, 1, 1]T , [1, 0, ω, 0]T , [0, 1, ω, 0]T , [0, 0, ω, 1]T adalah himpunan keadaan yang mempunyai 6 elemen sehingga himpunan ini berhingga (finite). Himpunan edge terdiri dari 6 elemen yaitu [1, 0, 0, 0]T , [0, 1, 1, 0]T , . . . , [0, 1, ω, 0]T , [1, 0, ω, 0]T . Himpunan T pada coverability tree sama dengan himpunan T pada Petri net. Pada contoh ini T = {t1 , t2 , t3 }. Fungsi bobotnya dapat ditulis dalam persamaan v [1, 0, 0, 0]T , [0, 1, 1, 0]T = t1 , . . . , v [0, 1, ω, 0]T , [1, 0, ω, 0]T = t2 .
Selanjutnya didesain algoritma untuk membangun coverability tree dari Petri net. Sebelum mengkaji hal tersebut dibahas beberapa istilah yang digunakan pada coverability tree. Istilah ini secara umum juga berlaku pada tree. Beberapa istilah yang sering digunakan misalnya root, anak (child ), parent dan sebagainya. Root pada tree merupakan node yang tidak mempunyai parent atau node yang bukan anak dari node yang lain. Pada coverability tree node root menyatakan keadaan awal Petri net. Istilah parent berhubungan dengan istilah anak. Jika node n1 merupakan parent dari n2 maka node n2 merupakan anak dari n1 . Ingat bahwa keadaan pada coverability tree mungkin mempunyai lebih dari satu parent. Hal ini terjadi jika node tersebut merupakan node duplicate. Parent pada coverability tree dapat dilihat sebagai pemetaan dari himpunan keadaan ke himpunan kuasa (power sets) dari himpunan keadaan. Himpunan kuasa dari himpunan keadaan dinotasikan 2S . Definisi 2.13. Parent pada coverability tree (S, E, T, v) adalah pemetaan dari himpunan keadaan S ke himpunan kuasa dari S yang ditulis parent : S → 2S . Berikut merupakan contoh penggunaan fungsi parent pada coverability tree. Coverability tree yang digunakan berada pada Gambar 2.17. Contoh 2.15. Keadaan [1, 0, 0, 0]T didefinisikan sebagai node root sehingga parent [1, 0, 0, 0]T = ∅. Parent dari keadaan [0, 0, 1, 1]T adalah [0, 1, 1, 0]T ditulis parent [0, 0, 1, 1]T = [0, 1, 1, 0]T . Node [1, 0, ω, 0]T adalah node du-
plicate yang mempunyai dua parent yaitu keadaan [0, 1, ω, 0]T dan [0, 1, 1, 0]T . Hal ini dapat dituliskan parent [1, 0, ω, 0]T = [0, 1, ω, 0]T , [0, 1, 1, 0]T .
37
Fungsi parent yang didefinisikan sebelumnya dapat diperluas menjadi pencarian parent dari himpunan keadaan. Untuk membedakan dengan fungsi sebelumnya maka fungsi ini disebut parents. Beda dengan fungsi parent terletak pada domain fungsinya. Domain fungsi parents adalah himpunan kuasa dari himpunan keadaan. Parent dari himpunan keadaan adalah gabungan (union) dari parent setiap elemen himpunan tersebut. Misalkan X = {x1 , x2 , . . . , xn } adalah himpunan keadaan maka def
parents(X) = parent(x1 ) ∪ parent(x2 ) ∪ · · · ∪ parent(xn ) [ = parent(x)
(2.19)
x∈X
Selanjutnya dibahas contoh menentukan parent dari himpunan keadaan dengan fungsi parents. Perhatikan kembali Contoh 2.15. Contoh 2.16. Pada contoh itu diperoleh parent [0, 0, 1, 1]T = [0, 1, 1, 0]T dan parent [1, 0, ω, 0]T = [0, 1, ω, 0]T , [0, 1, 1, 0]T . Parent dari himpunan X = [0, 0, 1, 1]T , [1, 0, ω, 0]T dapat ditentukan dengan cara berikut. parents(X) = parent [0, 0, 1, 1]T ∪ parent [1, 0, ω, 0]T = [0, 1, 1, 0]T ∪ [0, 1, ω, 0]T , [0, 1, 1, 0]T = [0, 1, ω, 0]T , [0, 1, 1, 0]T
(2.20)
Terlihat pada persamaan (2.20) bahwa parent dari X sama dengan parent dari [1, 0, ω, 0]T . Hal ini disebabkan parent [0, 0, 1, 1]T ⊆ parent [1, 0, ω, 0]T .
Setelah mendefinisikan coverability tree beserta beberapa hal yang berkaitan selanjutnya didesain algoritma membangun coverability tree dari Petri net berdasarkan metode yang telah dibahas pada bagian sebelumnya. Dalam menyusun algoritma, metode akan dibagi menjadi beberapa bagian agar lebih sederhana sehingga lebih mudah dipahami. Berikut merupakan bagian-bagian dari metode membangun coverability tree. • Menentukan parent bertingkat. • Menguji hubungan dominasi. • Mencari keberadaan node duplicate. 38
Selanjutnya dibahas penyusunan algoritma untuk menentukan parent bertingkat. Hasil dari algoritma ini akan dipakai sebagai input pada algoritma pengujian hubungan dominasi. 2.5.2.2
Menentukan parent bertingkat
Pada metode untuk membangun coverability tree terdapat langkah mencari node yang didominasi yang berada diantara node ini dengan node root. Untuk itu sebelum mendesain algoritma untuk menentukan node yang didominasi, harus didesain terlebih dahulu prosedur untuk membentuk himpunan node dari node ini hingga node root. Prosedur ini membutuhkan definisi fungsi parent dan perluasannya yang telah dibahas pada bagian sebelumnya. Idenya dengan mengumpulkan node yang menjadi parent dari node ini. Ditambah dengan node yang menjadi parents dari himpunan parent node ini. Proses ini diulang terus-menerus hingga semua node yang menjadi parent bertingkat sudah dihimpun. Metode seperti ini dapat mengakibatkan perulangan takhingga (infinite loop) yaitu jika terdapat node yang sama node ini dan berada pada jalur diantara node ini dengan node root. Untuk mengatasi hal ini, node yang sudah pernah diproses (mencari parent) harus disimpan. Node yang diproses berikutnya haruslah node yang baru. Algoritma 2.4 Himpunan Parent Bertingkat Input: x Output: P rt /* himpunan parent bertingkat */ 1 P rt ← {x}; T emp ← parent(x) /* inisialisasi */ 2 while T emp 6= ∅ do 3 T emp ← T emp − P rt 4 P rt ← P rt ∪ T emp; T emp ← parents(T emp) 5 end while 6 P rt ← P rt − {x} Himpunan T emp berisi node yang akan diproses dan himpunan P rt berisi node yang telah diproses. Perintah T emp ← T emp − P rt bertujuan menghindari terjadinya perulangan tak hingga. Selanjutnya ditentukan kompleksitas Algoritma 2.4 dengan menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Sebelum menghitung banyak kerja yang dilakukan harus ditentukan jenis operasi yang dihitung terlebih dahulu. Jenis operasi yang dihitung pada algoritma ini adalah mencari parent dari satu atau lebih keadaan karena operasi ini terdiri dari banyak operasi 39
dasar. Pada Algoritma 2.4, operasi ini dinyatakan dengan pemanggilan fungsi parent atau parents. Langkah yang dilakukan berikutnya adalah menentukan input yang menyebabkan banyak kerja yang dilakukan Algoritma 2.4 paling besar yaitu pada saat kemungkinan terburuk (worst case). Terdapat beberapa kondisi yang harus dipenuhi agar banyak kerja algoritma tersebut paling besar. Kondisi pertama adalah input coverability tree yang tidak memuat node duplicate sehingga pada setiap saat diperoleh satu keadaan baru yaitu variabel T emp mempunyai 1 anggota. Kondisi kedua adalah setiap node maksimum mempunyai 1 anak. Jelas bahwa terdapat 1 node yang tidak mempunyai anak. Kondisi terakhir adalah node yang tidak mempunyai anak digunakan sebagai input untuk Algoritma 2.4. Jika ketiga kondisi dipenuhi maka banyak kerja yang dilakukan algoritma sama dengan jumlah anggota himpunan keadaan yaitu |S| yang ditulis W (|S|) = |S| = O(|S|). Variabel tambahan pada Algoritma 2.4 adalah T emp. Memori yang dipakai oleh variabel ini tergantung jumlah anggotanya. Jumlah anggota himpunan T emp bermacam-macam yaitu 1 ≤ |T emp| ≤ r sehingga banyak memori yang dipakai juga berubah-ubah tergantung input yang diberikan. Jadi Algoritma 2.4 tidak bekerja di tempat (work in place). Untuk memperjelas proses yang dilakukan oleh Algoritma 2.4, contoh berikut membahas bagaimana menentukan parent bertingkat. Contoh 2.17. Perhatikan coverability tree pada Gambar 2.17. Himpunan parent bertingkat dari node [0, 0, 1, 1]T dapat dicari dengan Algoritma 2.4. Pada baris 1, variabel P rt diinisialisasi [0, 0, 1, 1]T dan T emp adalah pa rent dari node [0, 0, 1, 1]T yaitu [0, 1, 1, 0]T . Kondisi pada baris 2 dipenuhi karena T emp = [0, 1, 1, 0]T . Proses dilanjutkan ke baris 3. Kenyataan T emp ∩P rt = ∅ menyebabkan nilai variabel T emp tidak berubah setelah men jalankan baris 3. Baris 4 mengubah P rt menjadi [0, 0, 1, 1]T , [0, 1, 1, 0]T dan variabel T emp menjadi parent dari [0, 1, 1, 0]T yaitu [1, 0, 0, 0]T sehingga pernyataan pada baris 2 bernilai benar. Dengan menggunakan alasan yang sama dengan sebelumnya maka variabel T emp tidak berubah setelah men jalankan baris 3. Variabel P rt menjadi [0, 0, 1, 1]T , [0, 1, 1, 0]T , [1, 0, 0, 0]T
dan variabel T emp bernilai ∅ karena node [1, 0, 0, 0]T adalah node root dan tidak termasuk node duplicate. Hal ini menyebabkan pernyataan pada baris 2
tidak dipenuhi dan menuju ke baris 6. Nilai variabel P rt pada saat ini adalah [0, 1, 1, 0]T , [1, 0, 0, 0]T yang merupakan output dari Algoritma 2.4.
40
Kebetulan pada Contoh 2.17 semua node yang diproses tidak termasuk node duplicate sehingga hasil yang diperoleh sesuai. Jika terdapat node duplicate saat proses pembentukan himpunan parent maka hasil yang diperoleh oleh Algoritma 2.4 tidak selalu benar seperti diperlihatkan oleh contoh berikut. Contoh 2.18. Coverability tree yang digunakan pada contoh ini sama dengan coverability tree yang digunakan pada Contoh 2.17. Disini node yang digunakan sebagai input Algoritma 2.4 termasuk node duplicate yaitu [1, 0, ω, 0]T . Pada saat inisialisasi variabel P rt bernilai [1, 0, ω, 0]T dan T emp bernilai [0, 1, ω, 0]T , [0, 1, 1, 0]T yang merupakan parent dari [1, 0, ω, 0]T . Jelas bahwa T emp 6= ∅ sehingga kondisi pada baris 2 dipenuhi. Dengan alasan yang sama dengan contoh sebelumnya maka variabel T emp tidak berubah. Variabel P rt menjadi [1, 0, ω, 0]T , [0, 1, ω, 0]T , [0, 1, 1, 0]T . Nilai variabel T emp menjadi [1, 0, 0, 0]T , [1, 0, ω, 0]T sesudah menjalankan semua perintah pada baris 4 sehingga kondisi pada baris 2 terpenuhi. Sesudah menjalankan baris 3 ni lai variabel T emp menjadi [1, 0, 0, 0]T . Pada baris 4, variabel P rt bernilai [1, 0, ω, 0]T , [0, 1, ω, 0]T , [0, 1, 1, 0]T , [1, 0, 0, 0]T dan variabel T emp bernilai ∅.
Fakta ini menyebabkan kondisi pada baris 2 tidak dipenuhi dan dilanjutkan ke baris 6. Variabel P rt menjadi [0, 1, ω, 0]T , [0, 1, 1, 0]T , [1, 0, 0, 0]T yang menjadi output Algoritma 2.4.
Terlihat pada Contoh 2.18 bahwa Algoritma 2.4 menghasilkan himpunan parent bertingkat yang sama untuk keadaan yang sama meskipun node berbeda. Pada metode untuk membangun coverability tree yang dicari adalah jalur dari suatu node ke root. Jalur ini bersifat unik (unique) artinya untuk setiap node yang berbeda jalur yang dihasilkan juga berbeda meskipun keadaannya sama. Hal ini berawal dari Definisi 2.12 tentang coverability tree. Keadaan pada coverability tree didefinisikan sebagai himpunan. Salah satu sifat himpunan adalah setiap elemennya berbeda sehingga tidak dapat mengakomodasi adanya node duplicate. Fakta ini menyebabkan elemen himpunan keadaan tidak menyatakan node pada coverability tree atau dengan kata lain jumlah elemen himpunan keadaan tidak selalu sama dengan jumlah node pada coverability tree. Selanjutnya didefinisikan suatu list yang menyatakan node-node pada coverability tree. Elemen yang disimpan pada list tidak harus berbeda. Notasi 41
yang digunakan untuk menuliskan variabel list sama dengan vektor karena pada dasarnya list serupa dengan vektor baris. Selain himpunan keadaan, fungsi bobot juga harus didefinisikan kembali. Pendefinisian ulang dilakukan karena fungsi bobot sulit dituliskan dalam bentuk algoritma. Berdasarkan Definisi 2.12, setiap edge mempunyai bobot sebuah transisi. Transisi yang berfungsi sebagai bobot ini digabungkan ke pasangan berurutan yang menyatakan edge sehingga setiap edge dinyatakan sebagai 3-tuple. Elemen pertama dan kedua sama dengan Definisi 2.12 dan elemen ketiga merupakan transisi yang menjadi bobot edge. Berdasarkan pembahasan sebelumnya maka coverability tree dapat ditulis menjadi definisi berikut. Definisi 2.14. Coverability tree untuk Petri net (P, T, A, w, x0 ) dinyatakan dengan 3-tuple (S, Ev, T ) dimana • S : list node, S = [Si ] dengan Si ∈ {ω, 0, 1, . . . }|P | untuk 1 ≤ i ≤ r, • Ev : himpunan berhingga edge beserta bobotnya, Ev ⊆ {1, . . . , r}2 × T , • T : himpunan berhingga transisi, T = {t1 , t2 , . . . , tm }, Berikut dibahas proses mengidentifikasi masing-masing tuple pada Definisi 2.14. Perhatikan coverability tree pada Gambar 2.17. Contoh 2.19. Pada coverability tree tersebut terdapat 7 node sehingga list S = [S1 , S2 , . . . , S7 ]. Masing-masing elemen dari list S adalah S1 = [1, 0, 0, 0]T , S2 = [0, 1, 1, 0]T , S3 = [1, 0, ω, 0]T , S4 = [0, 1, ω, 0]T , S5 = [1, 0, ω, 0]T , S6 = [0, 0, ω, 1]T dan S7 = [0, 0, 1, 1]T . Edge pada coverability tree di Gambar 2.17 yaitu (1, 2, t1), (2, 3, t2), (3, 4, t1), (4, 5, t2 ), (1, 2, t1), (4, 6, t3), (2, 7, t3). Himpunan transisi T sama dengan pada Definisi 2.12 yaitu T = {t1 , t2 , t3 }. Definisi parent tergantung coverability tree sehingga jika definisi coverability tree diubah, definisi parent harus disesuaikan. Penyesuaian ini harus dilakukan karena terdapat perbedaan antara coverability tree di Definisi 2.12 dan 2.14 yaitu Definisi 2.12 menghimpun keadaan sedangkan Definisi 2.14 menghimpun node. Oleh karena itu pada Definisi 2.12, fungsi parent menentukan parent dari keadaan sedangkan di Definisi 2.14, fungsi parent menentukan parent dari node. Node root tidak mempunyai parent. Untuk itu didefinisikan parent dari node root adalah 0 (nol). 42
Definisi 2.15. Parent pada coverability tree (S, Ev, T ) adalah pemetaan dari {1, 2, . . . , r} ke {0, 1, . . . , r} dengan r adalah jumlah elemen dari list S. Satusatunya node yang tidak mempunyai parent adalah node root sehingga jika Si adalah node root dengan 1 ≤ i ≤ r maka satu-satunya yang dipetakan ke 0 adalah i. Perhatikan lagi Contoh 2.19 yang membahas coverability tree pada Gambar 2.17. Pada contoh tersebut dibahas bagaimana menentukan himpunan edge beserta bobot transisinya yang dinotasikan Ev di Definisi 2.14. Contoh berikut mengkaji bagaimana menggunakan definisi sebelumnya untuk menuliskan fungsi parent pada himpunan Ev. Contoh 2.20. Jelas bahwa S1 adalah node root sehingga parent memetakan 1 ke 0 yang dapat ditulis parent(1) = 0. Untuk node yang lain masing-masing dapat dituliskan sebagai berikut parent(2) = 1, parent(3) = 2, parent(4) = 3, parent(5) = 4, parent(2) = 1, parent(6) = 4, parent(7) = 2. Setelah mendefinisikan pemetaan parent yang sesuai untuk coverability tree pada Definisi 2.14 maka selanjutnya didesain algoritma menentukan node-node yang menjadi parent bertingkat dari node tertentu. Algoritma ini menggunakan pemetaan parent yang telah didefinisikan sebelumnya. Nodenode ini dapat ditentukan dengan mencari parent dari node tertentu. Proses ini diulang hingga mencapai node root. Algoritma 2.5 Modifikasi Parent Bertingkat Input: idnode Output: Prt /* list parent bertingkat */ 1 idparent ← parent(idnode); Prt ← [ ] /* inisialisasi */ 2 while idparent 6= 0 do 3 Prt ← [Prt, idparent] 4 idparent ← parent(idparent) 5 end while Input Algoritma 2.5 adalah idnode. Variabel ini adalah indeks dari node yang digunakan sebagai input sehingga 1 ≤ idnode ≤ |S|. Jika yang diinputkan adalah indeks dari node root maka algoritma tersebut menghasilkan 43
[ ] yang berarti node root tidak mempunyai parent. Hasil ini sesuai dengan Definisi 2.15. Pada baris 1 variabel idparent diinisialisasi dengan parent dari idnode dan Prt dengan list kosong yang dinotasikan [ ]. Kondisi pada baris 2 bernilai benar selama belum mencapai node root dengan kata lain perulangan tersebut dilakukan hingga mencapai node root. Ada dua hal yang dilakukan di dalam perulangan yaitu menyimpan idparent yang baru ke list Prt pada baris 3 dan mengupdate variabel idparent pada baris 4. Selanjutnya ditentukan kompleksitas algoritma modifikasi parent bertingkat. Pertama dihitung banyak kerja yang dilakukan oleh algoritma tersebut. Jenis operasi yang dihitung mirip dengan sebelumnya yaitu penentuan parent dari sebuah node. Terdapat 2 kondisi yang menyebabkan banyak kerja Algoritma 2.5 paling besar yaitu setiap node maksimum mempunyai 1 anak dan node yang dipilih sebagai input adalah node yang tidak mempunyai anak. Jelas bahwa terdapat 1 node yang tidak mempunyai anak pada coverability tree. Jika kedua kondisi tersebut dipenuhi maka banyak kerja yang dilakukan oleh Algoritma 2.5 sebanyak jumlah node di coverability tree yaitu |S| ditulis W (|S|) = |S| = O(|S|). Variabel idparent merupakan satu-satunya variabel tambahan pada Algoritma 2.5. Nilai yang disimpan variabel menyatakan indeks node pada coverability tree sehingga variabel ini bertipe integer. Jelas bahwa banyak memori yang dipakai variabel tambahan tetap yaitu tidak tergantung input yang diberikan sehingga Algoritma 2.5 bekerja di tempat (work in place). Jadi algoritma ini lebih baik dibandingkan Algoritma 2.4 dalam hal kebutuhan memori. Contoh berikut mengilustrasikan proses yang dilakukan oleh Algoritma 2.5 untuk menentukan parent bertingkat suatu node di coverability tree. Perhatikan coverability tree pada Gambar 2.17. Contoh 2.21. Input Algoritma 2.5 sama dengan input pada Contoh 2.18. Untuk yang pertama, pilih [1, 0, ω, 0]T sebelah kiri yang dinotasikan S3 sebagai input sehingga variabel idnode bernilai 3. Pada tahap inisialisasi, variabel idparent bernilai 2 dan Prt bernilai [ ]. Kondisi pada baris 2 dipenuhi sehingga perulangan dilakukan. Variabel Prt dan idparent masing-masing diupdate menjadi [2] dan 1. Nilai variabel idparent menjadi 1 dan kondisi while masih dipenuhi. Variabel Prt berubah menjadi [2, 1] setelah melaksanakan perintah pada baris 3 dan variabel idparent menjadi 0 setelah melakukan perintah pada baris 4. Kondisi pada baris 2 tidak terpenuhi karena variabel idparent bernilai 0. Output dari algoritma ini untuk input 3 adalah [2, 1]. 44
Dengan menggunakan cara yang serupa dengan sebelumnya, maka output dari algoritma tersebut dapat dicari jika inputnya adalah 5. Jelas bahwa keadaan yang dinyatakan oleh keduanya adalah sama yaitu S3 = S5 . Output dari Algoritma 2.5 adalah [4, 3, 2, 1]. Dari Contoh 2.21, dapat disimpulkan meskipun keadaan sama, tidak menjamin Algoritma 2.5 menghasilkan output yang sama. Setelah penentuan parent bertingkat telah selesai dikaji dilanjutkan dengan menguji hubungan dominasi antar node pada coverability tree. 2.5.2.3
Menguji hubungan dominasi
Pada bagian ini dibahas desain algoritma untuk menentukan apakah suatu keadaan mendominasi keadaan yang lain. Pertama akan ditentukan input dan output dari algoritma ini. Input algoritma ini berupa dua buah keadaan misalnya max dan min. Outputnya adalah himpunan indeks dengan keadaan max lebih dari keadaan min jika terdapat hubungan dominasi dan himpunan kosong jika tidak terdapat hubungan dominasi. Hubungan dominasi yang diuji dalam algoritma ini berlaku satu arah, yaitu apakah keadaan max mendominasi keadaan min. Untuk arah sebaliknya tidak diuji. Algoritma 2.6 Pengujian Dominasi Input: max, min dengan |max| = |min| Output: Dom /* himpunan indeks dengan elemen yang lebih besar */ 1 Dom ← ∅; i ← 1 /* inisialisasi */ 2 while maxi ≥ mini and i ≤ |max| do 3 if maxi > mini then 4 Dom ← Dom ∪ {i} 5 end if 6 i← i+1 7 end while 8 if i ≤ |max| then 9 Dom ← ∅ 10 end if Proses ini dilakukan dengan membandingkan setiap elemen keadaan max dan keadaan min. Jika terdapat elemen di keadaan max yang lebih kecil dari elemen di keadaan min maka tidak ada hubungan dominasi. Jika semua elemen di keadaan max sama dengan keadaan min juga tidak ada hubungan 45
dominasi. Jika terdapat beberapa elemen di keadaan max yang lebih besar dari keadaan min dan elemen di keadaan max yang lain sama dengan keadaan min maka terdapat hubungan dominasi dan indeks dengan elemen keadaan max lebih besar dari keadaan min merupakan output algoritma ini. Selanjutnya ditentukan kompleksitas algoritma pengujian dominasi yang terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai oleh algoritma ini. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung adalah perbandingan karena operasi itu menjadi bagian utama algoritma ini. Operasi perbandingan yang dihitung berada pada baris 2 dan 3 pada Algoritma 2.6. Kemungkinan terburuk (worst case) terjadi jika keadaan max mendominasi min. Kerja yang dilakukan oleh Algoritma 2.6 pada kondisi itu sebanyak jumlah place pada Petri net yaitu |max|. Jadi pada kemungkinan terburuk (worst case), banyak kerja yang dilakukan adalah W (|max|) = |max| = O(|max|). Banyak memori yang dipakai oleh Algoritma 2.6 tergantung variabel tambahan pada algoritma tersebut. Satu-satunya variabel tambahan adalah i yang bertipe integer. Jelas bahwa banyak memori yang dipakai oleh variabel i tetap sehingga algoritma ini bekerja di tempat (work in place). Proses yang dilakukan oleh Algoritma 2.6 dapat dilihat pada contoh berikut. Pada contoh ini digunakan coverability tree pada Gambar 2.16. Algoritma 2.6 digunakan untuk menentukan apakah keadaan [1, 0, 2, 0]T mendominasi keadaan [1, 0, 1, 0]T . Contoh 2.22. Input Algoritma 2.6 adalah variabel max = [1, 0, 2, 0]T dan min = [1, 0, 1, 0]T . Baris 1 menginisialisasi Dom dengan himpunan kosong. Variabel i diinisialisasi dengan 1 di baris 1. Jelas bahwa max1 = 1 = min1 dan 1 = i ≤ |max| = 4 sehingga pernyataan pada baris 2 bernilai benar. Variabel Dom tetap bernilai ∅ karena max1 ≯ min1 . Setelah itu dilanjutkan ke baris 6 sehingga nilai variabel i menjadi 2. Proses pada iterasi kedua serupa dengan iterasi pertama. Pada iterasi ketiga, yaitu saat i = 3 kondisi max3 > min3 dipenuhi sehingga variabel Dom menjadi {3} setelah melaksanakan baris 4. Proses pada iterasi keempat sama dengan iterasi pertama dan kedua. Output dari Algoritma 2.6 adalah Dom = {3} yang menyatakan bahwa max = [1, 0, 2, 0]T mendominasi min = [1, 0, 1, 0]T karena pada elemen ketiga max lebih dari min ditulis max3 > min3 . 46
Untuk lebih memperjelas proses yang dilakukan oleh Algoritma 2.6 maka berikut diberikan contoh dua keadaan yang tidak mempunyai hubungan dominasi. Algoritma 2.6 digunakan untuk menentukan eksistensi hubungan dominasi antara keadaan [0, 0, 1, 1]T dan keadaan [0, 1, 1, 0]T pada coverability tree di Gambar 2.16. Contoh 2.23. Input Algoritma 2.6 adalah dua buah keadaan yaitu keadaan max = [0, 0, 1, 1]T dan min = [0, 1, 1, 0]T . Variabel Dom dan i masing-masing diinisialisasi dengan ∅ dan 1. Pernyataan max1 ≥ min1 bernilai benar karena max1 = 0 = min1 . Jelas bahwa i ≤ |max| karena i = 1 dan |max| = 4 sehingga proses dilanjutkan ke baris 3. Kondisi pada baris 3 tidak dipenuhi sehingga nilai variabel i ditambah satu menjadi 2. Kenyataan bahwa max2 = 0 dan min2 = 1 menyebabkan pernyataan max2 ≥ min2 bernilai salah dan kondisi pada baris 2 tidak dipenuhi. Selanjutnya menuju ke baris 8. Kondisi pada baris 8 dipenuhi karena i = 2 dan |max| = 4 sehingga ∅ diisikan pada variabel Dom. Akhirnya Algoritma 2.6 menghasilkan ∅. Algoritma 2.5 dapat diperluas agar dapat digunakan untuk membangun coverability tree. Algoritma yang diperluas digunakan untuk menentukan hubungan dominasi antara node tertentu dengan sederetan node. Sederetan node ini merupakan deretan node yang menjadi parent bertingkat pada metode membangun coverability tree. Algoritma 2.5 digunakan untuk mengetahui adanya hubungan dominasi antara node tertentu dengan setiap node pada deretan node. Jika terdapat hubungan dominasi maka Algoritma 2.5 menghasilkan himpunan indeks yang didominasi dan jika tidak maka menghasilkan himpunan kosong. Gabungan (union) dari semua himpunan indeks yang didominasi merupakan output yang dihasilkan oleh algoritma yang diperluas yaitu Algoritma 2.7. Algoritma 2.7 Pengujian Sederetan Dominasi Input: max, Prt Output: Ind /* gabungan himpunan indeks yang didominasi */ 1 Ind ← ∅ /* inisialisasi */ 2 for all pm ∈ Prt do 3 Ind ← Ind ∪ Algoritma 2.6 (max, pm) 4 end for Selanjutnya ditentukan kompleksitas algoritma pengujian sederetan dominasi dengan menghitung banyak kerja yang dilakukan dan banyak memori 47
yang dipakai oleh algoritma tersebut. Sebelum menghitung banyak kerja yang dilakukan, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung sama dengan Algoritma 2.6 yaitu perbandingan karena algoritma ini merupakan perluasan dari Algoritma 2.6. Input yang menyebabkan banyak kerja algoritma ini paling besar yaitu semua keadaan di Prt didominasi oleh max. Pada kondisi ini, kerja yang dilakukan oleh Algoritma 2.7 sebanyak |Prt| × |max|. Jadi saat kemungkinan terburuk terjadi algoritma ini melakukan kerja W (|Prt|, |max|) = |Prt| × |max| = O(|Prt| × |max|). Banyak memori yang dipakai tergantung variabel tambahan yang digunakan pada Algoritma 2.7. Variabel px merupakan satu-satunya variabel tambahan pada algoritma tersebut. Banyak memori yang dipakai oleh variabel px tidak tergantung input yang diberikan sehingga Algoritma 2.7 bekerja di tempat (work in place). Perhatikan node [1, 0, 1, 0]T pada coverability tree di Gambar 2.16. Contoh berikut mengilustrasikan Algoritma 2.7 dengan max = [1, 0, 1, 0]T dan Prt = [0, 1, 1, 0]T , [1, 0, 0, 0]T merupakan input. Contoh 2.24. Baris 1 menginisialisasi variabel Ind dengan himpunan kosong kemudian menuju ke perulangan. Algoritma 2.6 dijalankan dengan input pm = [0, 1, 1, 0]T dan max = [1, 0, 1, 0]T yang menghasilkan ∅ sebagai out-
put karena [1, 0, 1, 0]T tidak mendominasi [0, 1, 1, 0]T . Nilai variabel Ind tetap ∅ kemudian dilanjutkan ke baris 2 untuk keadaan berikutnya. Algoritma 2.6 dijalankan lagi dengan max = [1, 0, 1, 0]T dan pm = [1, 0, 0, 0]T yang menghasilkan {3} karena x mendominasi pm dan x3 > pm3 . Nilai variabel Ind menjadi {3} yang menjadi output algoritma ini sehingga pada coverability tree di Gambar 2.17, indeks ketiga dari node ini diubah menjadi ω. Jika variabel max diubah menjadi [0, 0, 1, 1]T dan variabel Prt tetap maka Algoritma 2.7 menghasilkan ∅ sebagai output karena semua node di Prt tidak didominasi oleh node max. Proses yang dilakukan serupa dengan bagian sebelumnya. Terlihat pada contoh sebelumnya bahwa Algoritma 2.7 merupakan perluasan dari Algoritma 2.6. Algoritma 2.7 digunakan untuk menguji apakah node tertentu mendominasi beberapa node. Hal ini diperlukan untuk dalam metode pembentukan coverability tree, yaitu pengujian hubungan dominasi antara node tertentu dan deretan node yang menjadi parent bertingkat dari node tersebut. 48
2.5.2.4
Mencari Keberadaan Node Duplicate Permasalahan berikutnya yang harus diselesaikan adalah mencari ke-
beradaan node duplicate pada coverability tree. Untuk menyelesaikan permasalahan ini maka disusun algoritma pencarian. Ingat bahwa unsur yang dicari pada proses ini adalah keadaan sehingga dibutuhkan algoritma untuk membandingkan keadaan. Ide penyusunan algoritma ini sama dengan pencarian sekuensial (sequential search) yaitu mencari elemen yang berbeda. Jika elemen yang berbeda ditemukan maka keadaan tidak sama. Keadaan sama jika tidak ditemukan elemen yang berbeda. Input algoritma untuk membandingkan keadaan adalah dua keadaan yang dinyatakan dengan vektor. Output algoritma ini adalah variabel issama yang bertipe boolean. Pada Algoritma 2.8, variabel x dan y menyatakan dua keadaan yang dibandingkan. Jelas bahwa jumlah elemen pada kedua keadaan ini harus sama yaitu |x| = |y|. Pada baris 1, variabel issama yang digunakan sebagai output diberikan nilai false. Perulangan dilakukan pada baris 2 selama belum ditemukan elemen yang berbeda yaitu selama xi = yi . Nilai variabel i dicek pada baris 5, jika tidak ditemukan elemen yang berbeda yaitu i > |x| maka variabel issama bernilai true yang menyatakan keadaan x sama dengan y. Jika ditemukan elemen yang berbeda maka i < |x| sehingga tidak memenuhi kondisi pada if dan variabel issama tetap bernilai false. Algoritma 2.8 Perbandingan Keadaan Input: x, y dengan |x| = |y| Output: issama /* bernilai boolean */ 1 issama ← false; i ← 1 /* inisialisasi */ 2 while i ≤ |x| and xi = yi do 3 i← i+1 4 end while 5 if i > |x| then 6 issama ← true 7 end if Selanjutnya ditentukan kompleksitas algoritma perbandingan keadaan dengan menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai oleh algoritma tersebut. Jenis operasi yang dihitung harus ditentukan terlebih dahulu sebelum menghitung banyak kerja yang dilakukan. Operasi yang dihitung adalah perbandingan pada baris 2 karena operasi ini adalah pekerjaan utama yang dilakukan oleh Algoritma 2.8. Perulangan while pada baris 2 dikerjakan selama elemen pada keadaan x sama dengan y sehingga 49
jumlah perulangan paling besar terjadi ketika semua elemen di x sama dengan y yaitu xi = yi untuk 1 ≤ i ≤ |x|. Pada kondisi ini operasi perbandingan dilakukan sebanyak jumlah elemen pada keadaan x yaitu |x|. Jadi banyak kerja yang dilakukan Algoritma 2.8 pada kemungkinan terburuk (worst case) adalah W (|x|) = |x| = O(|x|). Banyak memori yang dipakai oleh Algoritma 2.8 tergantung banyak memori yang digunakan variabel tambahan pada Algoritma 2.8. Variabel i yang bertipe integer merupakan satu-satunya variabel tambahan pada algoritma perbandingan keadaan. Jelas bahwa banyak memori yang dipakai oleh variabel i tetap yaitu tidak tergantung input sehingga Algoritma 2.8 bekerja di tempat (work in place). Contoh berikut mengilustrasikan proses yang terjadi saat menjalankan Algoritma 2.8 jika keadaan x tidak sama dengan y yaitu x = [1, 0, 1, 0]T dan y = [1, 0, 0, 0]T . Contoh 2.25. Pada baris 1, variabel issama bernilai false dan variabel i bernilai 1. Kondisi di while dipenuhi karena 1 = i ≤ |x| = 4 dan x1 = 1 = y1 . Nilai variabel i ditambah 1 sehingga menjadi 2. Pernyataan pada baris 2 dipenuhi karena 2 = i ≤ |x| = 4 dan x2 = 0 = y2 . Variabel i bernilai 3 setelah menjalankan perintah pada baris 3. Pada saat ini, kondisi pada while tidak dipenuhi karena 1 = x3 6= y3 = 0. Kenyataan 3 = i ≯ |x| = 4 menyebabkan kondisi pada baris 5 tidak dipenuhi sehingga variabel issama tetap bernilai false. Hal ini menunjukkan bahwa keadaan x = [1, 0, 1, 0]T dan y = [1, 0, 0, 0]T tidak sama. Jika keadaan yang diinputkan adalah sama misalnya x maka perulangan pada baris 2 bernilai benar untuk 1 ≤ i ≤ 4. Pada saat variabel i bernilai 5, kondisi pada while tidak dipenuhi karena 5 = i |x| = 4. Kondisi pada if dipenuhi karena 5 = i > |x| = 4 sehingga nilai variabel issama berubah menjadi true. Hasil ini menunjukkan kedua keadaan sama. Setelah menyusun algoritma membandingkan keadaan berikutnya disusun algoritma pencarian pada tree. Untuk melakukan pencarian elemen pada tree, biasanya dibutuhkan algoritma pencarian rekursif seperti algoritma Breadth First Search atau Depth First Search. Node-node coverability tree disimpan pada list S sehingga pencarian dilakukan pada list S. Untuk melakukan pencarian elemen pada list dapat digunakan algoritma pencarian yang 50
sederhana yaitu pencarian secara sekuensial (sequential search). Prinsip yang digunakan pada algoritma ini mudah dipahami. Elemen yang dicari dibandingkan dengan semua elemen pada list. Jika pada list terdapat elemen yang dicari maka algoritma berhenti dan menghasilkan true. Jika tidak terdapat elemen yang dicari pada list maka algoritma berhenti dan menghasilkan false. Pada algoritma ini pencarian dimulai dari elemen dengan indeks terendah menuju ke indeks yang lebih besar. Indeks paling besar sama dengan jumlah elemen yang disimpan di list. Input algoritma ini adalah list dan elemen yang dicari. Output algoritma ini bertipe boolean. Variabel ketemu bernilai boolean sehingga variabel tersebut bernilai true atau false. Jika ketemu bernilai true maka x ∈ S dan jika ketemu bernilai false maka x ∈ / S. Pada tahap inisialisasi variabel ketemu dan i masing-masing diberikan nilai true dan 1. Untuk membandingkan dua keadaan digunakan Algoritma 2.8 yang telah disusun sebelumnya. Perulangan pada baris 2 dilakukan sebanyak |S| kecuali terdapat Si = x dengan i ≤ |S|. Dengan kata lain perulangan dikerjakan hingga x ditemukan atau perulangan dilakukan untuk semua elemen S jika x tidak berada di S. Jika i > |S| saat keluar dari perulangan maka dapat disimpulkan bahwa Si 6= x untuk 1 ≤ i ≤ |S| atau x ∈ / S sehingga variabel ketemu diganti menjadi false. Algoritma ini mempunyai urutan perintah yang sama dengan Algoritma 2.8 karena konsep yang digunakan oleh kedua algoritma tersebut sama yaitu pencarian sekuensial (sequential search). Algoritma 2.9 Pencarian Node Input: S, x Output: ketemu /* bernilai boolean */ 1 ketemu ← true; i ← 1 /* inisialisasi */ 2 while i ≤ |S| and not Algoritma 2.8 (Si , x) do 3 i← i+1 4 end while 5 if i > |S| then 6 ketemu ← false 7 end if Berikutnya dibahas kompleksitas algoritma pencarian node yang terdiri dari banyak kerja yang dilakukan dan banyak memori yang dipakai oleh algoritma tersebut. Sebelum menghitung banyak kerja yang dilakukan, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung pada algoritma ini sama dengan Algoritma 2.8 yaitu operasi perban51
dingan. Operasi perbandingan yang dihitung yaitu pada saat menjalankan Algoritma 2.8 yang terletak pada baris 2. Perulangan pada baris ini dilakukan hingga diperoleh keadaan di S yang sama dengan x atau hingga diperoleh kesimpulan bahwa tidak ada keadaan di S yang sama dengan x. Kondisi yang terakhir menyebabkan banyak kerja yang dilakukan paling besar yaitu menjalankan Algoritma 2.8 sebanyak jumlah keadaan di S yang dinotasikan |S|. Jadi pada kemungkinan terburuk (worst case), banyak kerja yang dilakukan oleh algoritma pencarian node adalah W (|S|, |x|) = |S| × |x| = O(|S| × |x|). Variabel tambahan harus ditentukan terlebih dahulu sebelum menghitung banyak memori yang dipakai Algoritma 2.9. Pada algoritma pencarian node terdapat sebuah variabel tambahan yaitu i yang bertipe integer. Jelas bahwa banyak memori yang digunakan variabel i tetap dan tidak tergantung input yang diberikan sehingga Algoritma 2.9 bekerja di tempat (work in place). Contoh berikut mengilustrasikan proses yang dilakukan oleh Algoritma 2.9 ketika tidak ada elemen di S yang sama dengan x. Contoh 2.26. Misal input Algoritma 2.9 adalah keadaan x = [0, 1, ω, 0]T dan list S = [1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T . Pada tahap inisialisasi variabel ketemu dan i masing-masing diberikan nilai true dan 1. Kondisi di baris 2 dipenuhi karena 1 = i ≤ |S| = 3 dan [1, 0, 0, 0]T = S1 6= x = [0, 1, ω, 0]T keduanya dipenuhi. Setelah menjalankan baris 3 nilai variabel i berubah menjadi 2. Jelas bahwa [0, 1, 1, 0]T = S2 6= x = [0, 1, ω, 0]T sehingga kondisi pada while dipenuhi dan nilai variabel i ditambah satu menjadi 3. Kondisi pada baris 2 kembali dipenuhi karena [1, 0, ω, 0]T = S3 6= x = [0, 1, ω, 0]T dan 3 = i ≤ |S| = 3 kemudian dilanjutkan menuju baris 3. Variabel i menjadi 4 yang menyebabkan kondisi pada while tidak dipenuhi karena 4 = i |S| = 3. Kondisi pada baris 5 dipenuhi karena 4 = i > |S| = 3 sehingga nilai variabel ketemu diubah menjadi false. Output algoritma ini adalah false yang menunjukkan tidak ada elemen di S yang sama dengan x yang ditulis x∈ / S. Ketika tidak ada elemen di S yang sama dengan x maka perulangan dilakukan sebanyak jumlah elemen S. Jika x ∈ S maka perulangan dilakukan hingga ditemukan elemen pada S yang sama dengan x yang ditulis Si = x dengan 1 ≤ i ≤ |S|. Contoh berikut mengilustrasikan kasus x ∈ S. Input Algoritma 2.9 adalah S = [1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T , [0, 1, ω, 0]T dan x = [1, 0, ω, 0]T . 52
Contoh 2.27. Pada baris 1 variabel ketemu dan i masing-masing diinisialisasi true dan 1. Nilai variabel i menjadi 3 karena Sj 6= x untuk j = 1, 2. Saat variabel i = 3 berlaku S3 = [1, 0, ω, 0]T = x sehingga kondisi pada baris 2 tidak dipenuhi dan menuju ke baris 5. Kondisi di baris ini juga tidak dipenuhi karena 3 = i ≯ |S| = 4 sehingga output dari algoritma ini adalah true. Output dari Algoritma 2.9 adalah true atau false. Hal ini sesuai dengan permasalahan yaitu menguji apakah suatu node termasuk node duplicate. Indeks node yang menjadi duplicate pada coverability tree tidak harus diketahui karena tidak diperlukan pada proses berikutnya. Setelah mendesain ketiga permasalahan yaitu menentukan parent bertingkat, menguji hubungan dominasi dan mencari keberadaan node duplicate selanjutnya dibahas desain algoritma utama. Algoritma ini merupakan bentuk lain dari metode membangun coverability tree yang mempunyai node berhingga. Jelas bahwa input algoritma ini adalah Petri net dengan keadaan awal. 2.5.2.5
Membangun Coverability Tree
Salah satu cara membangun tree dengan menggunakan algoritma rekursif. Prinsip pemanggilan algoritma rekursif menggunakan prinsip Last In First Out. Hal ini berarti algoritma yang dipanggil terakhir kali berada di atas. Algoritma yang sedang dijalankan terletak di paling atas. Algoritma yang berada di bawahnya akan dijalankan jika semua algoritma yang berada di atasnya sudah selesai. Dari keterangan ini dapat disimpulkan bahwa algoritma rekursif selesai jika algoritma yang pertama kali dijalankan sudah selesai. Kegunaan algoritma rekursif yang lain yaitu dapat digunakan untuk pencarian elemen pada tree. Tanpa menggunakan algoritma rekursif, hal ini sulit dilakukan karena bentuk tree yang bermacam-macam. Keuntungan menggunakan algoritma rekursif adalah waktu komputasi yang cepat sedangkan kerugiannya adalah algoritma rekursif pada umumnya membutuhkan memori yang besar. Langkah pertama yang dilakukan oleh Algoritma 2.10 adalah menjalankan Algoritma 2.5. Algoritma 2.5 bertujuan untuk mencari deretan node yang menjadi parent bertingkat. Pengujian hubungan dominasi pada deretan node yang menjadi parent bertingkat dilakukan di baris 2 dengan menjalankan Algoritma 2.7. Algoritma 2.7 menghasilkan himpunan indeks yang terdapat hubungan dominasi. Elemen yang berada pada posisi ini diberikan nilai ω seperti terlihat pada baris 3. 53
Kondisi pada if bertujuan untuk mengetahui apakah node ini termasuk node duplicate. Jika node ini termasuk node duplicate maka proses tidak dilanjutkan yang dinyatakan dengan perintah return di baris 6. Perintah pada baris 8 mengupdate variabel S dan Ev. Langkah berikutnya adalah mencari transisi yang enabled dengan menjalankan Algoritma 2.2 di baris 9. Algoritma ini dijalankan kembali untuk setiap keadaan yang diperoleh dengan memfire transisi yang enabled seperti terlihat pada baris 12. Algoritma 2.10 Membangun Coverability Tree Input: P, T, w, Sbaru, idparent, idtran, S, Ev Output: S, Ev 1 Prt ← [idparent, Algoritma 2.5 (idparent)] /* parent bertingkat */ 2 Ind ← Algoritma 2.7 (Sbaru, S(Prt)) /* deretan dominasi */ 3 Sbaru(Ind) ← ω /* jika terdapat hubungan dominasi */ 4 if Algoritma 2.9 (S, Sbaru) then 5 S ← [S, Sbaru]; Ev ← Ev ∪ (|S|, idparent, Tidtran ) 6 return /* node ini termasuk duplicate */ 7 end if 8 S ← [S, Sbaru]; idbaru ← |S|; Ev ← Ev ∪ (idbaru, idparent, Tidtran ) 9 En ← Algoritma 2.2 (P, T, w, Sbaru) /* cari transisi enabled */ 10 for all tf ∈ En do 11 Sanak ← Algoritma 2.3 (Sbaru, tf ) /* pemfirean transisi tf */ 12 [S, Ev] ← Algoritma 2.10 (P, T, w, Sanak, idbaru, j, S, Ev) 13 /* ini adalah bagian rekursif */ 14 end for Pada bagian berikutnya ditentukan kompleksitas algoritma membangun coverability tree. Dalam menentukan kompleksitas algoritma ada dua hal yang dihitung yaitu banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Sebelum menghitung banyak kerja, jenis operasi harus ditentukan terlebih dahulu. Pada Algoritma 2.10 terdapat 3 macam operasi yang dilakukan yaitu mencari parent, perbandingan dan penjumlahan. Pertama dihitung banyak kerja untuk operasi mencari parent. Operasi ini dilakukan Algoritma 2.5. Berdasarkan hasil pada bagian sebelumnya maka kondisi yang menyebabkan banyak kerja algoritma ini paling besar adalah semua node menjadi parent bertingkat dari node ini. Pada kondisi tersebut kerja yang dilakukan Algoritma 2.5 sebanyak jumlah node pada coverability tree. Jika coverability tree yang dibangun mempunyai |Sa| node maka banyak P 1 kerja yang dilakukan adalah |Sa| i=1 i = 2 |Sa|(|Sa| + 1) sehingga dapat ditulis W (|Sa|) = 21 |Sa|2 + 12 |Sa| = O(|Sa|2 ). 54
Jenis operasi yang dihitung selanjutnya adalah perbandingan. Operasi ini dilakukan Algoritma 2.7, 2.9 dan 2.2. Banyak kerja yang dilakukan oleh Algoritma 2.7 paling besar ketika semua keadaan di S(Prt) didominasi oleh Sbaru. Pada kondisi ini Algoritma 2.7 bekerja sebanyak |S(Prt)| × |x|. P 1 Jadi banyak kerja yang dilakukan adalah |x| |Sa| i=1 i = 2 |x| × |Sa|(|Sa| + 1) dengan |Sa| menyatakan jumlah node pada coverability tree. Selanjutnya dihitung banyak kerja yang dilakukan Algoritma 2.9. Dengan menggunakan hasil sebelumnya maka banyak kerja yang dilakukan Algoritma 2.9 paling besar ketika keadaan Sbaru tidak berada di S yaitu Sbaru ∈ / S. Pada kondisi ini Algoritma 2.9 bekerja sebanyak |S| × |x|. Jadi banyak kerja yang dilakukan algoritma ini sama dengan Algoritma 2.7. Operasi perbandingan juga dilakukan di Algoritma 2.2. Kondisi yang menyebabkan banyak kerja yang dilakukan algoritma ini paling besar adalah semua transisi enabled atau pertidaksamaan tidak dipenuhi untuk place input yang diuji terakhir. Pada kondisi ini banyak kerja yang dilakukan Algoritma 2.2 sebanyak jumlah anggota himpunan place P input dari setiap transisi di Petri net yaitu t∈T |I(t)|. Banyak kerja yang P dilakukan algoritma ini adalah |Sa| t∈T |I(t)|. Jadi banyak kerja perbandingan yang dilakukan oleh Algoritma 2.10 dapat dituliskan dalam persamaan berikut. X 1 |x| × |Sa|(|Sa| + 1) + |Sa| |I(t)| W (|Sa|, |x|, T, |A|) = 2 2 t∈T X = |x| × |Sa|(|Sa| + 1) + |Sa| |I(t)| (2.21) t∈T X 2 = |x| × |Sa| + |x| × |Sa| + |Sa| |I(t)| t∈T
2
= O(|x| × |Sa| + |Sa| × |A|)
Banyak kerja yang dilakukan algoritma membangun coverability tree dapat disederhanakan dengan menggunakan asumsi |A| ≤ |x| × |Sa|. Keberlakuan asumsi ini dapat dihubungkan dengan jumlah place, jumlah transisi dan jumlah arc pada Petri net. Ingat bahwa jumlah arc pada Petri net kurang dari atau sama dengan dua kali perkalian jumlah place dan transisi yaitu |A| ≤ 2(|P | × |T |) karena A ⊆ (P × T ) ∪ (T × P ). Dengan menggunakan hasil ini maka asumsi |A| ≤ |x| × |Sa| dipenuhi jika banyak node di coverability tree lebih besar atau sama dengan dua kali jumlah transisi di Petri net yang ditulis |Sa| ≥ 2|T |. Jika asumsi ini dipenuhi maka banyak kerja yang dilakukan dapat ditulis W (|x|, |Sa|) = O(|x| × |Sa|2 ). 55
Operasi yang dihitung berikutnya adalah penjumlahan. Operasi ini dilakukan Algoritma 2.3. Banyak kerja yang dilakukan algoritma ini pada kemungkinan terburuk (worst case) sebanyak jumlah anggota dari gabungan (union) himpunan place input dan output transisi yang difire yaitu |I(tf ) ∪ O(tf )| dengan tf menyatakan transisi yang difire. Jika |Sa| menyatakan jumlah node pada coverability tree maka jelas bahwa pemfirean dilakukan sebanyak |Sa| − 1. Jadi banyak kerja yang dilakukan Algoritma 2.10 adalah (maxt∈T |I(t) ∪ O(t)|) (|Sa|−1) yang dapat ditulis W (|x|, |Sa|) = O(|x|×|Sa|). Banyak memori yang dipakai algoritma membangun coverability tree tergantung input yang diberikan karena algoritma ini termasuk rekursif. Jadi Algoritma 2.10 tidak bekerja di tempat (work in place). Terlihat bahwa Algoritma 2.10 merupakan algoritma rekursif karena algoritma tersebut menjalankan dirinya sendiri pada baris 12. Ilustrasi proses yang dilakukan oleh algoritma rekursif membingungkan karena algoritma yang sama dijalankan berkali-kali. Untuk itu pada contoh berikut disertakan gambar dengan tujuan lebih mudah dipahami. Pada contoh ini Algoritma 2.10 digunakan untuk membangun coverability tree pada Gambar 2.17. Contoh 2.28. Untuk membangun coverability tree Petri net di Gambar 2.15, input Algoritma 2.10 adalah Sbaru = [1, 0, 0, 0]T , idparent = 0, idtran = 0, S = [ ], Ev = ∅ dan P, T, w diambil dari definisi Petri net. Variabel Sbaru merupakan keadaan awal Petri net. Jelas bahwa node ini adalah root sehingga tidak punya parent sehingga dipilih idparent = 0 = idtran. Variabel S dan Ev masing-masing mempunyai nilai [ ] dan ∅ yang menyatakan bahwa belum ada node dan edge pada coverability tree. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Gambar 2.18 Input Algoritma 2.10 adalah idparent = 0 dan idtran = 0 Dalam menjelaskan algoritma membangun coverability tree, algoritma tersebut digambarkan dengan kotak yang didalamnya terdapat tiga parameter, yaitu Sbaru, idparent dan idtran. Pemilihan ketiga parameter ini dilatarbelakangi nilai mereka yang berbeda dalam setiap pemanggilan algoritma. Nilai variabel yang lain bisa sama, misalnya P, T, w selalu bernilai sama pada 56
setiap pemanggilan dan variabel S, Ev dapat bernilai sama pada beberapa pemanggilan. Gambar 2.18 menunjukkan algoritma membangun coverability tree dijalankan. Pada baris 1, variabel Prt bernilai [ ]. Belum ada node pada coverability tree sehingga variabel Ind bernilai ∅ setelah pemanggilan Algoritma 2.7. Jelas bahwa variabel Sbaru tidak berubah berdasarkan keterangan sebelumnya. Kondisi pada baris 4 tidak dipenuhi karena S = [ ] dan menuju ke baris 8. Nilai ketiga variabel tersebut masing-masing berubah menjadi idbaru = 1, Ev = {(1, 0, 0)} dan S = [1, 0, 0, 0]T . Pada keadaan ini ada sebuah transisi yang enabled yaitu t1 sehingga En = {t1 }. Variabel Sanak merupakan keadaan setelah transisi t1 difire sehingga Sanak = [0, 1, 1, 0]T . Algoritma 2.10 dijalankan dengan input Sbaru = [0, 1, 1, 0]T , idparent = 1, idtran = 1 seperti ditunjukkan oleh Gambar 2.19. Terlihat pada Gambar 2.19 bahwa algoritma kedua berada di atas algoritma pertama. Hal ini menunjukkan algoritma kedua dijalankan terlebih dahulu. Proses algoritma pertama dilanjutkan ketika algoritma yang dipanggil sudah selesai. Hal ini dapat dideskripsikan sebagai berikut. Jika algoritma kedua sudah selesai maka gambar kotak dihapus sehingga algoritma pertama berada di atas. Ingat bahwa algoritma yang dijalankan adalah algoritma yang berada di atas. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1 Gambar 2.19 Input Algoritma 2.10 adalah idparent = 1 dan idtran = 1 Variabel Prt bernilai [1] pada baris 1 karena satu-satunya parent dari node ini adalah node root dengan indeks 1. Output Algoritma 2.7 adalah ∅ karena node root tidak didominasi oleh [0, 1, 1, 0]T sehingga variabel Ind bernilai ∅. Perintah pada baris 3 tidak mengubah nilai variabel Sbaru. Kondisi pada baris 4 tidak dipenuhi karena Sbaru ∈ / S. Perintah pada baris 8 meng T ubah variabel S menjadi [1, 0, 0, 0] , [0, 1, 1, 0]T dan variabel Ev menjadi {(1, 0, 0), (2, 1, 1)} serta variabel idbaru bernilai 2. Pada keadaan [0, 1, 1, 0]T 57
terdapat dua transisi yang enabled yaitu t2 dan t3 sehingga En = {t2 , t3 }. Diasumsikan perulangan pada baris 10 dimulai dengan nilai j yang paling kecil. Keadaan yang diperoleh setelah transisi t2 difire adalah [1, 0, 1, 0]T . Kemudian Algoritma 2.10 dijalankan dengan input Sbaru = [1, 0, 1, 0]T , idparent = 2 dan idtran = 2 yang dinyatakan pada Gambar 2.20. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [1, 0, 1, 0]T idparent = 2 idtran = 2
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1 Gambar 2.20 Input Algoritma 2.10 adalah idparent = 2 dan idtran = 2 Deretan indeks node yang menjadi parent bertingkat disimpan dalam variabel Prt sehingga variabel tersebut bernilai [2, 1]. Jelas bahwa keadaan Sbaru = [1, 0, 1, 0]T mendominasi keadaan S1 = [1, 0, 0, 0]T dan 1 ∈ Prt sehingga Ind = {3}. Variabel Sbaru berubah menjadi [1, 0, ω, 0]T setelah menjalankan perintah pada baris 3. Jelas bahwa Algoritma 2.9 menghasilkan false sehingga kondisi pada baris 4 tidak terpenuhi dan menjalankan pe rintah di baris 8. Variabel S = [1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T dan ke-
dua variabel yang lain yaitu idbaru dan Ev masing-masing menjadi 3 dan {(1, 0, 0), (2, 1, 1), (3, 2, 2)}. Pada keadaan ini transisi yang enabled hanya satu yaitu t1 sehingga variabel En bernilai {t1 }. Keadaan Petri net berubah menjadi [0, 1, ω, 0]T sesudah transisi t1 difire sehingga variabel Sanak bernilai [0, 1, ω, 0]T . Algoritma membangun coverability tree dijalankan lagi dengan input Sbaru = [0, 1, ω, 0]T , idparent = 3 dan idtran = 1 seperti ditunjukkan pada Gambar 2.21. Proses yang dilakukan sama dengan sebelumnya karena algoritma yang dijalankan sama dengan sebelumnya. Variabel Prt = [3, 2, 1] menyatakan deretan indeks node yang menjadi parent bertingkat. Langkah berikutnya adalah menguji hubungan dominasi. Keadaan Sbaru = [0, 1, ω, 0]T mendominasi S2 = [0, 1, 1, 0]T dan 2 ∈ Prt sehingga variabel Ind bernilai {3}. Variabel Sbaru tidak berubah karena sebelum menjalankan baris 3 elemen ketiga variabel tersebut sudah bernilai ω. Kondisi pada baris 4 tidak dipenuhi karena Sbaru ∈ / S dilanjutkan ke baris 8. Variabel idbaru berubah menjadi 4. 58
Variabel S menjadi [1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T , [0, 1, ω, 0]T sedangkan
Ev menjadi {(1, 0, 0), (2, 1, 1), (3, 2, 2), (4, 3, 1)}. Jelas bahwa pada keadaan ini terdapat dua transisi yang enabled yaitu transisi t2 dan transisi t3 sehingga variabel En bernilai {t2 , t3 }. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [1, 0, ω, 0]T idparent = 2 idtran = 2
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1
Sb = [0, 1, ω, 0]T idparent = 3 idtran = 1
Gambar 2.21 Input Algoritma 2.10 adalah idparent = 3 dan idtran = 1 Ingat bahwa diasumsikan perulangan pada baris 10 dimulai dengan indeks yang terkecil sehingga transisi t2 dijalankan terlebih dahulu. Keadaan Petri net berubah menjadi Sanak = [1, 0, ω, 0]T setelah transisi t2 difire. Selanjutnya algoritma membangun coverability tree dijalankan dengan input Sbaru = [1, 0, ω, 0]T , idparent = 4, idtran = 2. Proses ini diilustrasikan pada Gambar 2.22 yaitu algoritma kelima berada di atas algoritma keempat yang menyatakan algoritma keempat menjalankan algoritma kelima. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [1, 0, ω, 0]T idparent = 2 idtran = 2
Sb = [1, 0, ω, 0]T idparent = 4 idtran = 2
Sb = [0, 1, ω, 0]T idparent = 3 idtran = 1
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1
Gambar 2.22 Input Algoritma 2.10 adalah idparent = 4 dan idtran = 2 Variabel Prt bernilai [4, 3, 2, 1] setelah menjalankan perintah pada baris 1. Algoritma 2.7 menghasilkan {3} sehingga variabel Ind bernilai {3}. Perintah pada baris 3 tidak mengubah nilai variabel Sbaru yaitu [1, 0, ω, 0]T . Jelas bahwa Sbaru ∈ S sehingga output dari Algoritma 2.9 adalah true dan kondisi pada baris 4 dipenuhi sehingga menuju ke baris 5. Variabel S menjadi 59
[1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T , [0, 1, ω, 0]T , [1, 0, ω, 0]T dan nilai variabel
Ev menjadi {(1, 0, 0), (2, 1, 1), (3, 2, 2), (4, 3, 1), (5, 4, 2)} karena jumlah elemen pada S berjumlah 5. Hal ini menyatakan node Sbaru termasuk node dupli-
cate. Selanjutnya dijalankan baris 6 sehingga proses tidak dilanjutkan ke baris berikutnya melainkan keluar dari algoritma. Untuk menyatakan bahwa algoritma tersebut sudah dijalankan maka gambar yang menyatakan algoritma ini akan dihapus. Proses dilanjutkan ke algoritma yang menjalankan algoritma ini yaitu algoritma dengan input idparent = 3 dan idtran = 1. Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [1, 0, ω, 0]T idparent = 2 idtran = 2
Sb = [0, 0, ω, 1]T idparent = 4 idtran = 3
Sb = [0, 1, ω, 0]T idparent = 3 idtran = 1
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1
Gambar 2.23 Algoritma dijalankan dengan Menggunakan Input idparent = 4 dan idtran = 3 Saat menjalankan algoritma dengan input idparent = 3, idtran = 1 dan Sbaru = [0, 1, ω, 0]T terdapat dua transisi yang enabled yaitu transisi t2 dan t3 . Transisi t2 sudah dijalankan pada bagian sebelumnya. Sekarang dilanjutkan dengan memproses transisi t3 . Nilai variabel Sanak menjadi [0, 0, ω, 1]T dan Algoritma 2.10 dijalankan kembali dengan input Sbaru = [0, 0, ω, 1]T , idtran = 3 dan idparent = 4 yang dapat dilihat pada Gambar 2.23. Algoritma 2.10 menentukan deretan parent bertingkat sehingga diperoleh Prt = [4, 3, 2, 1]. Selanjutnya dicari node pada S(Prt) yang didominasi oleh Sbaru = [0, 0, ω, 1]T . Tidak ada node di S(Prt) yang didominasi oleh Sbaru sehingga Ind = ∅ dan perintah pada baris 3 tidak berpengaruh. Kondisi pada baris 4 tidak dipenuhi karena Sbaru ∈ / S. Nilai variabel S menjadi [1, 0, 0, 0]T , [0, 1, 1, 0]T , [1, 0, ω, 0]T , [0, 1, ω, 0]T , [1, 0, ω, 0]T , [0, 0, ω, 1]T dan nilai Ev menjadi {(1, 0, 0), (2, 1, 1), (3, 2, 2), (4, 3, 1), (5, 4, 2), (6, 4, 3)}. Variabel idbaru bernilai 6. Pada keadaan ini tidak ada transisi yang enabled sehingga variabel En bernilai ∅. Perulangan pada baris 10 tidak dilakukan dan keluar dari algoritma. Ingat pada keadaan sebelumnya yaitu [0, 1, ω, 0]T terdapat dua transisi yang enabled yaitu transisi t2 dan transisi t3 . Kedua transisi tersebut telah 60
dijalankan sehingga algoritma ini juga selesai dan menuju algoritma sebelumnya. Pada keadaan [1, 0, ω, 0]T terdapat sebuah transisi yang enabled yaitu t1 dan transisi tersebut telah dijalankan sehingga algoritma ini juga telah selesai dan proses dilanjutkan ke algoritma kedua yang menyatakan keadaan [0, 1, 1, 0]T . Pada keadaan ini terdapat sebuah transisi yang belum dijalankan yaitu t3 . Jika transisi ini difire maka diperoleh keadaan [0, 0, 1, 1]T . Algoritma dijalankan dengan variabel input Sbaru = [0, 0, 1, 1]T , idparent = 2 dan idtran = 3. Gambar 2.24 menyatakan keadaan pada saat algoritma dijalankan. Ingat bahwa tiga algoritma sudah selesai sehingga tiga kotak yang ada di Gambar 2.23 dihapus. Sb = [0, 0, 1, 1]T idparent = 2 idtran = 3
Sb = [1, 0, 0, 0]T idparent = 0 idtran = 0
Sb = [0, 1, 1, 0]T idparent = 1 idtran = 1 Gambar 2.24 Input Algoritma 2.10 adalah idparent = 2 dan idtran = 3 Variabel Prt bernilai [2, 1] yaitu indeks node yang menjadi parent bertingkat dari node baru. Tidak ada node di S(Prt) yang didominasi oleh Sbaru = [0, 0, 1, 1]T sehingga output dari algoritma pengujian deretan dominasi adalah himpunan kosong. Hal ini menyebabkan perintah pada baris 3 tidak mengubah nilai variabel Sbaru. Jelas bahwa Sbaru ∈ / S sehingga kondisi pada baris 4 tidak dipenuhi. Variabel Sbaru ditambahkan ke S menjadi S1 = [1, 0, 0, 0]T , S2 = [0, 1, 1, 0]T , . . . , S6 = [0, 0, ω, 1]T , S7 = [0, 0, 1, 1]T . Nilai variabel Ev = {(1, 0, 0), (2, 1, 1), (3, 2, 2), (4, 3, 1), (5, 4, 2), (6, 4, 3), (7, 2, 3)} karena idbaru bernilai 7. Pada keadaan ini tidak ada transisi yang enabled sehingga perulangan pada baris 10 tidak dilakukan dan algoritma ini berakhir. Berdasarkan keterangan sebelumnya, pada keadaan [0, 1, 1, 0]T terdapat dua transisi yang enabled yaitu t2 dan t3 . Kedua transisi telah dijalankan sehingga semua proses algoritma ini telah dijalankan dan menuju ke algoritma yang dijalankan pertama kali. Pada keadaan awal [1, 0, 0, 0]T terdapat sebuah transisi yang enabled yaitu t1 yang telah dijalankan pada bagian sebelumnya. 61
Berikutnya dibahas beberapa analisis pada sistem event diskrit yang berlaku pada Petri net. Analisis ini meliputi keterbatasan (boundedness), konservasi (conservation) dan coverability. Ketiga hal tersebut dapat dianalisis menggunakan coverability tree. Pada setiap pembahasan disertai dengan contoh untuk memudahkan dalam memahami keterangan yang diberikan. 2.5.3
Keterbatasan (boundedness) Sistem dikatakan tidak stabil jika terjadi ledakan (blow up) pada nilai
variabel keadaannya. Pengertian ini juga berlaku pada salah satu model sistem event diskrit yaitu Petri net. Telah didefinisikan pada bagian sebelumnya bahwa variabel keadaan dari Petri net adalah jumlah token pada setiap place. Jika jumlah token pada satu atau lebih place bertambah menuju ke takhingga maka Petri net tidak stabil. Place yang mempunyai token menuju takhingga disebut tidak terbatas (unbounded ) dan place yang mempunyai token kurang dari atau sama dengan nilai tertentu disebut terbatas (bounded ). • I a
s
B
c
Q Gambar 2.25 Petri net Antrian Sederhana
Petri net pada Gambar 2.25 menyatakan antrian sederhana. Himpunan place P dari Petri net mempunyai tiga elemen yaitu Q, I dan B yang masing-masing menyatakan antrian (queue), server idle dan server busy. Ada tiga transisi di Petri net tersebut yaitu a, s dan c yang ditulis T = {a, s, c}. Transisi a, s dan c masing-masing menyatakan event pelanggan datang, pelayanan dimulai dan pelayanan selesai (pelanggan keluar). Transisi a selalu enabled seperti terlihat di Gambar 2.25 sehingga dapat difire setiap saat. Transisi a tidak mempunyai place input yang dapat dinyatakan dengan I(a) = ∅. Transisi s tergantung dua kondisi yaitu kehadiran pelanggan di antrian dan server dalam keadaan idle. Hal ini dinyatakan dalam Petri net melalui dua place input untuk transisi ini yaitu Q dan I yang ditulis I(s) = {Q, I}. Transisi c dapat difire jika server dalam keadaan busy sehingga place input dari transisi ini adalah place B. Petri net pada Gambar 2.25 menyatakan antrian sedang kosong karena tidak ada token di place Q dan sebuah token berada di place I yang menyatakan server dalam keadaan idle. 62
Dengan menggunakan Gambar 2.25 dapat ditentukan place yang unbounded dan bounded. Place Q termasuk unbounded karena transisi a dapat difire setiap saat. Pemfirean transisi a menyebabkan jumlah token pada place Q bertambah. Kedua place yang lain yaitu I dan B termasuk bounded karena kedua place tersebut menyimpan sebuah token secara bergantian. Jika token berada di place I maka server dalam keadaan idle dan jika token berada di place B maka token dalam keadaan busy. Pengertian keterbatasan (boundedness) dapat dituliskan dalam definisi berikut. Definisi 2.16 (Cassandras, 1993). Place pi ∈ P pada Petri net dengan keadaan awal x0 disebut k-bounded atau k-safe jika x(pi ) ≤ k untuk semua keadaan yang mungkin terjadi. Berdasarkan keterangan sebelumnya dapat ditentukan batas atas dari place yang bounded yaitu place I dan B. Jelas bahwa nilai k untuk kedua place tersebut adalah 1 karena place I dan B tidak mungkin mempunyai token lebih dari satu dengan keadaan awal [0, 1, 0]T . Place yang mempunyai batas atas 1 disebut 1-bounded atau safe. Setiap place yang bounded memiliki batas atas berhingga dan place yang unbounded didefinisikan memiliki batas atas takhingga yang dinotasikan dengan ω. Batas atas dapat dinyatakan sebagai keadaan Petri net dengan jumlah token pada place menyatakan batas atasnya. Misal keadaan yang menyatakan batas atas Petri net dinotasikan xb. Definisi keadaan xb merupakan perumuman dari keadaan Petri net karena keadaan xb dapat memuat ω. Batas atas place tertentu pada Petri net merupakan jumlah token maksimum yang disimpan pada place tersebut untuk semua keadaan yang mungkin terjadi. Cara memperoleh batas atas place di Petri net dapat ditulis dalam persamaan berikut. xb(pi ) = max x(pi ), x
∀pi ∈ P
(2.22)
dengan x menyatakan semua keadaan yang dapat dicapai dari keadaan awal (termasuk). Persamaan (2.22) dapat digunakan dengan mudah jika jumlah keadaan yang mungkin terjadi adalah berhingga. Jika jumlah keadaan yang mungkin terjadi adalah tak hingga maka persamaan (2.22) sulit digunakan. Untuk itu diperlukan metode lain dalam menentukan batas atas setiap place pada Petri net. 63
Coverability tree dapat digunakan sebagai solusi permasalahan ini karena jumlah node pada coverability tree berhingga. Ingat bahwa node pada coverability tree menyatakan keadaan yang mungkin terjadi dan edge menyatakan transisi yang menyebabkan perubahan keadaan. Dengan menggunakan keterangan sebelumnya maka penentuan batas atas place didasarkan pada node di coverability tree. Batas atas suatu place diperoleh dari maksimum jumlah token yang disimpan place tersebut untuk setiap node di coverability tree. Jelas bahwa jika jumlah token suatu place untuk setiap node berhingga maka place tersebut bounded. Jika terdapat node yang memiliki nilai ω untuk place tertentu maka place tersebut unbounded. Dengan menggunakan keterangan sebelumnya maka penentuan batas atas place pada Petri net dapat dituliskan sebagai berikut. xb(pi ) = max S(pi ), S∈S
∀pi ∈ P
(2.23)
dengan (S, Ev, T ) merupakan coverability tree dari Petri net. Selanjutnya ditentukan batas atas setiap pada Petri net antrian sederhana dengan menggunakan persamaan (2.23). Dengan menggunakan metode yang telah dibahas pada bagian sebelumnya maka coverability tree berikut diperoleh dari Petri net antrian sederhana.
0 1 0
a
ω 1 0
ω 1 c ω 0 0 a s ω 1 0 a ω 1 1 0
Gambar 2.26 Coverability Tree untuk Petri net Antrian Sederhana Coverability tree di Gambar 2.26 menggunakan [x(Q), x(I), x(B)]T sebagai keadaan Petri net. Misal urutan elemen list node S dinyatakan dengan S1 = [0, 1, 0]T , S2 = [ω, 1, 0]T = S3 , S4 = [ω, 0, 1]T = S5 dan S6 = [ω, 1, 0]T . Batas atas place Q adalah ω karena xb (Q) = max1≤i≤6 {Si (Q)}. Jelas bahwa Si (Q) bernilai ω untuk 2 ≤ i ≤ 6 sehingga max1≤i≤6 {Si (Q)} sama dengan max {S1 (Q), S2 (Q)} = max {0, ω} = ω. Dengan menggunakan cara yang sama dengan sebelumnya diperoleh batas atas dari place I dan B adalah 1 yang dapat ditulis xb(I) = 1 = xb(B). 64
Selanjutnya didesain algoritma untuk menentukan batas atas setiap place di Petri net dengan menggunakan metode yang telah dibahas sebelumnya. Batas atas suatu place diperoleh dari maksimum jumlah token yang disimpan oleh place tersebut untuk setiap node di coverability tree. Berdasarkan keterangan sebelumnya jika terdapat nilai ω pada satu atau lebih node maka batas atas bernilai ω tanpa memperhitungkan node yang lain dengan jumlah token berhingga. Kondisi ini akan dipertimbangkan dalam penyusunan algoritma dengan tujuan mengurangi jumlah kerja sehingga mempercepat waktu komputasi. Algoritma 2.11 Menentukan Batas Atas Setiap Place di Petri net Input: S, P Output: xb /* keadaan yang menyatakan batas atas */ 1 xb ← S1 /* inisialisasi */ 2 for all pl ∈ P do 3 j←2 4 while j ≤ |S| and xb(pl) 6= ω do 5 xb(pl) ← max {xb(pl), Sj (pl)} 6 j ←j+1 7 end while 8 end for Berikutnya ditentukan kompleksitas algoritma menentukan batas atas place dengan menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Jenis operasi yang dihitung harus ditentukan terlebih dahulu sebelum menghitung banyak kerja. Operasi yang dihitung adalah mencari maksimum dua bilangan yang dilakukan pada baris 5. Selanjutnya ditentukan kondisi yang menyebabkan kemungkinan terburuk terjadi yaitu banyak kerja yang dilakukan Algoritma 2.11 paling besar. Perintah pada while dilakukan selama belum menemukan keadaan ω sehingga kondisi yang menyebabkan kemungkinan terburuk (worst case) untuk place tertentu jika place tersebut terbatas (bounded ). Dengan menggunakan kesimpulan sebelumnya maka kondisi yang menyebabkan banyak kerja yang dilakukan algoritma ini paling besar adalah semua place terbatas. Pada kondisi ini banyak kerja yang dilakukan untuk setiap place adalah |S| − 1 sehingga Algoritma 2.11 bekerja sebanyak |P |(|S| − 1) yang ditulis W (|P |, |S|) = |P |(|S| − 1) = O(|P | × |S|). Banyak memori yang dipakai Algoritma 2.11 tergantung variabel tambahan. Variabel tambahan pada algoritma tersebut adalah j dan pl. Jelas bahwa banyak memori yang dipakai kedua variabel tambahan tetap yaitu tidak 65
tergantung input yang diberikan. Jadi algoritma menentukan batas atas place bekerja di tempat (work in place). Untuk lebih memperjelas proses yang dilakukan oleh Algoritma 2.11, berikut diberikan contoh pada Petri net antrian sederhana. Contoh 2.29. Input algoritma tersebut adalah list S = [S1 , . . . , S6 ] dengan S1 = [0, 1, 0]T , S2 = [ω, 1, 0]T = S3 , S4 = [ω, 0, 1]T = S5 , S6 = [ω, 1, 0]T dan P = {Q, I, B}. Pada baris 1, variabel xb diinisialisasi S1 yaitu [0, 1, 0]T . Misal pada iterasi pertama pl = Q. Variabel j diinisialisasi dengan 2 pada baris 3. Kondisi pada baris 4 dipenuhi karena 2 = j ≤ |S| = 6 dan 0 = xb(Q) 6= ω proses dilanjutkan ke baris 5. Setelah menjalankan baris ini variabel xb(Q) berubah menjadi ω karena S2 (Q) = ω. Perintah pada baris 6 menyebabkan variabel j bernilai 3 dan menuju ke kondisi pada baris 4. Kondisi ini tidak dipenuhi karena variabel xb(Q) bernilai ω dan dilanjutkan dengan place berikutnya. Pada iterasi kedua place yang diproses adalah I. Baris 3 menginisialisasi variabel j dengan 2. Kondisi pada while dipenuhi karena 2 = j ≤ |S| = 6 dan 1 = xb(I) 6= ω sehingga menjalankan perintah pada baris 5 dan 6. Perintah pada baris 5 tidak mengubah nilai xb(I) karena S2 (I) = 1 dan perintah pada baris 6 mengubah nilai j menjadi 3 dan menuju ke kondisi while. Kondisi dipenuhi karena 3 = j ≤ |S| = 6 dan 1 = xb(I) = 6 ω. Variabel xb(I) tidak berubah setelah menjalankan baris 5 karena S3 (I) = 1 dan variabel j berubah menjadi 4. Kondisi pada while kembali dipenuhi karena 4 = j ≤ |S| = 6 dan 1 = xb(I) 6= ω. Perintah pada baris 5 tidak mengubah nilai variabel xb(I) karena 0 = S4 (I) < xb(I) = 1 dan variabel j menjadi 5 setelah menjalankan perintah pada baris 6. Kondisi pada baris 4 dipenuhi karena 5 = j ≤ |S| = 6 dan 1 = xb(I) 6= ω. Dengan alasan yang sama seperti sebelumnya maka nilai variabel xb(I) tidak berubah dan variabel j bertambah menjadi 6. Kondisi pada while dipenuhi karena j = 6 = |S| dan 1 = xb(Q) 6= ω sehingga menuju ke baris 5. Disini variabel xb(I) tidak berubah karena xb(I) = 1 = S6 (I) dan pada baris berikutnya variabel j berubah menjadi 7. Hal ini menyebabkan kondisi pada baris 4 tidak dipenuhi sehingga dilanjutkan dengan place yang terakhir yaitu B. Dengan menggunakan cara yang sama seperti place sebelumnya maka diperoleh xb(B) = 1. Output dari algoritma ini adalah xb = [ω, 1, 1]T yang menyatakan place Q unbounded sedangkan batas atas place I dan B adalah 1. 66
Setelah mengkaji keterbatasan (boundedness), pada bagian berikutnya dibahas sifat konservasi (conservation) pada Petri net. Sifat ini berhubungan dengan tidak berubahnya jumlah token untuk semua keadaan yang mungkin terjadi. 2.5.4
Konservasi (conservation)
Token pada Petri net kadang merepresentasikan resource pada sistem pembagian resource. Sebagai contoh yaitu token pada place I di Petri net Gambar 2.25 menyatakan sebuah server pada sistem antrian sederhana. Token ini diberikan ke place B dan dikembalikan ke I untuk menyatakan perubahan keadaan pada server idle atau busy). Token tersebut tidak bisa hilang (berkurang) atau jumlah token pada place I dan B bertambah, karena pada sistem ini terdapat sebuah server. Ilustrasi sebelumnya merupakan contoh konservasi yang khusus yaitu jumlah token pada place I dan B selalu satu. Pada kasus yang lebih umum jumlah keseluruhan token pada Petri net tidak selalu tetap tetapi konstan jika diberikan bobot tertentu pada setiap place di Petri net. Petri net bersifat konservasi jika jumlah token pada semua place setelah dikalikan dengan bobotnya masing-masing bernilai konstan untuk setiap keadaan yang mungkin terjadi dari keadaan awal. Misal bobot dari place pi dinotasikan dengan γi dengan γi ≥ 0 untuk 1 ≤ i ≤ n. Vektor bobot adalah vektor baris dengan elemen ke-i merupakan bobot place pi yang dapat ditulis γ = [γ1 , γ2 , . . . , γn ]. Pada ilustrasi sistem antrian sederhana, vektor bobot yang digunakan adalah γ = [1, 1]. Berdasarkan pembahasan sebelumnya maka sifat konservasi Petri net dapat dituliskan dalam definisi berikut. Definisi 2.17 (Cassandras, 1993). Petri net dengan keadaan awal x0 disebut konservatif (conservative) terhadap γ = [γ1 , γ2, . . . , γn ] jika n X
γi x(pi ) = konstan
(2.24)
i=1
untuk semua keadaan yang mungkin terjadi. Perhatikan bahwa [γ1 , γ2, . . . , γn ] adalah vektor baris yang dinotasikan dengan γ dan [x(p1 ), x(p2 ), . . . , x(pn )]T adalah vektor kolom yang dinotasikan 67
dengan x. Dengan menggunakan notasi vektor persamaan (2.24) dapat ditulis menjadi persamaan berikut. γ x = konstan
(2.25)
Sifat konservasi Petri net dapat ditentukan dengan menguji keberlakuan kondisi (2.24) untuk setiap keadaan yang mungkin. Hal ini sulit dilakukan karena jumlah keadaan yang diuji sangat besar dan tidak mungkin dilakukan ketika jumlah keadaan adalah takhingga. Untuk itu dibutuhkan coverability tree untuk menyelesaikan permasalahan ini karena node di coverability tree mewakili semua keadaan yang mungkin terjadi. Perhatikan bahwa jika terdapat satu atau lebih place pi yang unbounded maka bobot dari place tersebut adalah 0 yaitu γi = 0 agar sifat konservasi mungkin dipenuhi. Ingat bahwa suatu place termasuk unbounded jika terdapat node pada coverability tree yang mempunyai nilai ω untuk place tersebut. Pemberian bobot 0 pada place unbounded disebabkan ω tidak merepresentasikan nilai integer yang tetap, melainkan himpunan tak hingga nilai. Misal terdapat dua node S1 dan S2 di coverability tree sedemikian hingga S1 (pi ) = S2 (pi ) untuk semua pi dan S1 (pk ) = ω = S2 (pk ) untuk beberapa pk . Secara umum nilai sebenarnya dari S1 (pk ) dan S2 (pk ) tidak sama karena ω notasi dari tak berhingga nilai integer. Jika γk > 0 maka secara umum persamaan berikut tidak berlaku γ S1 = γ S2
(2.26)
Berdasarkan pengamatan sebelumnya, jika vektor γ diberikan sedemikian hingga γi = 0 untuk semua i dengan x(pi ) = ω maka sifat konservasi dapat diuji dengan mengevaluasi persamaan (2.24) untuk setiap keadaan pada coverability tree. Jika persamaan tersebut bernilai sama maka sifat konservasi terpenuhi. Selanjutnya dibahas kebalikan dari permasalahan sebelumnya. Diberikan suatu Petri net, akan ditentukan bentuk vektor bobot γ yang memenuhi kondisi konservasi (2.24) atau dipastikan tidak ada vektor bobot γ yang memenuhi. Untuk menyelesaikan permasalahan ini, pertama didefinisikan γi = 0 untuk semua place pi yang unbounded. Selanjutnya misal terdapat b ≤ n place yang bounded yaitu p1 , p2 , . . . , pb selain itu coverability tree mempunyai r node dan faktor konstan pada (2.24) dinotasikan C.
68
Ingat bahwa kondisi konservasi (2.24) harus dipenuhi untuk setiap node di coverability tree sehingga diperoleh himpunan r persamaan. Persamaan ke-k berbentuk b X γi Sk (pi ) = C (2.27) i=1
dengan 1 ≤ k ≤ r. Jika terdapat node duplicate pada coverability tree maka jumlah persamaan kurang dari r. Variabel pada persamaan (2.27) berjumlah
b + 1 yang terdiri dari bobot place yang bounded dan konstanta yang dinotasikan γ1 , γ2 , . . . , γb , C. Permasalahan konservasi menjadi menyelesaikan sistem persamaan linier. Solusi dari permasalahan ini tidak selalu ada tetapi jika ada maka dapat dicari dengan teknik standar. Perhatikan Petri net pada Gambar 2.25. Pada contoh berikut dibahas bagaimana menentukan sifat konservasinya. Contoh 2.30. Telah dikaji pada bagian sebelumnya bahwa Gambar 2.26 merupakan coverability tree dari Petri net antrian sederhana. Coverability tree mempunyai 6 node sehingga terdapat 6 persamaan. Terdapat dua place yang bounded yaitu place I dan B sehingga variabel pada sistem persamaan linier berjumlah 3. S1 = [0, 1, 0]T → γ2 = C S2 = [ω, 1, 0]T
→
γ2 = C
S3 = [ω, 1, 0]T
→
γ2 = C
S4 = [ω, 0, 1]T
→
γ3 = C
S5 = [ω, 0, 1]T
→
γ3 = C
S6 = [ω, 1, 0]T
→
γ2 = C
(2.28)
Nilai γ1 didefinisikan 0 karena place Q unbounded. Terlihat pada sistem persamaan linier (2.28) bahwa pada dasarnya terdapat dua persamaan yang akan diselesaikan yaitu γ2 = C dan γ3 = C. Permasalahan ini berubah menjadi sistem persamaan linier dengan dua persamaan dan tiga variabel. Penyelesaian permasalahan ini dapat diperoleh dengan memilih variabel C sebagai parameter. Nilai yang diberikan ke parameter C harus lebih dari nol karena jika C ≤ 0 maka variabel γ2 dan γ3 juga tidak positif dan hal ini menyalahi definisi sebelumnya. Misal diberikan nilai 1 pada variabel C maka diperoleh γ2 = 1 = γ3 sehingga vektor bobot secara lengkap dapat ditulis γ = [0, 1, 1] dengan C = 1. 69
Pada bagian berikutnya dibahas salah satu aspek dalam analisis Petri net mengenai coverability keadaan. Coverability keadaan dapat dianalisis menggunakan coverability tree yang telah dibahas pada bagian sebelumnya. 2.5.5
Coverability Keadaan Konsep coverability mempunyai hubungan dengan L1-liveness yaitu
jika terdapat barisan pemfirean tertentu sehingga transisi dapat difire paling tidak sekali. Hanya transisi yang enabled yang dapat difire. Agar suatu transisi enabled maka token harus tersedia pada place input paling tidak sebanyak bobot arcnya. Misalkan keadaan y = [y(p1), y(p2), . . . , y(pn )]T memuat jumlah token minimum yang dibutuhkan agar beberapa transisi tj enabled. Dengan kata lain beberapa transisi ini enabled jika jumlah token pada setiap place di Petri net lebih dari atau sama dengan jumlah token pada keadaan y. Jika keadaan yang menyebabkan beberapa transisi tj enabled dinotasikan dengan x maka berlaku x(pi ) ≥ y(pi) untuk setiap pi ∈ P . Hal ini disebut keadaan x mengcover keadaan y. Beberapa transisi ini dapat enabled jika keadaan x dapat dicapai dari keadaan awal x0 . Definisi 2.18 (Cassandras, 1993). Diberikan Petri net dengan keadaan awal x0 . Keadaan y coverable jika terdapat barisan transisi yang menyebabkan keadaan x0 menjadi keadaan x dengan x(pi ) ≥ y(pi) untuk semua pi ∈ P . Perhatikan bahwa jika y adalah keadaan yang menyatakan jumlah token minimum yang dibutuhkan untuk membuat beberapa transisi tj enabled maka jika y tidak coverable dari keadaan saat ini dapat disimpulkan bahwa transisi tj dalam kondisi dead. Analisis coverability keadaan dapat digunakan untuk mengidentifikasi transisi yang dead. Dengan memperhatikan coverability tree dapat ditentukan apakah keadaan y coverable. Diberikan keadaan awal x0 kemudian dikonstruksi coverability tree. Jika terdapat node x pada tree sedemikian hingga x(pi ) ≥ y(pi) untuk setiap pi ∈ P maka y coverable. Lintasan (path) dari node root ke x mendeskripsikan barisan pemfirean menuju keadaan x. Jika x memuat ω pada satu atau lebih place maka lintasan ini mengandung loop. Transisi yang berada dalam loop dapat difire berulang-ulang hingga keadaan x tercapai. Sebagai contoh keadaan [3, 1, 0]T pada Petri net di Gambar 2.25 adalah coverable 70
karena [ω, 1, 0]T dapat dicapai dari node root [0, 1, 0]T . Urutan pemfirean transisi untuk memperoleh keadaan [3, 1, 0]T tidak tunggal misalnya {a, a, a} atau {a, s, a, c, s, a, c, a, a}. Pada bagian berikutnya didesain algoritma untuk menganalisis coverability keadaan. Di dalam analisis coverability keadaan terdapat proses pengujian apakah suatu keadaan mengcover keadaan yang lain. Algoritma ini didesain sebelum mendesain algoritma analisis coverability keadaan. Ingat pada pembahasan sebelumnya bahwa keadaan x mengcover keadaan y jika xi ≥ yi untuk setiap 1 ≤ i ≤ |P |. Jika terdapat i yang tidak memenuhi xi ≥ yi atau pada kasus ini berlaku xi < yi maka keadaan x tidak mengcover keadaan y. Ide penyusunan algoritma ini adalah mencari i yang memenuhi xi < yi . Jika terdapat i yang memenuhi maka keadaan x tidak mengcover keadaan y tetapi jika tidak ada i yang memenuhi maka keadaan x mengcover keadaan y. Algoritma yang digunakan untuk pencarian adalah algoritma pencarian sekuensial (sequential search). Algoritma 2.12 Pengujian Cover Input: x, y dengan |x| = |y| Output: iscovers /* bernilai boolean */ 1 iscovers ← false; i ← 1 /* inisialisasi */ 2 while i ≤ |x| and xi ≥ yi do 3 i← i+1 4 end while 5 if i > |x| then 6 iscovers ← true 7 end if Proses yang dilakukan Algoritma 2.12 serupa dengan algoritma mencari node duplicate. Perbedaan kedua algoritma tersebut terletak pada output. Pada Algoritma 2.9 jika ditemukan node duplicate maka menghasilkan true sedangkan Algoritma 2.12 jika ditemukan i yang tidak memenuhi xi ≥ yi maka menghasilkan false. Selanjutnya dibahas kompleksitas algoritma pengujian cover dengan menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Operasi yang dihitung adalah perbandingan yang dilakukan pada baris 2. Perintah pada baris ini dikerjakan selama xi ≤ yi dipenuhi untuk 1 ≤ i ≤ |x|. Jika keadaan x mengcover y maka banyak kerja yang dilakukan adalah |x| yang ditulis W (|x|) = |x| = O(|x|). 71
Banyak memori yang dipakai oleh algoritma pengujian cover tergantung variabel tambahan pada algoritma tersebut. Satu-satunya variabel tambahan adalah i yang bertipe integer. Jelas bahwa banyak memori yang dipakai variabel i tetap yaitu tidak tergantung input. Jadi Algoritma 2.12 bekerja di tempat (work in place). Selanjutnya diilustrasikan proses yang dilakukan oleh Algoritma 2.12 untuk mengetahui apakah keadaan [ω, 1, 0]T mengcover keadaan [3, 1, 0]T . Contoh 2.31. Input Algoritma 2.12 adalah x = [ω, 1, 0]T dan y = [3, 1, 0]T . Pada baris 1 variabel iscovers diinisialisasi false dan i diinisialisasi 1. Kondisi while bernilai benar karena 1 = i ≤ |x| = 3 dan ω = x1 ≥ y1 = 3. Perintah pada baris 3 mengubah variabel i menjadi 2. Jelas bahwa 2 = i ≤ |x| = 3 dan x2 = 1 = y2 sehingga variabel i ditambah satu menjadi 3. Kondisi pada baris 2 tetap dipenuhi karena i = 3 = |x| dan x2 = 0 = y2 kemudian dilanjutkan dengan menjalankan perintah pada baris 3. Setelah menjalankan baris ini variabel i bernilai 4 sehingga menyebabkan kondisi pada while tidak dipenuhi. Kondisi pada baris 5 dipenuhi karena 4 = i > |x| = 3 sehingga variabel iscovers bernilai true. Hal ini menunjukkan keadaan [ω, 1, 0]T mengcover [3, 1, 0]T . Jika keadaan x tidak mengcover keadaan y maka terdapat i yang tidak memenuhi xi ≥ yi dengan 1 ≤ i ≤ |x| sehingga saat keluar dari perulangan while nilai variabel i ≤ |x|. Hal ini menyebabkan kondisi pada if tidak dipenuhi sehingga nilai variabel iscovers tidak diubah yaitu tetap bernilai false yang menunjukkan keadaan x tidak mengcover keadaan y. Contoh 2.32. Algoritma 2.12 digunakan untuk mengetahui apakah keadaan [ω, 0, 1]T mengcover [ω, 1, 0]T sehingga variabel input bernilai x = [ω, 0, 1]T dan y = [ω, 1, 0]T . Variabel iscovers dan i masing-masing diinisialisasi false dan 1. Kondisi pada while dipenuhi karena 1 = i ≤ |x| = 3 dan x1 = ω = y1 sehingga variabel i ditambah 1 menjadi 2. Kenyataan 0 = x2 y2 = 1 menyebabkan kondisi pada baris 2 bernilai salah dan menuju ke baris 5. Kondisi pada if tidak dipenuhi karena 2 = i ≯ |x| = 3 sehingga nilai variabel iscovers tidak berubah yaitu false. Hal ini menunjukkan keadaan x = [ω, 0, 1]T tidak mengcover y = [ω, 1, 0]T . 72
Selanjutnya dibahas algoritma yang bertujuan menganalisis coverability keadaan. Input algoritma ini adalah Petri net dengan keadaan awal tertentu dan keadaan yang diuji sedangkan outputnya adalah nilai boolean true atau false. Algoritma ini menghasilkan true jika keadaan yang diuji coverable dan menghasilkan false jika tidak coverable. Proses yang dilakukan dalam algoritma ini sebagai berikut. Pertama Petri net dengan keadaan awal tertentu diubah menjadi coverability tree dengan Algoritma 2.10. Langkah berikutnya adalah mencari apakah terdapat node di coverability tree yang mengcover keadaan ini (keadaan yang diuji). Jika terdapat satu atau lebih node yang memenuhi kondisi sebelumnya maka keadaan yang diuji coverable dan jika tidak ada node yang memenuhi maka keadaan yang diuji tidak coverable. Berdasarkan keterangan sebelumnya maka dapat disimpulkan permasalahan analisis coverability keadaan termasuk pencarian (searching). Terdapat beberapa metode untuk menyelesaikan permasalahan pencarian. Disini digunakan metode pencarian yang sama dengan sebelumnya yaitu pencarian secara sekuensial (sequential search) karena metode ini sederhana sehingga mudah dipahami dan diimplementasikan. Algoritma 2.13 Pengujian Coverable Input: S, x Output: iscoverable /* bernilai boolean */ 1 iscoverable ← true; i ← 1 /* inisialisasi */ 2 while i ≤ |S| and not Algoritma 2.12 (Si , x) do 3 i← i+1 4 end while 5 if i > |S| then 6 iscoverable ← false 7 end if Kompleksitas algoritma pengujian coverable dapat ditentukan dengan menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai algoritma tersebut. Jenis operasi yang dihitung harus ditentukan terlebih dahulu sebelum menghitung banyak kerja. Operasi yang dihitung disini sama dengan algoritma pengujian cover yaitu perbandingan. Perbandingan dilakukan saat menjalankan Algoritma 2.12 pada baris 2. Perintah pada baris ini dilakukan selama belum ditemukan keadaan di S yang mengcover x. Kemungkinan terburuk (worst case) terjadi jika tidak ada keadaan di S yang mengcover x. Pada kondisi ini Algoritma 2.12 dijalankan sebanyak jumlah 73
anggota S yaitu |S|. Jadi banyak kerja yang dilakukan adalah |S| × |x| yang ditulis W (|S|, |x|) = |S| × |x| = O(|S| × |x|). Satu-satunya variabel tambahan pada Algoritma 2.13 adalah i. Jelas bahwa banyak memori yang dipakai variabel ini tetap sehingga algoritma pengujian coverable bekerja di tempat (work in place). Perhatikan Petri net di Gambar 2.25. Jelas bahwa Gambar 2.26 merupakan coverability tree dari Petri net tersebut. Berikut merupakan ilustrasi Algoritma 2.13 untuk menentukan apakah keadaan [3, 1, 0]T coverable. Contoh 2.33. Input Algoritma 2.13 adalah S = [S1 , . . . , S6 ], x = [3, 1, 0]T . Misal elemen dari S berturut-turut adalah S1 = [0, 1, 0]T , S2 = [ω, 1, 0]T = S3 , S4 = [ω, 0, 1]T = S5 , S6 = [ω, 1, 0]T . Pada tahap inisialisasi variabel iscoverable bernilai true dan variabel i bernilai 1. Jelas bahwa kondisi 1 = i ≤ |S| = 6 bernilai benar. Keadaan di node S1 = [0, 1, 0]T tidak mengcover x = [3, 1, 0]T sehingga Algoritma 2.12 menghasilkan false. Hal ini menyebabkan kondisi pada while dipenuhi dan menjalankan baris 3. Setelah menjalankan baris ini variabel i bernilai 2. Kondisi pada while tidak dipenuhi karena S2 = [ω, 1, 0]T mengcover x = [3, 1, 0]T yang berarti Algoritma 2.12 menghasilkan true. Jelas bahwa 2 = i ≯ |S| = 6 sehingga kondisi pada if tidak dipenuhi dan perintah pada baris 6 tidak dijalankan. Algoritma ini menghasilkan true yang menyatakan keadaan [3, 1, 0]T coverable seperti telah dibahas pada bagian sebelumnya.
74
BAB 3 METODA PENELITIAN 3.1
Tahap-tahap Penelitian
Penelitian ini dapat dibagi menjadi beberapa tahap sebagai berikut. 1. Membangun model Petri net lampu lalulintas di persimpangan. Membangun model Petri net lampu lalulintas dimulai dengan kasus yang sederhana yaitu sebuah lampu lalulintas. Selanjutnya didesain Petri net lampu lalulintas di persimpangan yang terdiri dari 2 jalur. 2. Mereduksi keadaan Petri net. Mereduksi Petri net yang telah didesain agar mempunyai jumlah place yang lebih sedikit tanpa kehilangan informasi sehingga mempercepat waktu komputasi. 3. Mendesain algoritma langkah sebelumnya. Membuat perumuman desain Petri net pada langkah sebelumnya yaitu membuat algoritma untuk mendesain Petri net lampu lalulintas di persimpangan dengan jumlah jalur sebarang. 4. Menganalisis model Petri net. Metode yang digunakan untuk analisis adalah coverability tree. Dengan menggunakan metode ini dapat diketahui keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. 5. Mengimplementasikan ke dalam program. Membuat program untuk mensimulasikan jumlah pengguna di masingmasing jalur pada tiap waktu. Bahasa pemrograman yang digunakan adalah Scilab yang dapat diperoleh dan digunakan dengan bebas. Selain itu juga dibuat program untuk membaca Petri net yang dibuat menggunakan PIPE. PIPE adalah program yang digunakan untuk membuat Petri net secara visual yang gratis.
75
3.2
Diagram Alir Penelitian
Berikut merupakan gambar diagram alir penelitian ini. Membangun Petri net
Reduksi Keadaan
Desain Algoritma
Analisis Petri net
Implementasi Gambar 3.1 Diagram Alir Penelitian
76
BAB 4 PETRI NET DAN SIMULASI PENGGUNA Pada bab ini dibahas bagaimana cara membangun model Petri net lampu lalulintas di persimpangan. Metode membangun Petri net dituliskan dalam bentuk algoritma dengan tujuan dapat digunakan lebih luas. Pada setiap pembahasan disertakan contoh Petri net yang sederhana agar lebih mudah dipahami. Petri net yang sudah dibangun kemudian dianalisis dengan menggunakan metode yang telah dijelaskan pada bab sebelumnya. Hal-hal yang dianalisis meliputi keterbatasan (boundedness), konservasi (conservation) dan coverability keadaan. Pada bagian terakhir dibahas algoritma mensimulasikan jumlah pengguna di persimpangan.
4.1
Pendahuluan Pada saat mendesain algoritma membangun coverability tree pada bab
sebelumnya, penyesuaian dilakukan pada definisi coverability tree. Penyesuaian ini bertujuan menghilangkan unsur pemetaan karena pemetaan sulit dituliskan dalam bentuk algoritma. Definisi Petri net pada bab sebelumnya juga mengandung unsur pemetaan. Untuk itu sebelum mendesain algoritma membangun model Petri net lampu lalulintas di persimpangan, definisi Petri net disesuaikan terlebih dahulu. Definisi 4.1. Petri net adalah 3-tuple (P, T, Aw) dengan • P : himpunan berhingga place, P = {p1 , p2 , . . . , pn }, • T : himpunan berhingga transisi, T = {t1 , t2 , . . . , tm }, • Aw : himpunan arc dan bobot, Aw ⊆ ((P × T ) ∪ (T × P )) × {0, 1, . . . }, Ide penyesuaian pada definisi Petri net serupa dengan penyesuaian yang dilakukan pada definisi coverability tree yaitu menggabungkan unsur pemetaan ke arc. Hal ini dapat dilakukan karena setiap arc pada Petri net mempunyai bobot sebuah bilangan bulat tak negatif. Dengan penyesuaian ini arc pada Petri net didefinisikan sebagai tiga tuple dengan elemen ketiga menyatakan bobot. Elemen pertama dan kedua sama dengan definisi sebelumnya yaitu masing-masing menyatakan asal dan tujuan arc. 77
Agar Definisi 4.1 lebih jelas, berikut dibahas bagaimana mengidentifikasi Petri net antrian sederhana dengan definisi tersebut. Petri net ini telah dibahas pada bab sebelumnya yaitu pada saat membahas analisis Petri net sehingga disini tidak dibahas secara lengkap. • I a
s
B
c
Q Gambar 4.1 Petri net Antrian Sederhana
Perhatikan Petri net pada Gambar 4.1. Jelas bahwa Petri net tersebut mempunyai tiga place dan tiga transisi yaitu P = {Q, I, B} dan T = {a, s, c}. Himpunan arc dan bobotnya yang dinotasikan Aw berisi 6 elemen yang ditulis Aw = {(a, Q, 1), (I, s, 1), (Q, s, 1), (s, B, 1), (B, c, 1), (c, I, 1)}. Selanjutnya dibahas permasalahan membangun Petri net lampu lalulintas sederhana. Digunakan istilah sederhana karena Petri net berikut tidak mencantumkan waktu tunggu dan hanya berlaku untuk sebuah lampu lalulintas.
4.2
Petri net Lampu Lalulintas Sederhana Sebuah lampu lalulintas yang tidak mencantumkan waktu tunggu da-
pat dimodelkan menggunakan Petri net. Dalam memodelkan Petri net langkah pertama yang dilakukan adalah menentukan place. Place pada Petri net merupakan variabel keadaan. Pada sebuah lampu lalulintas terdapat tiga buah lampu yaitu merah, kuning dan hijau. Salah satu dari ketiga lampu lalulintas dalam keadaan menyala sehingga terdapat tiga kemungkinan keadaan yang berbeda. Pada permasalahan ini place menyatakan lampu lalulintas sehingga Petri net ini membutuhkan tiga place yang masing-masing menyatakan lampu merah, kuning dan hijau. Nama place pada Petri net ini adalah merah (M), kuning (K) dan hijau (H). Urutan lampu lalulintas yang menyala adalah merah-hijau-kuningmerah dan seterusnya. Setelah place ditentukan, langkah selanjutnya adalah menentukan transisi yang dibutuhkan. Terdapat tiga kemungkinan perubahan keadaan yang pada permasalahan ini adalah perubahan lampu lalulintas yang menyala yaitu merah-hijau (mh), hijau-kuning (hk) dan kuning-merah (km) sehingga dibutuhkan tiga transisi yang menyatakan ketiga perubahan tersebut. 78
Penentuan keadaan awal Petri net merupakan langkah berikutnya. Keadaan Petri net berkaitan dengan jumlah token pada setiap place. Pada permasalahan ini dibutuhkan sebuah token karena pada setiap saat terdapat satu lampu yang menyala. Place yang mempunyai token berarti lampu lalulintas yang direpresentasikan dalam keadaan menyala sedangkan place yang tidak mempunyai token berarti lampu lalulintas yang direpresentasikan dalam keadaan padam. Transisi mh menyatakan perubahan lampu lalulintas yang menyala dari merah ke hijau sehingga transisi ini enabled jika lampu lalulintas merah dalam keadaan menyala. Berdasarkan keterangan sebelumnya, lampu lalulintas merah menyala jika place M mempunyai sebuah token sehingga transisi mh enabled jika terdapat sebuah token pada place M. Hal ini dapat dimodelkan dengan menempatkan place M sebagai place input dari transisi mh dengan bobot arc 1. Setelah transisi ini difire, lampu lalulintas yang menyala adalah hijau yang dinyatakan dengan place H sehingga dengan alasan yang sama dengan sebelumnya place H merupakan place output dari transisi mh dengan bobot arc 1. Hal ini menyatakan setelah transisi mh difire place H menerima sebuah token. Place input dan output dari transisi hk dan km dapat diperoleh dengan cara yang sama.
M
mh
• H
hk
K
km
Gambar 4.2 Petri net Sederhana untuk Satu Lampu Lalulintas Berikut merupakan penjelasan Petri net pada Gambar 4.2. Lampu lalulintas yang dalam keadaan menyala adalah hijau karena place H mempunyai sebuah token. Transisi hk adalah satu-satunya transisi yang enabled. Hal ini sesuai dengan kenyataan bahwa setelah hijau menyala, lampu lalulintas yang menyala berikutnya adalah kuning. Pemfirean transisi hk menyebabkan token pada place H berpindah ke place K yang menyatakan lampu lalulintas hijau dalam keadaan padam dan kuning dalam keadaan menyala. Pada keadaan ini transisi hk tidak enabled dan transisi km menjadi enabled dengan alasan yang serupa dengan sebelumnya. Berikutnya disusun algoritma membangun Petri net yang berada di Gambar 4.2. Algoritma ini tidak membutuhkan input. Output algoritma ini adalah Petri net yang dinyatakan dengan 3-tuple (P, T, Aw) seperti pada 79
Definisi 4.1. Proses algoritma ini adalah memberikan nilai pada himpunan P , T dan Aw. Inisialisasi nilai pada himpunan P menyatakan place yang terdapat di Petri net. Pengisian elemen pada himpunan T dan Aw masing-masing menyatakan transisi dan arc pada Petri net. Misal vektor keadaan Petri net didefinisikan x = [x(M), x(H), x(K)]T maka algoritma lampu lalulintas sederhana dapat dituliskan sebagai berikut. Algoritma 4.1 Petri net Lampu Lalulintas Sederhana Input: Output: P, T, Aw, x0 /* Petri net bertanda */ 1 P ← {M, H, K} /* membuat place */ 2 T ← {mh, hk, km} /* transisi */ 3 Aw ← {(M, mh, 1), (mh, H, 1), (H, hk, 1), (hk, K, 1), (K, km, 1), (km, M, 1)} 4 x0 ← [0, 1, 0]T /* keadaan awal */ Petri net di Gambar 4.2 mempunyai 3 place yaitu M, H dan K. Hal ini dinyatakan dalam baris 1. Baris 2 menyatakan bahwa Petri net mempunyai 3 transisi yaitu mh, hk, km. Arc yang menghubungkan place dan transisi dinyatakan pada baris 3. Terlihat pada baris 4 bahwa pada keadaan awal terdapat sebuah token pada place H. Pengujian pure pada Petri net dapat dilakukan dengan mencari place yang menjadi input sekaligus output suatu transisi. Sifat transisi ini adalah irisan himpunan place input dan outputnya tidak kosong karena terdapat place yang menjadi anggota kedua himpunan tersebut. Berdasarkan definisi pada bab sebelumnya Petri net disebut pure jika untuk setiap transisi t ∈ T berlaku I(t) ∩ O(t) = ∅. Hal ini dapat dilakukan dengan menguji keberlakuan persamaan berikut. [
(I(t) ∩ O(t)) = ∅
(4.1)
t∈T
Untuk transisi mh berlaku I(mh) ∩ O(mh) = {M} ∩ {H} = ∅. Dapat ditunjukkan dengan cara sama untuk transisi hk dan transisi km berlaku I(hk) ∩ O(hk) = ∅ dan I(km) ∩ O(km) = ∅ sehingga persamaan (4.1) dipenuhi. Jadi Petri net lampu lalulintas sederhana pure. 4.2.1
Matriks Incidence Matriks forward incidence, backward incidence dan combined inci-
dence yang merepresentasikan Petri net lampu lalulintas sederhana berukuran 3×3. Sebelum itu harus ditentukan transisi yang mengisi variabel t1 , t2 dan t3 . 80
Misal transisi yang mengisi ketiga variabel tersebut adalah t1 = mh, t2 = hk, dan t3 = km. Place yang mengisi p1 , p2 dan p3 sama dengan definisi vektor keadaan yaitu p1 = M, p2 = H dan p3 = K. Ingat bahwa matriks forward incidence berkaitan dengan place output sedangkan matriks backward incidence berkaitan dengan place input. Transisi mh mempunyai sebuah place output yaitu H sehingga Af (2, 1) = 1. Nilai Af (3, 2) = 1 dan Af (1, 3) = 1 menyatakan place output dari hk adalah K dan place output dari km adalah M. Pengisian elemen matriks backward incidence dilakukan dengan cara yang sama. Matriks A merupakan matriks combined incidence yang diperoleh dari selisih matriks forward incidence dan backward incidence yaitu A = Af − Ab . 0 0 1 Af = 1 0 0 0 1 0
1 0 0 Ab = 0 1 0 0 0 1
−1 0 1 A = 1 −1 0 0 1 −1
(4.2)
Selanjutnya dibahas analisis Petri net lampu lalulintas sederhana. Sebelum melakukan analisis pada Petri net, coverability tree harus dibangun terlebih dahulu. Hal ini disebabkan analisis Petri net dilakukan dengan menggunakan coverability tree yang telah dibahas pada bagian sebelumnya. 4.2.2
Coverability Tree
Proses membangun coverability tree dapat dijelaskan sebagai berikut. Keadaan x0 = [0, 1, 0]T didefinisikan sebagai node root. Pada keadaan ini terdapat sebuah transisi yang enabled yaitu hk. Pemfirean transisi ini menyebabkan keadaan Petri net berubah menjadi [0, 0, 1]T dan transisi km menjadi satu-satunya transisi yang enabled. Keadaan berubah menjadi [1, 0, 0]T setelah transisi km difire. Pada keadaan ini transisi yang enabled adalah mh. Pemfirean transisi ini menyebabkan keadaan Petri net menjadi keadaan awal. Terlihat pada Gambar 4.3 bahwa setiap node mempunyai 1 anak. Hal ini disebabkan pada setiap keadaan terdapat sebuah transisi yang enabled. Jika Petri net bounded maka coverability tree juga disebut reachability tree. Pada kasus ini tree secara eksplisit memuat semua keadaan yang mungkin dicapai (reachable) sehingga dengan menggunakan reachability tree dapat ditentukan apakah keadaan tertentu mungkin terjadi. Tidak terdapat notasi ω di coverability tree sehingga Petri net di Gambar 4.2 bounded. Batas atas setiap place adalah 1 karena setiap place maksimum mempunyai 1 token. Berikut meru81
pakan coverability tree yang lengkap dari Petri net lampu lalulintas sederhana pada Gambar 4.2.
0 1 hk 0
0 0 km 1
1 0 mh 0
0 1 0
Gambar 4.3 Coverability Tree untuk Petri net di Gambar 4.2 Coverability tree yang telah diperoleh pada bagian ini digunakan untuk menganalisis sifat konservasi pada Petri net lampu lalulintas sederhana. 4.2.3
Konservasi Analisis yang dibahas adalah konservasi. Jelas bahwa Petri net lampu
lalulintas sederhana memenuhi sifat ini karena jumlah token pada Petri net adalah 1. Berikut merupakan cara pengujian sifat konservasi pada Petri net. Coverability tree di Gambar 4.3 memuat tiga keadaan yang berbeda yaitu [0, 1, 0]T , [0, 0, 1]T dan [1, 0, 0]T sehingga diperoleh sistem persamaan linier γ1 = C,
γ2 = C,
γ3 = C
(4.3)
Solusi sistem persamaan linier (4.3) dapat diperoleh dengan menempatkan variabel C sebagai parameter bebas. Nilai variabel γ1 , γ2 dan γ3 sama dengan nilai C. Misal dipilih parameter C bernilai 1 maka diperoleh γ = [γ1 , γ2, γ3 ]T = [1, 1, 1]T . Jadi Petri net pada Gambar 4.2 memenuhi sifat konservasi.
4.3
Petri net Lampu Lalulintas Dengan Waktu Tunggu Petri net yang dibahas pada bagian sebelumnya tidak mencantumkan
waktu tunggu. Pada bagian ini dibahas desain Petri net lampu lalulintas yang mencantumkan waktu tunggu. Dalam desain Petri net ini, selain menyatakan lampu lalulintas dalam keadaan menyala, token juga menyatakan satuan waktu. Jumlah token yang disimpan di place pada saat awal merupakan lama lampu lalulintas menyala. Transisi tambahan diperlukan untuk menghabiskan token pada place. Nama transisi baru ini diakhiri dengan kata ‘nyala’ yaitu merah nyala, kuning 82
nyala dan hijau nyala. Bobot arc dari place ke transisi ini adalah 1 sehingga dibutuhkan pemfirean sebanyak lama lampu lalulintas menyala untuk menghabiskan token pada place. Selain membutuhkan transisi tambahan, Petri net ini juga membutuhkan place tambahan untuk mengindikasikan token di place yang menyatakan lampu lalulintas telah habis. Nama place tambahan ini diawali dengan kata ‘buffer ’ yaitu buffer merah, buffer kuning dan buffer hijau. Place ini menerima token saat transisi ‘nyala’ difire. Ketika jumlah token di place ‘buffer ’ sama dengan lama lampu lalulintas menyala maka token di place yang menyatakan lampu lalulintas telah habis. Agar transisi yang mengubah lampu lalulintas yang menyala enabled ketika lampu lalulintas yang menyala akan berubah maka place input dari transisi yang mengubah lampu lalulintas yang menyala adalah place ‘buffer ’ dengan bobot lama lampu lalulintas menyala. Place output dari transisi ini adalah place yang menyatakan lampu lalulintas berikutnya dengan bobot lama lampu lalulintas menyala. Petri net secara lengkap dapat dilihat di Gambar 4.4. Place BM, BH dan BK masing-masing menyatakan buffer merah, buffer hijau dan buffer kuning. Transisi mn, hn dan kn masing-masing menyatakan merah nyala, hijau nyala dan kuning nyala. Lampu lalulintas merah, hijau dan kuning menyala masing-masing selama 8, 6 dan 4 satuan waktu. Keadaan Petri net pada Gambar 4.4 menyatakan lampu lalulintas hijau sudah menyala selama 3 satuan waktu karena place BH mempunyai 3 token. Place H mempunyai 3 token sehingga lampu lalulintas hijau masih akan menyala selama 3 satuan waktu. 4 8
km
4 BK
kn
M
mn
hk
K 8
6 mh
BM
6
3 H
BH
3
hn
Gambar 4.4 Petri net yang Mengandung Informasi Lama Lampu Lalulintas Menyala Secara umum bobot arc yang menghubungkan place BM ke transisi mh dan arc yang menghubungkan transisi km ke place M adalah lama lampu lalulintas merah menyala. Arc yang mempunyai bobot lama lampu lalulintas kuning menyala adalah arc yang menghubungkan place BK ke transisi km dan arc yang menghubungkan transisi hk ke place K. Jelas bahwa bobot arc yang menghubungkan place BH ke transisi hk dan arc yang menghubungkan transisi 83
mh ke place H adalah lama lampu lalulintas hijau menyala. Arc yang lain mempunyai bobot 1. Proses membangun Petri net secara umum dapat dituliskan dalam algoritma. Input algoritma ini adalah tiga bilangan bulat positif yaitu tm, tk dan th yang menyatakan lama masing-masing lampu lalulintas menyala. Variabel tm, tk dan th pada Algoritma 4.2 masing-masing menyatakan lama lampu lalulintas merah, kuning dan hijau menyala. Output algoritma sama dengan algoritma sebelumnya yaitu Petri net yang dinyatakan dengan 3-tuple (P, T, Aw) dan keadaan awal yang dinotasikan x0 . Pada Algoritma 4.2 vektor keadaan didefinisikan sebagai x = [x(M), x(BM), x(H), x(BH), x(K), x(BK)]T . Algoritma 4.2 Petri net Lampu Lalulintas Dengan Waktu Tunggu Input: tm, th, tk ∈ N /* lama lampu lalulintas menyala */ Output: P, T, Aw, x0 1 P ← {M, BM, H, BH, K, BK}; T ← {mn, mh, hn, hk, kn, km} 2 Aw ← {(M, mn, 1), (mn, BM, 1), (BM, mh, tm), (mh, H, th)} 3 Aw ← Aw ∪ {(H, hn, 1), (hn, BH, 1), (BH, hk, th), (hk, K, tk)} 4 Aw ← Aw ∪ {(K, kn, 1), (kn, BK, 1), (BK, km, tk), (km, M, tm)} 5 x0 ← [0, 0, th, 0, 0, 0]T Selanjutnya diteliti apakah Petri net lampu lalulintas dengan waktu tunggu pure. Untuk transisi mn berlaku I(mn) = {M} dan O(mn) = {BM} sehingga I(mn) ∩ O(mn) = ∅. Irisan himpunan place input dan output dari transisi mh juga himpunan kosong karena I(mh) = {BM} dan O(mh) = {H}. Place input dari transisi hn adalah H dan place output dari transisi hn adalah BH sehingga I(hn) ∩ O(hn) = ∅. Terlihat dari Gambar 4.4 bahwa tidak ada place yang menjadi input sekaligus output dari transisi hk sehingga irisan himpunan place input dan output dari transisi ini adalah himpunan kosong. Place K menjadi place input dari transisi kn dan place BK menjadi place output dari transisi kn sehingga I(kn) ∩ O(kn) = ∅. Transisi km juga memenuhi I(km) ∩ O(km) = ∅ karena I(km) = {BK} dan O(km) = {M}. Berdasarkan hasil sebelumnya maka dapat disimpulkan persamaan (4.1) dipenuhi. Jadi Petri net lampu lalulintas dengan waktu tunggu dikatakan pure. Terlihat pada baris 2, 3 dan 4 bahwa Petri net mempunyai 12 arc. Keadaan awal Petri net adalah lampu lalulintas hijau baru menyala. Petri net yang dibangun di Algoritma 4.2 mempunyai 6 place dan 6 transisi yang ditunjukkan pada baris 1. Representasi matriks forward incidence, backward incidence dan combined incidence dari Petri net berukuran 6 × 6. Urutan transisi yang digunakan adalah t1 = mn, t2 = mh, t3 = hn, t4 = hk, t5 = kn dan t6 = km. 84
Pada bagian selanjutnya dikaji representasi matriks dari Petri net lampu lalulintas dengan waktu tunggu. Representasi matriks lebih mudah diimplementasikan ke program dibandingkan dengan menggunakan Definisi 4.1. 4.3.1
Matriks Incidence
Terdapat 6 elemen tidak nol pada matriks forward incidence yang masing-masing menyatakan arc dari transisi km, mn, mh, hn, hk, kn ke place M, BM, H, BH, K, BK. Pada matriks backward incidence juga terdapat 6 elemen tidak nol yang masing-masing menyatakan arc dari place M, BM, H, BH, K, BK ke transisi mn, mh, hn, hk, kn, km. Setiap transisi di Petri net mempunyai place input (output) sebanyak satu karena terdapat satu elemen tidak nol pada setiap kolom matriks backward incidence (forward incidence). Tidak ada transisi yang mempunyai place input (output) sama dengan transisi yang lain karena semua elemen tidak nol berada pada baris yang berbeda di matriks backward incidence (forward incidence). 0 1 0 Af = 0 0 0
0 0 0 0 8 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 1 0
1 0 0 Ab = 0 0 0
0 0 0 0 0 8 0 0 0 0 0 1 0 0 0 0 0 6 0 0 0 0 0 1 0 0 0 0 0 4
(4.4)
Elemen-elemen matriks forward incidence dan backward incidence diperoleh dari bobot arc Petri net. Elemen matriks forward incidence merupakan bobot arc dari transisi ke place output dan elemen matriks backward incidence merupakan bobot arc dari place input ke transisi. Matriks combined incidence diperoleh dari matriks forward incidence dikurangi matriks backward incidence.
−1 0 0 0 0 1 −8 0 0 0 0 6 −1 0 0 A = Af − Ab = 0 0 1 −6 0 0 0 0 4 −1 0
0
0
0
1
8 0 0 0 0 −4
(4.5)
Ketiga matriks pada persamaan (4.4) dan (4.5) merupakan representasi matriks dari Petri net di Gambar 4.4. Terlihat bahwa elemen matriks 85
menyatakan lama masing-masing lampu lalulintas menyala. Dengan mengubah lama masing-masing lampu lalulintas menyala maka bobot beberapa arc akan berubah sehingga mengakibatkan perubahan pada elemen matriks. Selanjutnya disusun bentuk umum matriks forward incidence, backward incidence dan combined incidence dengan lama masing-masing lampu lalulintas menyala dinotasikan dengan tm, th dan tk. Ketiga variabel merupakan bilangan bulat positif. Dalam menyusun ketiga matriks incidence, perhatikan letak elemen matriks pada persamaan (4.4) dan (4.5). Ingat bahwa matriks pada kedua persamaan tersebut menyatakan lampu lalulintas merah, kuning dan hijau masing-masing menyala selama 8, 4 dan 6 satuan waktu. 0 0 0 0 0 tm 1 0 0 0 0 0 0 th 0 0 0 0 Af = 0 0 1 0 0 0 0 0 0 tk 0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 tm 0 0 0 0 0 0 1 0 0 0 Ab = 0 0 0 th 0 0 0 0 0 0 1 0 0 0 0 0 0 tk
(4.6)
Dengan menggunakan matriks forward incidence dan backward incidence pada persamaan (4.6) dapat ditentukan bentuk umum matriks combined incidence. −1 0 0 0 0 tm 1 −tm 0 0 0 0 0 th −1 0 0 0 A = Af − Ab = 0 0 1 −th 0 0 0 0 0 tk −1 0 0 0 0 0 1 −tk
(4.7)
Pada bagian selanjutnya dibahas proses membangun coverability tree dari Petri net lampu lalulintas dengan waktu tunggu. Coverability tree digunakan untuk menganalisis sifat Petri net. 4.3.2
Coverability Tree
Berikutnya dibahas coverability tree dari Petri net di Gambar 4.4. Sifat Petri net ini sama dengan sebelumnya yaitu pada setiap keadaan yang dapat dicapai dari keadaan awal terdapat sebuah transisi yang enabled. Hal ini menyebabkan setiap node di coverability tree mempunyai 1 anak. Langkah per86
tama yang dilakukan saat membangun coverability tree adalah mendefinisikan keadaan awal sebagai node root. Berdasarkan Petri net di Gambar 4.4 maka [0, 0, 3, 3, 0, 0]T merupakan node root pada coverability tree. Pada keadaan ini transisi hn enabled karena terdapat token pada place H. Pemfirean transisi ini menghasilkan keadaan berturut-turut [0, 0, 2, 4, 0, 0]T , [0, 0, 1, 5, 0, 0]T dan [0, 0, 0, 6, 0, 0]T . Keadaan [0, 0, 0, 6, 0, 0]T berubah menjadi [0, 0, 0, 0, 4, 0]T setelah transisi hk difire. Dengan memfire transisi kn keadaan berubah menjadi [0, 0, 0, 0, 3, 1]T , [0, 0, 0, 0, 2, 2]T , [0, 0, 0, 0, 1, 3]T dan [0, 0, 0, 0, 0, 4]T . Pada keadaan ini transisi km enabled sehingga dapat difire. Pemfirean transisi km menyebabkan keadaan Petri net menjadi [8, 0, 0, 0, 0, 0]T . Dengan memfire transisi mn berulang-ulang diperoleh keadaan [7, 1, 0, 0, 0, 0]T , [6, 2, 0, 0, 0, 0]T , [5, 3, 0, 0, 0, 0]T , [4, 4, 0, 0, 0, 0]T , [3, 5, 0, 0, 0, 0]T , [2, 6, 0, 0, 0, 0]T , [1, 7, 0, 0, 0, 0]T dan [0, 8, 0, 0, 0, 0]T . Pemfirean transisi mh mengubah keadaan Petri net menjadi [0, 0, 6, 0, 0, 0]T . Transisi hn enabled pada keadaan ini sehingga dapat difire. Dengan memfire transisi hn maka diperoleh keadaan [0, 0, 5, 1, 0, 0]T , [0, 0, 4, 2, 0, 0]T dan [0, 0, 3, 3, 0, 0]T . Keadaan [0, 0, 3, 3, 0, 0]T merupakan node root sehingga coverability tree telah selesai dibangun. Terdapat 22 node pada coverability tree ini sehingga sulit untuk digambarkan semuanya. Untuk itu pada Gambar 4.5 hanya ditampilkan 6 node.
0 0 3 hn 3 0 0
0 0 2 hn 4 0 0
0 0 1 hn 5 0 0
. . . hn
0 0 5 hn 1 0 0
0 0 4 hn 2 0 0
0 0 3 3 0 0
Gambar 4.5 Coverability Tree untuk Petri net di Gambar 4.4 Himpunan keadaan pada coverability tree di Gambar 4.5 mempunyai pola tertentu. Pertama adalah pada setiap keadaan maksimum place yang mempunyai token berjumlah dua. Dua place ini adalah place ‘lampu’ dan place ‘buffer ’. Pola selanjutnya berkaitan dengan jumlah token pada Petri net. Perhatikan bahwa jumlah token pada Petri net sama dengan lama lampu lalulintas yang sedang menyala. Himpunan keadaan pada coverability tree dibagi menjadi 3 agar pola mudah ditentukan. Pembagian dilakukan berdasarkan lampu lalulintas yang 87
sedang menyala. Dengan menggunakan keterangan yang telah dibahas maka himpunan keadaan pada coverability tree dapat dituliskan sebagai berikut. S = [8 − m, m, 0, 0, 0, 0]T : 0 ≤ m ≤ 8 ∪ [0, 0, 6 − h, h, 0, 0]T : 0 ≤ h ≤ 6 ∪ [0, 0, 0, 0, 4 − k, k]T : 0 ≤ k ≤ 4
(4.8)
Dengan menggunakan pengetahuan yang sudah diperoleh, selanjutnya disusun bentuk umum coverability tree untuk Petri net lampu lalulintas dengan waktu tunggu. Langkah pertama yang harus dilakukan untuk membangun coverability tree adalah menentukan node root. Dari Algoritma 4.2 jelas bahwa keadaan [0, 0, th, 0, 0, 0]T merupakan keadaan awal Petri net sehingga didefinisikan sebagai node root. Pemfirean transisi hn menyebabkan token pada place H berkurang dan token pada place BH bertambah sehingga diperoleh keadaan [0, 0, th − h, h, 0, 0]T dengan 1 ≤ h ≤ th. Transisi hk enabled saat keadaan Petri net [0, 0, 0, th, 0, 0]T . Pemfirean transisi hk menyebabkan keadaan berubah menjadi [0, 0, 0, 0, tk, 0]T . Transisi kn mengambil sebuah token dari place K dan memberikan sebuah token pada place BK sehingga diperoleh keadaan [0, 0, 0, 0, tk − k, k]T dengan 1 ≤ k ≤ tk. Saat keadaan Petri net [0, 0, 0, 0, 0, tk]T transisi km enabled sehingga dapat difire. Setelah transisi km difire keadaan Petri net menjadi [tm, 0, 0, 0, 0, 0]T . Transisi mn mengurangi token pada place M dan menambah token pada place BM sehingga diperoleh keadaan [tm − m, m, 0, 0, 0, 0]T dengan 1 ≤ m ≤ tm. Transisi mh enabled saat keadaan Petri net [0, tm, 0, 0, 0, 0]T . Pemfirean transisi mh menyebabkan keadaan Petri net sama dengan keadaan awal yaitu [0, 0, th, 0, 0, 0]T . Proses membangun coverability tree sudah selesai karena node [0, 0, th, 0, 0, 0]T merupakan node duplicate. Dengan keterangan sebelumnya maka himpunan keadaan coverability tree dapat ditulis sebagai. S = [tm − m, m, 0, 0, 0, 0]T : 0 ≤ m ≤ tm ∪ [0, 0, th − h, h, 0, 0]T : 0 ≤ h ≤ th ∪ [0, 0, 0, 0, tk − k, k]T : 0 ≤ k ≤ tk
(4.9)
Coverability tree yang dibangun juga disebut reachability tree karena tidak terdapat notasi ω sehingga tree memuat semua keadaan yang mungkin dicapai dari keadaan awal. Jelas bahwa Petri net lampu lalulintas dengan waktu tunggu adalah terbatas (bounded ) dengan alasan sama dengan sebe88
lumnya. Batas atas place dari Petri net di Gambar 4.4 adalah [8, 8, 6, 6, 4, 4]T berdasarkan persamaan (4.8). Bentuk umum dari batas atas place dapat ditentukan dengan memperhatikan persamaan (4.9) yaitu [tm, tm, th, th, tk, tk]T . 4.3.3
Konservasi
Selanjutnya dilakukan pengujian sifat konservasi pada Petri net di Gambar 4.4. Dengan menggunakan metode yang telah dibahas pada bab sebelumnya maka diperoleh sistem persaman linier dengan 21 persamaan dan 7 variabel. Bagian pertama terdiri dari 9 persamaan, bagian kedua terdiri dari 7 persamaan dan bagian ketiga terdiri dari 5 persamaan. Jumlah persamaan diperoleh dari (8 + 1) + (6 + 1) + (4 + 1) = 21. Ketujuh variabel yang dimaksud adalah γ1 , . . . , γ6 , C. Solusi sistem persamaan linier (4.10) adalah trivial sehingga Petri net pada Gambar 4.4 tidak mempunyai sifat konservasi. (8 − m)γ1 + m γ2 − C = 0
dengan 0 ≤ m ≤ 8
(6 − h)γ3 + h γ4 − C = 0
dengan 0 ≤ h ≤ 6
(4 − k)γ5 + k γ6 − C = 0
dengan 0 ≤ k ≤ 4
(4.10)
Ingat bahwa 8, 6 dan 4 merupakan lama lampu lalulintas merah, hijau dan kuning menyala yang dinotasikan dengan tm, th dan tk. Dengan menggunakan keterangan sebelumnya maka bentuk umum sistem persamaan linier untuk menguji sifat konservasi Petri net lampu lalulintas dengan waktu tunggu dapat dituliskan sebagai berikut. (tm − m)γ1 + m γ2 − C = 0
dengan 0 ≤ m ≤ tm
(th − h)γ3 + h γ4 − C = 0
dengan 0 ≤ h ≤ th
(tk − k)γ5 + k γ6 − C = 0
dengan 0 ≤ k ≤ tk
(4.11)
dengan tm, th dan tk masing-masing menyatakan lama lampu lalulintas merah, hijau dan kuning menyala. Jumlah persamaan pada (4.11) dinyatakan dengan (tm + 1) + (th + 1) + (tk + 1) = tm + th + tk + 3. Jumlah variabel sama dengan sebelumnya yaitu 7. Sifat konservasi dipenuhi jika jumlah persamaan kurang dari jumlah variabel yaitu tm + th + tk + 3 < 7 yang ekivalen dengan tm+th+tk < 4. Nilai minimum dari tm, th dan tk adalah 1 sehingga Petri net konservatif jika tm = 1, th = 1 dan tk = 1. Jika tidak maka sifat konservasi tidak dipenuhi oleh Petri net seperti pada Gambar 4.4. 89
Jika diperhatikan dengan teliti, terdapat keadaan pada Petri net yang menyatakan tidak ada lampu yang menyala. Hal ini seharusnya dihindari dalam mendesain Petri net lampu lalulintas. Pada bagian berikutnya dibahas Petri net yang mengatasi kekurangan ini.
4.4
Petri net Lampu Lalulintas Tanpa Waktu Idle
Petri net yang telah dibahas pada bagian sebelumnya harus dimodifikasi karena terdapat kelemahan pada Petri net tersebut. Kelemahan ini berupa keadaan di Petri net yang menyatakan tidak ada lampu lalulintas yang menyala. Keadaan ini terjadi pada saat pergantian lampu lalulintas yang menyala seperti terlihat pada Petri net di Gambar 4.6. Keadaan ini merupakan bagian dari proses pergantian lampu lalulintas hijau ke kuning. Lampu lalulintas hijau sudah padam karena tidak ada token pada place H dan lampu lalulintas kuning belum menyala karena tidak ada token pada place K. Waktu saat tidak ada lampu lalulintas yang menyala disebut waktu idle. Pada setiap pergantian lampu lalulintas yang menyala, selalu terdapat waktu idle sehingga terdapat tiga waktu idle untuk setiap periode. Terdapat beberapa cara untuk mengatasi permasalahan ini. Pertama dengan meminimumkan waktu idle pada Petri net sehingga tidak membingungkan pengguna jalan. Cara yang kedua yaitu menghilangkan waktu idle. Waktu idle dapat dihilangkan dengan memodifikasi Petri net. Pada bagian ini dibahas bagaimana memodifikasi Petri net lampu lalulintas sebelumnya agar tidak mempunyai waktu idle. 4 8
km
4 BK
kn
M
mn
hk
K 8
BH
6
6 mh
BM
6
H
hn
Gambar 4.6 Keadaan Petri net yang Menyatakan Semua Lampu Lalulintas Padam Telah dijelaskan pada bagian sebelumnya bahwa waktu idle disebabkan place M, H dan K tidak mempunyai token. Waktu idle pada Petri net dapat dihilangkan dengan membuat keadaan tidak ada lampu lalulintas yang menyala tidak mungkin terjadi. Hal ini dapat dilakukan dengan melakukan pergantian lampu lalulintas yang menyala saat place M, H atau K mempunyai 90
sebuah token. Untuk itu ketiga place tersebut masing-masing dijadikan place input transisi pengubah lampu lalulintas yang menyala yaitu mh, hk dan km. Masing-masing arc mempunyai bobot 1 agar sebuah token diambil dari place tersebut ketika transisi pengubah lampu lalulintas yang menyala difire. Permasalahan yang terjadi pada keadaan ini yaitu transisi tidak enabled karena token yang disimpan di place ‘buffer ’ kurang dari lama lampu lalulintas menyala. Agar transisi ini enabled maka bobot arc yang menghubungkan place ‘buffer ’ ke transisi ini dikurangi satu. Pada keadaan ini ada 2 transisi yang enabled yaitu transisi pengubah lampu lalulintas yang menyala dan transisi ‘nyala’. Jika transisi ‘nyala’ difire maka Petri net mengalami deadlock karena tidak ada token di place M, H dan K. Agar transisi ‘nyala’ tidak enabled ketika terdapat sebuah token pada ketiga place tersebut maka bobot arc dari place ke transisi ‘nyala’ diubah menjadi 2. Dengan melakukan ini maka pemfirean transisi ‘nyala’ mengakibatkan token pada place M, H atau K berkurang 2. Untuk itu dibuat arc dari transisi ‘nyala’ ke ketiga place dengan bobot 1 agar setiap transisi ‘nyala’ difire menyebabkan token pada place berkurang satu. mn
hn BM 2
BH 2
7 6 M
mh
8
3 5
3 H
hk
K
4
km 3
2
BK
kn
Gambar 4.7 Petri net Lampu Lalulintas Tanpa Waktu Idle Petri net yang lengkap dapat dilihat di Gambar 4.7. Perhatikan terdapat beberapa arc tambahan pada Petri net tersebut misalnya dari place M ke transisi mh dan dari transisi mn ke place M. Perubahan lain yang dilakukan adalah mengubah bobot arc misalnya arc dari place M ke transisi mn mempunyai bobot 2 dan arc dari place BM ke transisi mh mempunyai bobot 7 yang diperoleh dari lama lampu lalulintas merah menyala dikurangi satu. 91
Perhatikan bahwa tidak ada perubahan pada place dan transisi sehingga himpunan place P dan himpunan transisi T sama dengan Petri net sebelumnya. Perubahan yang dilakukan berupa menambah arc dan mengubah bobot arc. Terdapat 6 arc yang ditambahkan pada Petri net tersebut yaitu arc dari transisi mn, hn, kn ke place M, H, K dan arc dari place M, H, K ke transisi mh, hk, km. Semua arc yang ditambahkan mempunyai bobot 1. Arc yang diubah bobotnya sebanyak 6 yaitu bobot arc dari place M, H, K ke transisi mn, hn, kn ditambah satu sehingga menjadi 2 dan bobot arc dari place BM, BH, BK ke transisi mh, hk, km dikurangi satu sehingga masing-masing menjadi tm − 1, th − 1, tk − 1. Selanjutnya disusun algoritma membangun Petri net lampu lalulintas tanpa waktu idle. Langkah pertama yang dilakukan dalam menyusun algoritma adalah menentukan input. Input algoritma ini adalah tiga bilangan bulat positif yaitu tm, th, tk. Ketiga bilangan tersebut menyatakan lama masing-masing lampu lalulintas menyala. Output algoritma ini adalah Petri net yang dinyatakan dengan 3-tuple (P, T, Aw). Pernyataan pada baris 1 di algoritma ini sama dengan pernyataan pada baris 1 di Algoritma 4.2 karena himpunan place P dan himpunan transisi T Petri net ini sama dengan sebelumnya. Petri net mempunyai 6 place dan 6 transisi yaitu |P | = 6 = |T |. Pendefinisian arc Petri net dilakukan pada baris 2, 3, 4, 5. Terdapat 18 arc pada Petri net tanpa waktu idle yang dapat dilihat pada Algoritma 4.3. Vektor keadaan pada algoritma ini didefinisikan x = [x(M), x(BM), x(H), x(BH), x(K), x(BK)]T yang sama dengan definisi vektor keadaan pada Algoritma 4.2. Algoritma 4.3 Petri net Lampu Lalulintas Tanpa Waktu Idle Input: tm, th, tk ∈ N /* lama lampu lalulintas menyala */ Output: P, T, Aw, x0 1 P ← {M, BM, H, BH, K, BK}; T ← {mn, mh, hn, hk, kn, km} 2 Aw ← {(M, mn, 2), (mn, M, 1), (M, mh, 1), (mn, BM, 1), (BM, mh, tm − 1)} 3 Aw ← Aw ∪ {(K, kn, 2), (kn, K, 1), (K, km, 1), (kn, BK, 1), (BK, km, tk − 1)} 4 Aw ← Aw ∪ {(H, hn, 2), (hn, H, 1), (H, hk, 1), (hn, BH, 1), (BH, hk, th − 1)} 5 Aw ← Aw ∪ {(mh, H, th), (hk, K, tk), (km, M, tm)} 6 x0 ← [0, 0, th, 0, 0, 0]T Selanjutnya dilakukan pengujian terhadap Petri net tanpa waktu idle. Tujuan pengujian ini untuk mengetahui apakah Petri net tersebut pure. Langkah yang dilakukan dalam pengujian sama dengan sebelumnya yaitu mencari place yang menjadi input sekaligus output dari suatu transisi. Jika ada place yang memenuhi maka Petri net impure dan jika tidak ada place yang meme92
nuhi maka Petri net pure. Terlihat pada Gambar 4.7 bahwa terdapat 3 place yang menjadi input sekaligus output dari suatu transisi. Place yang dimaksud adalah M, H, K yang masing-masing menjadi input dan output dari transisi mn, hn, kn. Jadi Petri net tanpa waktu idle dikatakan impure.
4.4.1
Matriks Incidence Petri net pada Gambar 4.7 dapat direpresentasikan dalam matriks
forward incidence, backward incidence dan combined incidence. Ketiga matriks berukuran 6×6 karena terdapat 6 place dan 6 transisi pada Petri net. Sebelum merepresentasikan dalam matriks, urutan transisi harus didefinisikan terlebih dahulu. Urutan transisi didefinisikan t1 = mn, t2 = mh, t3 = hn t4 = hk, t5 = kn dan t6 = km. Urutan place yang digunakan disini sama dengan urutan place pada vektor keadaan Petri net yang telah didefinisikan sebelumnya.
1 1 0 Af = 0 0 0
0 0 0 0 8 0 0 0 0 0 6 1 0 0 0 0 1 0 0 0 0 0 4 1 0 0 0 0 1 0
2 0 0 Ab = 0 0 0
1 0 0 0 0 7 0 0 0 0 0 2 1 0 0 0 0 5 0 0 0 0 0 2 1 0 0 0 0 3
(4.12)
Terlihat bahwa elemen tidak nol pada matriks forward dan backward incidence berjumlah 18 yang menyatakan jumlah arc pada Petri net.
A = Af − Ab =
−1 −1 1 −7 0 0
6 0
0 0
0 0
0 0
0 0
0 0
8 0 −1 −1 0 0 1 −5 0 0 0 4 −1 −1 0 0 1 −3
(4.13)
Representasi matriks dapat digunakan untuk menentukan Petri net pure atau impure. Petri net dikatakan pure jika tidak terdapat posisi dimana elemen matriks forward incidence dan backward incidence tidak nol. Pada persamaan (4.12) terdapat tiga posisi yang memenuhi yaitu (1, 1), (3, 3) dan (5, 5). Jadi kesimpulan yang diperoleh sama dengan sebelumnya yaitu Petri net lampu lalulintas tanpa waktu idle adalah impure. 93
Selanjutnya disusun bentuk umum matriks forward incidence dan matriks backward incidence. Perhatikan bahwa elemen kedua matriks incidence dapat dikelompokkan menjadi dua bagian. Bagian pertama adalah elemen yang konstan yaitu tidak dipengaruhi lama lampu lalulintas menyala. Bagian kedua adalah elemen yang tergantung dari lama masing-masing lampu lalulintas menyala. Ini berarti jika terjadi perubahan pada lama masing-masing lampu lalulintas menyala maka elemen yang termasuk bagian kedua di matriks incidence juga mengalami perubahan. Jelas bahwa perubahan ini hanya mempengaruhi nilai elemen tetapi tidak mengubah letak elemen pada matriks incidence. Dengan menggunakan keterangan sebelumnya maka bentuk umum matriks forward incidence dan backward incidence dapat dirumuskan. Perumusan ini disusun berdasarkan Algoritma 4.3, urutan place dan urutan transisi yang telah didefinisikan pada saat menyusun matriks incidence. 1 0 0 0 0 tm 1 0 0 0 0 0 0 th 1 0 0 0 Af = 0 0 1 0 0 0 0 0 0 tk 1 0 0 0 0 0 1 0
2
1
0 tm − 1 0 0 Ab = 0 0 0 0 0 0
0
0
0
0 0 0 2 1 0 0 th − 1 0
0 0 0
0 0
0
0 0
2 1 0 tk − 1
(4.14)
Representasi matriks forward incidence dan backward incidence dari Petri net lampu lalulintas tanpa waktu idle selalu berukuran 6 × 6 berapapun input yang diberikan. Kesimpulan ini dapat diambil berdasarkan pernyataan pada baris 1 di Algoritma 4.3 atau dengan memperhatikan bahwa Petri net mempunyai 6 place dan 6 transisi. Pendefinisian arc mengacu pada baris 2, 3, 4 dan 5 di Algoritma 4.3. Jika arc menghubungkan transisi ke place maka bobot arc diletakkan di matriks forward incidence dan jika arc menghubungkan place ke transisi maka bobot arc diletakkan di matriks backward incidence. Posisi bobot arc pada masing-masing matriks incidence tergantung dari indeks place dan indeks transisi yang dihubungkan oleh arc tersebut. Bentuk umum matriks forward incidence dan backward incidence dapat dilihat pada persamaan (4.14). Selanjutnya ditentukan bentuk umum matriks combined incidence. Matriks combined incidence berukuran 6 × 6. Bentuk umum matriks combined incidence dapat diperoleh dengan mudah 94
yaitu mencari selisih matriks forward incidence dan backward incidence pada persamaan (4.14). −1 −1 0 0 0 tm 1 −tm + 1 0 0 0 0 0 th −1 −1 0 0 A = Af − Ab = 0 0 1 −th + 1 0 0 0 0 0 tk −1 −1 0 0 0 0 1 −tk + 1
(4.15)
Setelah menentukan bentuk umum matriks combined incidence yang dilakukan pada persamaan (4.15), langkah berikutnya adalah menganalisis Petri net. Metode untuk analisis Petri net menggunakan coverability tree. Pada bagian selanjutnya dibahas proses membangun coverability tree dari Petri net di Gambar 4.7. 4.4.2
Coverability Tree
Tahap pertama yang dilakukan dalam membangun coverability tree adalah menentukan node root. Node root menyatakan keadaan awal Petri net yaitu [0, 0, 3, 3, 0, 0]T . Pada keadaan ini transisi hn enabled. Dengan memfire transisi ini keadaan Petri net menjadi [0, 0, 2, 4, 0, 0]T , [0, 0, 1, 5, 0, 0]T . Transisi yang enabled pada keadaan [0, 0, 1, 5, 0, 0]T adalah hk. Keadaan Petri net menjadi [0, 0, 0, 0, 4, 0]T setelah transisi hk difire. Satu-satunya transisi yang enabled pada keadaan [0, 0, 0, 0, 4, 0]T adalah kn. Pemfirean transisi ini menyebabkan keadaan Petri net menjadi [0, 0, 0, 0, 3, 1]T , [0, 0, 0, 0, 2, 2]T , [0, 0, 0, 0, 1, 3]T . Pada keadaan ini transisi kn menjadi tidak enabled dan transisi km menjadi enabled. Keadaan Petri net berubah menjadi [8, 0, 0, 0, 0, 0]T setelah transisi km difire. Dengan memfire transisi mn maka keadaan menjadi [7, 1, 0, 0, 0, 0]T , [6, 2, 0, 0, 0, 0]T , . . . , [1, 7, 0, 0, 0, 0]T . Transisi mh berubah menjadi enabled pada saat keadaan Petri net [1, 7, 0, 0, 0, 0]T . Keadaan Petri net menjadi [0, 0, 6, 0, 0, 0]T setelah mh difire. Pemfirean transisi hn menyebabkan keadaan Petri net menjadi [0, 0, 5, 1, 0, 0]T , [0, 0, 4, 2, 0, 0]T , [0, 0, 3, 3, 0, 0]T sehingga diperoleh keadaan yang sama dengan keadaan awal Petri net. Jadi coverability tree sudah selesai dibangun. Pada coverability tree ini terdapat 19 node sehingga jumlah node di coverability tree ini 3 lebih sedikit dibandingkan sebelumnya. Perhatikan ketiga keadaan yang tidak terdapat di coverability tree ini adalah keadaan yang me95
nyebabkan terjadinya waktu idle. Coverability tree sulit digambarkan secara keseluruhan karena jumlah node yang terlalu banyak. Pada Gambar 4.8 hanya digambarkan sebagian node coverability tree.
0 0 3 hn 3 0 0
0 0 2 hn 4 0 0
0 0 1 hk 5 0 0
. . . hn
0 0 5 hn 1 0 0
0 0 4 hn 2 0 0
0 0 3 3 0 0
Gambar 4.8 Coverability Tree untuk Petri net di Gambar 4.7 Jika diperhatikan dengan seksama maka keadaan pada coverability tree di Gambar 4.8 mempunyai pola tertentu. Jumlah token pada place ‘lampu’ yang menyala dan ‘buffer ’nya sama dengan lama lampu lalulintas menyala. Tidak ada token yang disimpan pada place yang lain. Dengan menggunakan pola ini, himpunan keadaan S pada coverability tree dapat dituliskan sebagai berikut. S = [8 − m, m, 0, 0, 0, 0]T : 0 ≤ m ≤ 7 ∪ [0, 0, 6 − h, h, 0, 0]T : 0 ≤ h ≤ 5 ∪ [0, 0, 0, 0, 4 − k, k]T : 0 ≤ k ≤ 3
(4.16)
Berikutnya disusun bentuk umum coverability tree untuk Petri net tanpa waktu idle. Keadaan awal Petri net berdasarkan Algoritma 4.3 yaitu [0, 0, th, 0, 0, 0]T . Langkah pertama yang dilakukan dalam membangun coverability tree adalah menentukan node root. Jelas bahwa keadaan awal didefinisikan sebagai node root. Pada keadaan ini transisi hn enabled sehingga dapat difire. Dengan memfire transisi ini diperoleh keadaan [0, 0, th − h, h, 0, 0]T dengan 1 ≤ h ≤ th − 1. Transisi hk enabled pada keadaan [0, 0, 1, th − 1, 0, 0]T . Keadaan Petri net menjadi [0, 0, 0, 0, tk, 0]T setelah transisi tersebut difire. Satu-satunya transisi yang enabled pada keadaan ini adalah kn. Pemfirean transisi ini menyebabkan keadaan Petri net menjadi [0, 0, 0, 0, tk − k, k]T dengan 1 ≤ k ≤ tk−1. Transisi kn menjadi tidak enabled dan km menjadi enabled pada keadaan [0, 0, 0, 0, 1, tk−1]T . Dengan memfire transisi km maka diperoleh keadaan [tm, 0, 0, 0, 0, 0]T yang menyebabkan transisi mn enabled. Jika transisi mn difire maka keadaan Petri net menjadi [tm − m, m, 0, 0, 0, 0]T dengan 96
1 ≤ m ≤ tm − 1. Pada keadaan [1, tm − 1, 0, 0, 0, 0]T satu-satunya transisi yang enabled adalah mh. Pemfirean transisi ini menyebabkan keadaan Petri net berubah menjadi [0, 0, th, 0, 0, 0]T yang sama dengan keadaan awal Petri net. Dengan ditemukan node duplicate maka proses membangun coverability tree telah selesai. Keadaan Petri net yang terdapat pada coverability tree mempunyai pola tertentu. Pola ini merupakan perumuman dari contoh sebelumnya dengan menggunakan tm, th dan tk sebagai variabel. Ketiga variabel tersebut masingmasing menyatakan lama lampu lalulintas merah, hijau dan kuning menyala. S = [tm − m, m, 0, 0, 0, 0]T : 0 ≤ m ≤ tm − 1 ∪ [0, 0, th − h, h, 0, 0]T : 0 ≤ h ≤ th − 1 ∪ [0, 0, 0, 0, tk − k, k]T : 0 ≤ k ≤ tk − 1
(4.17)
Coverability tree yang dibangun pada bagian ini juga disebut reachability tree karena tidak ada node yang memuat notasi ω. Reachability tree ini memuat semua keadaan yang mungkin dicapai dari keadaan awal. Jelas bahwa Petri net tanpa waktu idle terbatas (bounded ) dengan alasan yang sama dengan sebelumnya. Batas atas Petri net pada Gambar 4.7 adalah [8, 7, 6, 5, 4, 3]T dengan melihat persamaan (4.16). Dengan menggunakan persamaan (4.17), bentuk umum dari batas atas Petri net dapat ditulis sebagai keadaan [tm, tm − 1, th, th − 1, tk, tk − 1]T . 4.4.3
Konservasi
Selanjutnya dilakukan pengujian sifat konservasi pada Petri net di Gambar 4.7. Sistem persamaan linier yang terbentuk mempunyai 18 persamaan dengan 7 variabel. (8 − m)γ1 + m γ2 − C = 0
dengan 0 ≤ m ≤ 7
(6 − h)γ3 + h γ4 − C = 0
dengan 0 ≤ h ≤ 5
(4 − k)γ5 + k γ6 − C = 0
dengan 0 ≤ k ≤ 3
(4.18)
Variabel pada sistem persamaan linier (4.18) adalah γ1 , γ2 , . . . , γ6 dan C. Sistem persamaan linier tersebut mempunyai penyelesaian trivial sehingga Petri net pada Gambar 4.7 tidak konservatif. Ingat angka 7, 5, 3 pada persamaan (4.18) diperoleh dari 8 − 1, 6 − 1, 4 − 1 yang merupakan lama masingmasing lampu lalulintas menyala dikurangi satu. 97
Bentuk umum sistem persamaan linier yang terbentuk dari Petri net lampu lalulintas tanpa waktu idle serupa dengan bentuk umum sistem persamaan linier yang terbentuk dari Petri net lampu lalulintas dengan waktu tunggu. Perbedaan keduanya terletak pada batas atas variabel m, h dan k. Selain menggunakan pendekatan tersebut, persamaan berikut juga dapat disusun dengan memperhatikan persamaan (4.17). (tm − m)γ1 + m γ2 − C = 0
dengan 0 ≤ m ≤ tm − 1
(th − h)γ3 + h γ4 − C = 0
dengan 0 ≤ h ≤ th − 1
(tk − k)γ5 + k γ6 − C = 0
dengan 0 ≤ k ≤ tk − 1
(4.19)
dengan tm, th dan tk masing-masing menyatakan lama lampu lalulintas merah, hijau dan kuning menyala. Jumlah persamaan pada (4.19) adalah tm + th + tk dan variabel berjumlah 7 yang sama dengan persamaan (4.18). Sistem persamaan linier pada (4.19) mempunyai penyelesaian tidak trivial jika jumlah persamaan kurang dari jumlah variabel. Jadi sifat konservasi dipenuhi jika tm + th + tk < 7 dengan tm, th, tk > 0. Petri net yang telah dibahas sampai saat ini menyatakan sebuah lampu lalulintas. Pada bagian berikutnya dibahas Petri net lampu lalulintas di persimpangan.
4.5
Petri net Lampu Lalulintas di Persimpangan Persimpangan merupakan perpotongan beberapa jalur kendaraan. Di-
sini terjadi persaingan pada kendaraan di setiap jalur untuk melewati persimpangan. Lampu lalulintas digunakan untuk mengatur kendaraan pada jalur mana yang diperbolehkan melewati persimpangan. Jelas bahwa pada setiap jalur terdapat lampu lalulintas sehingga jumlah lampu lalulintas di persimpangan secara umum lebih dari atau sama dengan jumlah jalur. Pada bagian ini dibahas Petri net lampu lalulintas di persimpangan. Batasan yang digunakan pada pembahasan ini adalah pada setiap waktu terdapat satu jalur yang berhak melewati persimpangan. Perhatikan model persimpangan sederhana pada Gambar 4.9. Garis putus-putus digunakan untuk membedakan jalan satu arah dan jalan dua arah. Pada sebelah kiri dan atas terdapat jalan dua arah yang dinyatakan dengan garis putus-putus. Diasumsikan kendaraan menggunakan lajur kiri. 98
Pada sebelah kanan dan bawah tidak terdapat garis putus-putus yang menyatakan jalan tersebut satu arah. Kendaraan yang belok ke kiri dapat melewati persimpangan pada setiap saat tanpa memperhatikan warna lampu lalulintas yang menyala. Terjadi persaingan antara kendaraan pada jalur 1 dengan kendaraan pada jalur 2 untuk melewati persimpangan jika belok ke kanan atau lurus seperti terlihat pada Gambar 4.9. Jadi dibutuhkan dua lampu lalulintas untuk mengatur arus kendaraan pada persimpangan tersebut.
2 1
Gambar 4.9 Model Persimpangan Sederhana Petri net yang dibahas pada bagian ini berbeda dengan Petri net yang dibahas sebelumnya. Pada Petri net sebelumnya jumlah place dan transisi selalu tetap sedangkan jumlah place dan transisi Petri net yang dibahas disini dapat berubah-ubah. Jumlah place dan transisi pada Petri net tergantung jumlah jalur pada persimpangan. Jumlah jalur yang semakin banyak menyebabkan jumlah place dan transisi semakin besar. Jumlah place dan transisi yang semakin besar mengakibatkan grafik Petri net semakin rumit sehingga sulit dipelajari. Untuk itu, model persimpangan sederhana dengan dua jalur seperti terlihat pada Gambar 4.9 digunakan sebagai contoh. Diharapkan dengan menggunakan contoh yang sederhana, proses yang dilakukan tidak rumit sehingga penjelasan lebih mudah dipahami. Dengan memodifikasi Petri net yang telah dibahas pada bagian sebelumnya maka Petri net tersebut dapat digunakan untuk membangun Petri net lampu lalulintas di persimpangan. Modifikasi ini dilakukan karena terdapat perbedaan konsep yang mendasar pada kedua Petri net tersebut. Pada Petri net sebelumnya, lama lampu lalulintas merah menyala ditetapkan sedangkan pada Petri net di persimpangan, lama lampu lalulintas merah menyala tergan99
tung lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Jadi modifikasi dilakukan terhadap place dan transisi di Petri net yang berhubungan dengan lampu lalulintas merah.
K1
km1 3
hk1 5
2 BK1
H1
4 M1
kn1
2 BH1
hn1
Gambar 4.10 Modifikasi Model Petri net Sebelumnya Langkah pertama yang dilakukan adalah menghapus place BM dan transisi mn. Hal ini disebabkan kedua transisi tersebut digunakan untuk mengatur lama lampu lalulintas merah menyala. Selanjutnya dilakukan modifikasi pada perubahan lampu lalulintas yang menyala. Perubahan lampu lalulintas yang menyala dari merah ke hijau dilakukan jika pada jalur sebelumnya lampu lalulintas yang menyala berubah dari kuning ke merah. Jadi transisi yang menyatakan perubahan ini juga tidak diperlukan sehingga transisi mh dihapus. Selain itu, arc yang berhubungan dengan place BM, transisi mn dan mh juga dihapus. Model Petri net setelah dimodifikasi dapat dilihat pada Gambar 4.10. Model Petri net pada Gambar 4.10 menyatakan sebuah lampu lalulintas. Jumlah jalur pada model persimpangan sederhana di Gambar 4.9 sebanyak dua sehingga dibutuhkan dua Petri net yang serupa dengan Gambar 4.10. Selanjutnya dibahas bagaimana menentukan arc yang menghubungkan kedua Petri net tersebut. Perhatikan bahwa lama lampu lalulintas merah menyala pada jalur 1 diperoleh dari jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur 2. Lampu lalulintas merah menyala pada jalur 1 selama lampu lalulintas hijau atau kuning menyala pada jalur 2. Diharapkan token pada place M1 habis ketika terjadi perubahan lampu lalulintas yang menyala dari kuning ke merah pada jalur 2. Untuk itu, token pada place M1 harus berkurang ketika token pada place K2 atau H2 berkurang. Hal ini dapat dilakukan dengan menghubungkan arc dari place M1 ke transisi yang mengambil token dari place K2 atau H2 . Transisi yang mengambil token dari place H2 adalah hn2 dan hk2 . Transisi yang mengambil token dari place K2 adalah kn2 dan km2 . Jadi dibuat arc dari place M1 ke empat transisi tersebut dengan bobot 1 seperti terlihat pada Gambar 4.11. Proses yang serupa juga dilakukan untuk place M2 . Proses ini adalah mendefinisikan arc yang menghubungkan 100
place M2 ke transisi hn1 , hk1 , kn1 dan km1 dengan bobot untuk masing-masing arc adalah 1. hk2
kn2
hn2
km2
M1
Gambar 4.11 Hubungan Place Merah dengan Transisi pada Jalur yang Lain Hal yang harus diperhatikan adalah ketika lampu lalulintas yang menyala berubah dari kuning ke merah pada jalur 1. Pada saat yang bersamaan pada jalur 2 lampu lalulintas yang menyala berubah dari merah ke hijau. Ingat bahwa transisi mh2 sudah dihapus sehingga transisi km1 juga mengubah lampu lalulintas yang menyala dari merah ke hijau pada jalur 2. Pada pembahasan sebelumnya telah dibuat arc dari place M2 ke transisi km1 sehingga transisi ini sudah memadamkan lampu lalulintas merah pada jalur 2. Sebuah arc dibuat dari transisi km1 ke place H2 dengan tujuan lampu lalulintas hijau menyala pada jalur 2. Bobot arc ini adalah lama lampu lalulintas hijau menyala pada jalur 2 yang diilustrasikan pada Gambar 4.12. Proses yang sama juga dilakukan pada transisi km2 yaitu membuat arc yang menghubungkan transisi km2 ke place H1 . Tujuan arc ini adalah menjadikan lampu lalulintas hijau menyala pada jalur 1 saat lampu lalulintas yang menyala pada jalur 2 berubah dari kuning ke merah. Lampu lalulintas hijau pada jalur 2 menyala selama 6 satuan waktu sehingga bobot arc dari transisi km1 ke place H2 adalah 6. Lampu lalulintas merah pada jalur 1 menyala selama 10 satuan waktu sehingga bobot arc dari transisi km1 ke place M1 adalah 10. Perubahan ini diilustrasikan pada Petri net di Gambar 4.12. 10
6 H2
km1
M1
Gambar 4.12 Modifikasi Petri net untuk Menyatakan Perubahan Jalur Petri net yang lengkap dapat dilihat di Gambar 4.13. Terlihat dari gambar tersebut bahwa Petri net dibangun dari dua Petri net yang dihubungkan. Masing-masing Petri net menyatakan sebuah lampu lalulintas. Indeks pada setiap nama place dan transisi menyatakan jalur. Lama lampu lalulintas hijau dan kuning menyala masing-masing adalah 6 dan 4 satuan waktu pada 101
setiap jalur. Lama lampu lalulintas merah menyala di jalur 1 diperoleh dari jumlahan lama lampu lalulintas hijau dan kuning menyala di jalur 2. Cara yang sama digunakan untuk menentukan lama lampu lalulintas merah menyala pada jalur 2. Jadi lama lampu lalulintas merah menyala pada jalur 1 sama dengan lama lampu lalulintas merah menyala pada jalur 2 yaitu selama 6 + 4 = 10 satuan waktu. Keadaan yang ditunjukkan oleh Petri net pada Gambar 4.13 adalah lampu lalulintas hijau pada jalur 1 baru saja menyala. Hal ini ditunjukkan dengan token pada place H1 yang berjumlah 6 yaitu lama lampu lalulintas hijau menyala pada jalur 1. Lampu lalulintas merah pada jalur 2 menyala selama 10 satuan waktu karena place M2 mempunyai 10 token. Pada keadaan ini satu-satunya transisi yang enabled adalah hn1 . Terdapat 10 place pada Petri net di Gambar 4.13 sehingga himpunan place P mempunyai 10 anggota. Anggota himpunan place P adalah p1 = M1 , p2 = M2 , p3 = H1 , p4 = BH1 , p5 = K1 , p6 = BK1 , p7 = H2 , p8 = BH2 , p9 = K2 , p10 = BK2 . Jumlah transisi pada Petri net sebanyak 8 sehingga himpunan transisi T mempunyai 8 anggota. Anggota himpunan transisi T adalah t1 = hn1 , t2 = hk1 , t3 = kn1 , t4 = km1 , t5 = hn2 , t6 = hk2 , t7 = kn2 , t8 = km2 . 3
BK2
6
kn2
M2 2
5
hn2
K2 4
BH2
H1
10
km2
hk1
2
BH1
4 M1
K1
hn1
5
10
kn1 2
hk2 10
H2 2
6
6
km1
BK1
3
Gambar 4.13 Petri net untuk Dua Lampu Lalulintas Petri net lampu lalulintas di persimpangan pada Gambar 4.13 adalah impure karena terdapat place yang menjadi input sekaligus output dari suatu transisi. Place yang dimaksud adalah place H1 , K1 , H2 dan K2 . Place H1 dan K1 masing-masing menjadi input dan output dari transisi hn1 dan kn1 . Selain 102
itu place H2 dan K2 masing-masing menjadi input dan output dari transisi hn2 dan kn2 . Hal ini dapat ditulis place Hr dan Kr masing-masing menjadi input dan output dari transisi hnr dan knr dengan r = 1, 2. Selanjutnya disusun bentuk umum Petri net lampu lalulintas persimpangan yang dituliskan dalam algoritma. Input algoritma ini adalah jumlah jalur yang dinotasikan ℓ dan lama lampu lalulintas hijau dan kuning menyala pada masing-masing jalur yang dinotasikan th dan tk. Variabel th dan tk merupakan vektor yang mempunyai ℓ elemen. Elemen dari vektor th dan tk merupakan bilangan bulat taknegatif. Algoritma menghasilkan Petri net yang dinyatakan dengan 3-tuple (P, T, Aw) seperti yang telah didefinisikan pada bagian sebelumnya dan keadaan awal x0 . Langkah pertama yang dilakukan pada saat menyusun bentuk umum Petri net lampu lalulintas persimpangan adalah membangun Petri net untuk masing-masing jalur seperti terlihat pada Gambar 4.10. Petri net untuk setiap jalur mempunyai 5 place yaitu M, H, K, BH, BK dan 4 transisi yaitu hn, hk, kn, km. Indeks digunakan untuk menunjukkan nama place dan transisi pada setiap jalur. Pada setiap jalur dibutuhkan 11 arc seperti yang terlihat pada Gambar 4.10. Berdasarkan keterangan sebelumnya, dapat disimpulkan bahwa Petri net lampu lalulintas persimpangan mempunyai 5ℓ place, 4ℓ transisi dan 11ℓ arc dengan ℓ menyatakan jumlah jalur pada persimpangan. Hal yang harus dilakukan untuk menggabungkan Petri net adalah membuat arc pada place M dan transisi km yang telah dibahas pada bagian sebelumnya. Semua arc dari place M mempunyai bobot 1. Arc dihubungkan ke transisi hn, hk, kn, km pada semua jalur yang berbeda. Jumlah arc yang dibuat pada tahap ini sebanyak 4ℓ(ℓ − 1) = 4ℓ2 − 4ℓ. Selanjutnya dibuat arc dari transisi km ke place H pada jalur berikutnya. Bobot arc ini adalah lama lampu lalulintas hijau menyala pada jalur berikutnya. Misalnya arc dari km1 ke H2 mempunyai bobot th2 , arc dari kmℓ ke H1 mempunyai bobot th1 dengan ℓ menyatakan jumlah jalur pada persimpangan. Jumlah arc yang dibuat pada tahap ini sebanyak ℓ. Terlihat pada Gambar 4.12 bahwa terdapat dua arc yang dibuat. Arc yang pertama telah dibahas sebelumnya. Arc yang kedua menghubungkan transisi km ke place M pada jalur yang sama. Bobot arc ini adalah jumlahan lama lampu lalulintas menyala hijau dan kuning pada jalur lain seperti tertulis pada baris 12. Arc yang dibuat pada tahap ini sebanyak jumlah jalur yang dinotasikan dengan ℓ. Arc pada Petri net sebanyak 11ℓ + (4ℓ2 − 4ℓ) + ℓ + ℓ yang dapat disederhanakan menjadi 4ℓ2 + 9ℓ. 103
Algoritma 4.4 Petri net Lampu Lalulintas di Persimpangan Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: P, T, Aw, x0 1 P ← ∅; T ← ∅; Aw ← ∅; x0 ← zeros(5ℓ, 1) /* inisialisasi */ 2 for i = 1 to ℓ do 3 P ← P ∪ {Mi , Ki , Hi , BKi , BHi }; T ← T ∪ {hni , hki , kni , kmi } 4 Aw ← Aw ∪ {(Hi , hni , 2), (hni , Hi , 1), (hni , BHi , 1), (Hi , hki , 1)} 5 Aw ← Aw ∪ {(Ki , kni , 2), (kni , Ki , 1), (kni , BKi , 1), (Ki, kmi , 1)} 6 Aw ← Aw ∪ {(BHi , hki , thi − 1), (hki , Ki , tki ), (BKi , kmi , tki − 1)} 7 end for 8 for i = 1 to ℓ do 9 for j = 1 to ℓ and j 6= i do 10 Aw ← Aw ∪ {(Mi, hnj , 1), (Mi, hkj , 1), (Mi, knj , 1), (Mi, kmj , 1)} 11 end for P 12 Aw ← Aw ∪ {(kmi , Hi+1 , thi+1 ), (kmi , Mi, j6=i (thj + tkj ))} P 13 x0 (i) ← i−1 j=1 (thj + tkj ) /* place Mi */ 14 end for 15 x0 (ℓ + 1) ← th1 /* place H1 */ Berikutnya dibahas proses yang dilakukan oleh Algoritma 4.4. Inisialisasi variabel P , T , Aw dan x0 dilakukan pada baris 1. Perulangan for pada baris 2 bertujuan membangun Petri net untuk masing-masing jalur. Pendefinisian place dan transisi dilakukan pada baris 3 dan pendefinisian arc dilakukan pada baris 4, 5 dan 6. Arc yang menghubungkan place M ke transisi pada jalur lain terlihat pada baris 10. Perhatikan pada baris 12 bahwa place Hℓ+1 def didefinisikan sama dengan place H1 yang ditulis Hℓ+1 = H1 . Dengan cara yang def
sama dengan sebelumnya maka thℓ+1 = th1 menyatakan lama lampu lalulintas hijau menyala pada jalur ℓ + 1 sama dengan lama lampu lalulintas hijau menyala pada jalur 1. Pendefinisian keadaan awal Petri net dilakukan pada baris 13 dan 15. Keadaan awal yang didefinisikan pada kedua baris tersebut menyatakan lampu lalulintas hijau pada jalur 1 baru menyala. Berikutnya dibahas representasi Petri net dalam matriks incidence. 4.5.1
Matriks Incidence
Dalam menyusun matriks forward incidence, urutan place dan transisi pada Petri net harus ditentukan terlebih dahulu. Urutan place yang digunakan adalah p1 = M1 , p2 = M2 , p3 = H1 , p4 = BH1 , p5 = K1 , p6 = BK1 , p7 = H2 , p8 = BH2 , p9 = K2 , p10 = BK2 dan urutan transisi yang digunakan adalah t1 = hn1 , t2 = hk1 , t3 = kn1 , t4 = km1 , t5 = hn2 , t6 = hk2 , t7 = kn2 , t8 = km2 . 104
Elemen matriks forward incidence merupakan bobot arc yang menghubungkan transisi ke place. Jika tidak ada arc yang menghubungkan transisi ke place tertentu maka diberikan nilai nol. Posisi elemen ditentukan oleh indeks transisi asal dan indeks place tujuan. Indeks transisi asal menyatakan kolom dan indeks place tujuan menyatakan baris. Matriks forward incidence untuk Petri net pada Gambar 4.13 dapat dilihat di persamaan (4.20). 0 0 1 1 0 Af = 0 0 0 0 0
0 0 10 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 6 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 1 0
(4.20)
Selanjutnya disusun bentuk umum matriks forward incidence untuk Petri net lampu lalulintas di persimpangan. Sebelum melakukan hal tersebut urutan place dan transisi secara umum pada Petri net harus ditentukan terlebih dahulu. Urutan place yang digunakan sama dengan urutan pada vektor keadaan Petri net yaitu p1 = M1 , p2 = M2 , . . . , pℓ = Mℓ , pℓ+1 = H1 , pℓ+2 = BH1 , pℓ+3 = K1 , pℓ+4 = BK1 , . . . , p5ℓ−3 = Hℓ , p5ℓ−2 = BHℓ , p5ℓ−1 = Kℓ , p5ℓ = BKℓ . Urutan transisi yang digunakan adalah t1 = hn1 , t2 = hk1 , t3 = kn1 , t4 = km1 , . . . , t4ℓ−3 = hnℓ , t4ℓ−2 = hkℓ , t4ℓ−1 = knℓ , t4ℓ = kmℓ . Perhatikan bahwa ukuran matriks forward incidence tergantung jumlah jalur sehingga ukuran matriks tidak selalu sama. Untuk itu, bentuk umum matriks forward incidence dinyatakan dalam bentuk algoritma. Langkah pertama yang dilakukan dalam membangun algoritma adalah menentukan input dan output. Input algoritma ini adalah lama lampu lalulintas hijau dan kuning menyala pada masing-masing jalur yang dinotasikan dengan th dan tk. Elemen kedua vektor merupakan bilangan bulat taknegatif. Input yang lain adalah jumlah jalur di persimpangan yang dinotasikan ℓ. Output algoritma ini adalah matriks forward incidence yang dinotasikan Af . Matriks forward incidence berukuran 5ℓ × 4ℓ yang masing-masing menyatakan jumlah place dan transisi Petri net. Elemen matriks forward incidence meru105
pakan bilangan bulat taknegatif yang menyatakan bobot arc dari transisi ke place. Algoritma 4.5
Forward Incidence Petri net Lampu Lalulintas di Persimpangan
Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: Af ∈ (N ∪ {0})5ℓ×4ℓ /* matriks forward incidence */ Pℓ−1 1 Af ← zeros(5ℓ, 4ℓ); Af (ℓ + 1, 4ℓ) ← th1 ; Af (ℓ, 4ℓ) ← j=1 (thj + tkj ) 2 for i = 1 to ℓ − 1 do P 3 Af (ℓ + 4i + 1, 4i) ← thi+1 ; Af (i, 4i) ← j6=i (thj + tkj ) 4 end for 5 for i = 1 to ℓ do 6 Af (ℓ+4i−3, 4i−3) ← 1; Af (ℓ+4i−2, 4i−3) ← 1; Af (ℓ+4i−1, 4i−1) ← 1 7 Af (ℓ + 4i, 4i − 1) ← 1; Af (ℓ + 4i − 1, 4i − 2) ← tki 8 end for Dalam membahas proses yang dilakukan oleh Algoritma 4.5 akan ditentukan proses yang ekivalen di Algoritma 4.4. Hal ini dilakukan untuk mengetahui apakah pernyataan pada Algoritma 4.5 mendefinisikan semua arc yang menghubungkan transisi ke place pada Petri net lampu lalulintas di persimpangan. Jika ya maka Algoritma 4.5 membangun matriks forward incidence dan jika tidak maka algoritma tersebut tidak membangun matriks forward incidence. Matriks forward incidence diinisialisasi dengan matriks nol berukuran 5ℓ × 4ℓ. Pernyataan berikutnya masing-masing menyatakan arc dari transisi kmℓ ke place H1 dan place Mℓ . Kedua pernyataan ini ekivalen dengan pernyataan baris 12 di Algoritma 4.4 pada saat i = ℓ. Ingat bahwa baris pada matriks forward incidence menyatakan place dan kolom menyatakan transisi. Perhatikan bahwa Af (ℓ+4i+1, 4i) menyatakan arc dari transisi kmi ke place Hi+1 dan Af (i, 4i) menyatakan arc dari transisi kmi ke place Mi untuk i = 1, 2, . . . , ℓ − 1. Jelas bahwa pernyataan ini bermakna sama dengan pernyataan pada baris 12 di Algoritma 4.4 untuk i = 1, 2, . . . , ℓ − 1. Pada baris 4 di Algoritma 4.4 terdapat 2 arc yang termasuk forward incidence yaitu (hni , Hi , 1) dan (hni , BHi , 1). Kedua arc masing-masing ekivalen dengan pernyataan Af (ℓ+4i−3, 4i−3) ← 1 dan Af (ℓ+4i−2, 4i−3) ← 1. Dengan cara yang sama diperoleh pernyataan Af (ℓ + 4i − 1, 4i − 1) ← 1 dan Af (ℓ + 4i, 4i − 1) ← 1 ekivalen dengan arc (kni , Ki , 1) dan (kni , BKi , 1) yang didefinisikan pada baris 5. Jelas bahwa arc (hki , Ki , tki) ekivalen dengan pernyataan Af (ℓ + 4i − 1, 4i − 2) ← tki . Dengan memperhatikan penjelasan 106
sebelumnya maka diperoleh kesimpulan Algoritma 4.5 membangun matriks forward incidence Petri net lampu lalulintas di persimpangan. Urutan place dan transisi yang digunakan untuk menyusun matriks backward incidence sama dengan urutan place dan transisi yang digunakan untuk matriks forward incidence. Elemen matriks backward incidence menyatakan bobot arc dari place ke transisi. Jika tidak ada arc dari place ke transisi tertentu maka diberikan bobot nol. Penyusunan matriks backward incidence tidak dibahas secara terperinci pada bagian ini karena proses ini telah dijelaskan pada bagian sebelumnya. Persamaan (4.21) merupakan matriks backward incidence untuk Petri net lampu lalulintas persimpangan di Gambar 4.13. 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 2 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 1 0 0 0 0 Ab = (4.21) 0 0 0 3 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 3 Ukuran matriks backward incidence dipengaruhi jumlah jalur di persimpangan. Matriks backward incidence berukuran sama dengan matriks forward incidence yaitu 5ℓ × 4ℓ dengan ℓ menyatakan jumlah jalur di persim-
pangan. Dengan memperhatikan keterangan sebelumnya maka bentuk umum matriks backward incidence dituliskan dalam bentuk algoritma. Langkah pertama yang dilakukan dalam membangun algoritma adalah menentukan input dan output. Input algoritma ini sama dengan input algoritma membangun matriks forward incidence yaitu lama lampu lalulintas hijau dan kuning menyala pada masing-masing jalur dan jumlah jalur di persimpangan. Output algoritma ini adalah matriks backward incidence yang dinotasikan Ab . Pada tahap inisialisasi, elemen matriks backward incidence pada baris 1 hingga ℓ bernilai 1 dan elemen pada baris ℓ + 1 hingga 5ℓ bernilai 0 seperti terlihat pada baris 1. Selanjutnya ditunjukkan bahwa pernyataan pada algoritma ini ekivalen dengan arc yang didefinisikan dari place ke transisi pada Algoritma 4.4. Elemen matriks backward incidence merupakan bobot arc yang
107
menghubungkan place ke transisi. Jika tidak ada arc yang menghubungkan place ke transisi maka elemen matriks yang bersesuaian bernilai nol. Algoritma 4.6
Backward incidence Petri net Lampu Lalulintas di Persimpangan
Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: Ab ∈ (N ∪ {0})5ℓ×4ℓ /* matriks backward incidence */ 1 Ab ← [ones(ℓ, 4ℓ); zeros(4ℓ, 4ℓ)] /* inisialisasi */ 2 for i = 1 to ℓ do 3 Ab (ℓ+4i−3, 4i−3) ← 2; Ab (ℓ+4i−3, 4i−2) ← 1; Ab (ℓ+4i−1, 4i−1) ← 2 4 Ab (ℓ+4i−1, 4i) ← 1; Ab (ℓ+4i−2, 4i−2) ← thi −1; Ab (ℓ+4i, 4i) ← tki −1 5 Ab (i, 4i − 3 : 4i) ← zeros(1, 4) 6 end for Pernyataan Ab (ℓ + 4i − 3, 4i − 3) ← 2 dan Ab (ℓ + 4i − 3, 4i − 2) ← 1 masing-masing ekivalen dengan definisi arc (Hi , hni , 2) dan (Hi , hki , 1) pada baris 4 di Algoritma 4.4. Pada baris 5 di Algoritma 4.4 terdapat dua arc yang menghubungkan place ke transisi yaitu (Ki , kni , 2) dan (Ki , kmi , 1) yang masing-masing ekivalen dengan pernyataan Ab (ℓ + 4i − 1, 4i − 1) ← 2 dan Ab (ℓ+4i−1, 4i) ← 1. Perhatikan pernyataan Ab (ℓ+4i−2, 4i−2) ← thi −1 dan Ab (ℓ + 4i, 4i) ← tki − 1 masing-masing ekivalen dengan arc yang didefinisikan dengan (BHi , hki , thi − 1) dan (BKi , kmi , tki − 1). Pada baris 10 di Algoritma 4.4 didefinisikan arc dari place M ke semua transisi pada jalur yang lain dengan bobot 1. Ingat pada tahap inisialisasi elemen matriks backward incidence pada baris 1 hingga ℓ bernilai 1. Kenyataan ini menunjukkan terdapat arc dari place M ke semua transisi. Langkah yang harus dilakukan adalah menghapus arc dari place M ke semua transisi pada jalur yang sama agar sesuai dengan Algoritma 4.4. Perhatikan bahwa definisi Ab (i, 4i − 3), Ab (i, 4i − 2), Ab (i, 4i − 1), Ab (i, 4i) masing-masing menyatakan arc dari place Mi ke transisi hni , hki , kni , kmi . Dengan menggunakan keterangan sebelumnya maka pernyataan Ab (i, 4i − 3 : 4i) ← zeros(1, 4) dapat diartikan menghapus arc dari place M ke semua transisi pada jalur yang sama. Jadi Algoritma 4.6 membangun matriks backward incidence untuk Petri net lampu lalulintas di persimpangan. Secara umum Petri net lampu lalulintas di persimpangan adalah impure karena terdapat place yang menjadi input sekaligus output dari suatu transisi. Jelas bahwa place Hr dan Kr masing-masing menjadi input dan output dari transisi hnr dan knr dengan r = 1, 2, . . . , ℓ dan ℓ menyatakan jumlah jalur di persimpangan. 108
Pada bagian berikutnya dibahas analisis Petri net lampu lalulintas di persimpangan. Analisis Petri net dilakukan dengan menggunakan coverability tree. Untuk itu proses yang dilakukan dalam membangun coverability tree dibahas terlebih dahulu.
4.5.2
Coverability Tree
Cara yang digunakan untuk membangun coverability tree sama dengan sebelumnya. Langkah pertama yang dilakukan dalam membangun coverability tree adalah mendefinisikan keadaan awal sebagai root. Pada keadaan awal Petri net terdapat 10 token pada place M2 dan 6 token pada place H1 sehingga vektor keadaan dapat ditulis [0, 10, 6, 0, 0, 0, 0, 0, 0, 0]T . Transisi yang enabled pada keadaan ini adalah hn1 . Dengan memfire transisi ini diperoleh [0, 9, 5, 1, 0, 0, 0, 0, 0, 0]T , [0, 8, 4, 2, 0, 0, 0, 0, 0, 0]T , [0, 7, 3, 3, 0, 0, 0, 0, 0, 0]T , [0, 6, 2, 4, 0, 0, 0, 0, 0, 0]T , [0, 5, 1, 5, 0, 0, 0, 0, 0, 0]T . Keadaan terakhir menyebabkan transisi hn1 tidak enabled karena jumlah token pada place H1 sebanyak satu. Transisi hk1 menjadi enabled karena terdapat sebuah token pada place H1 dan 5 token pada place BH1 . Pemfirean transisi hk1 menyebabkan token yang disimpan di place M2 menjadi 4, place H1 dan BH1 tidak mempunyai token dan place K1 mempunyai 4 token sehingga vektor keadaan dapat ditulis [0, 4, 0, 0, 4, 0, 0, 0, 0, 0]T . Pada keadaan ini transisi kn1 menjadi enabled. Dengan memfire transisi ini maka keadaan Petri net menjadi [0, 3, 0, 0, 3, 1, 0, 0, 0, 0]T , [0, 2, 0, 0, 2, 2, 0, 0, 0, 0]T , [0, 1, 0, 0, 1, 3, 0, 0, 0, 0]T . Pada keadaan ini transisi km1 menjadi enabled. Dengan memfire transisi ini maka lampu lalulintas yang menyala pada jalur 1 berubah menjadi merah dan pada saat yang bersamaan lampu lalulintas yang menyala pada jalur 2 berubah menjadi hijau. Pemfirean transisi km1 menyebabkan keadaan Petri net menjadi [10, 0, 0, 0, 0, 0, 6, 0, 0, 0]T . Satu-satunya transisi yang enabled pada saat terdapat 10 token pada place M1 dan 6 token pada place H1 yaitu keadaan [10, 0, 0, 0, 0, 0, 6, 0, 0, 0]T adalah hn2 . Dengan memfire transisi ini maka keadaan Petri net berubah menjadi [9, 0, 0, 0, 0, 0, 5, 1, 0, 0]T , [8, 0, 0, 0, 0, 0, 4, 2, 0, 0]T , [7, 0, 0, 0, 0, 0, 3, 3, 0, 0]T , [6, 0, 0, 0, 0, 0, 2, 4, 0, 0]T , [5, 0, 0, 0, 0, 0, 1, 5, 0, 0]T . Pada keadaan ini transisi hn2 menjadi tidak enabled dan transisi hk2 menjadi enabled. Pemfirean transisi hk2 menyebabkan keadaan Petri net menjadi [4, 0, 0, 0, 0, 0, 0, 0, 4, 0]T . Dengan memfire transisi kn2 maka keadaan berubah menjadi [3, 0, 0, 0, 0, 0, 0, 0, 3, 1]T , [2, 0, 0, 0, 0, 0, 0, 0, 2, 2]T , [1, 0, 0, 0, 0, 0, 0, 0, 1, 3]T . Transisi km2 berubah men109
jadi enabled pada keadaan ini. Pemfirean transisi ini menyebabkan keadaan Petri net menjadi [0, 10, 6, 0, 0, 0, 0, 0, 0, 0]T . Perhatikan bahwa keadaan ini sama dengan keadaan awal Petri net sehingga proses membangun coverability tree telah selesai. Jumlah node pada coverability tree sebanyak 21 dengan 20 keadaan yang berbeda. Berdasarkan proses sebelumnya dapat disimpulkan bahwa pada setiap keadaan terdapat sebuah transisi yang enabled sehingga setiap node pada coverability tree mempunyai 1 anak.
0 10 6 0 0 hn1 0 0 0 0 0
0 9 5 1 0 hn1 0 0 0 0 0
0 8 4 2 0 hn1 0 0 0 0 0
. . . kn2
2 0 0 0 0 kn2 0 0 0 2 2
1 0 0 0 0 km2 0 0 0 1 3
0 10 6 0 0 0 0 0 0 0
Gambar 4.14 Coverability Tree untuk Petri net di Gambar 4.13 Coverability tree yang lengkap sulit untuk ditampilkan karena coverability tree mempunyai 21 node dan setiap node dinyatakan dengan vektor keadaan yang mempunyai 10 elemen. Untuk itu pada Gambar 4.14 hanya ditampilkan sebagian node di coverability tree. Node yang terletak di paling kiri merupakan node root yang berisi keadaan awal Petri net. Berdasarkan keterangan sebelumnya maka satu-satunya transisi yang enabled pada keadaan ini adalah hn1 . Dengan memfire transisi ini maka diperoleh keadaan di sebelah kanan dari node root. Kedua node dihubungkan dengan anak panah yang bertuliskan nama transisi yang difire yaitu hn1 . Proses ini dilakukan berulang-ulang hingga diperoleh node duplicate. Selanjutnya keadaan yang termuat di coverability tree akan dituliskan dengan menggunakan notasi himpunan. Hal ini dilakukan untuk mengetahui karakteristik keadaan yang dapat dicapai dari keadaan awal dan menyederhanakan penulisan terutama jika jumlah node di coverability tree sangat besar. Langkah pertama yang dilakukan adalah mencari pola vektor keadaan yang termuat di coverability tree. Pola ini sulit ditemukan karena jumlah node yang besar dan bentuk vektor keadaan yang bervariasi. Untuk itu keadaan di co110
verability tree akan dikelompokkan berdasarkan lampu lalulintas hijau atau kuning yang menyala dan jalurnya. Persimpangan yang dibahas pada bagian ini mempunyai 2 jalur sehingga keadaan di coverability tree dikelompokkan menjadi 4 himpunan yaitu Sh1 , Sh2 , Sk1 dan Sk2 . Notasi h dan k masing-masing menyatakan lampu lalulintas hijau dan kuning yang menyala. Indeks menyatakan jalur dimana lampu lalulintas hijau atau kuning menyala. Sebagai contoh Sh1 merupakan himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 1 dan Sk2 merupakan himpunan keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 2. Ketika lampu lalulintas hijau menyala pada jalur 1 maka place yang mungkin mempunyai token adalah M2 , H1 dan BH1 . Place yang lain tidak mungkin mempunyai token. Indeks masing-masing place yang mungkin mempunyai token adalah 2, 3 dan 4. Anggota himpunan Sh1 merupakan vektor keadaan yang dinotasikan h1 (t) untuk t = 0, 1, . . . , 5. Variabel t berhubungan dengan lama lampu lalulintas hijau menyala. Ingat lampu lalulintas hijau menyala di jalur 1 selama 6 satuan waktu. Dengan menggunakan notasi himpu nan maka Sh1 dapat dinyatakan sebagai Sh1 = h1 (t) : t = 0, . . . , 5 . Berikut merupakan bentuk keadaan h1 (t) dengan i = 1, 2, . . . , 10. Variabel i berkaitan dengan banyak elemen pada vektor keadaan. 10 − t, 6 − t, h1i (t) = t, 0,
untuk i = 2 untuk i = 3 untuk i = 4 untuk i yang lain
(4.22)
Perhatikan bahwa nilai t yang semakin besar menyebabkan token pada place M2 dan H1 akan berkurang dan token pada place BH1 bertambah. Kesimpulan ini sesuai dengan kenyataan bahwa place M2 dan H1 merupakan place input dari transisi hn1 . Jelas bahwa place output dari transisi hn1 adalah place BH1 . Ketika lampu lalulintas yang menyala pada jalur 1 berubah menjadi kuning maka place yang mungkin mempunyai token adalah M2 , K1 dan BK1 . Indeks dari ketiga place tersebut masing-masing adalah 2, 5 dan 6. Himpunan Sk1 dinyatakan dengan Sk1 = k1 (t) : t = 0, 1, . . . , 3 . Ingat lampu lalulintas
kuning di jalur 1 menyala selama 4 satuan waktu. Pada keadaan ini jumlah token pada place M2 sama dengan K1 . Jumlah token yang disimpan di M2 dan K1 111
pada kondisi awal sebanyak 4. Dengan menggunakan keterangan sebelumnya maka keadaan k1 (t) dapat dinyatakan sebagai berikut dengan i = 1, 2, . . . , 10. 4 − t, 4 − t, ki1 (t) = t, 0,
untuk i = 2 untuk i = 5 untuk i = 6 untuk i yang lain
(4.23)
Selanjutnya dibahas bentuk keadaan yang menyatakan lampu lalulintas hijau atau kuning menyala pada jalur 2. Pada saat lampu lalulintas hijau menyala pada jalur 2, place yang mungkin mempunyai token adalah M1 , H2 dan BH2 . Indeks masing-masing place tersebut adalah 1, 7 dan 8. Himpunan Sh2 dinyatakan dengan Sh2 = h2 (t) : t = 0, . . . , 5 . Ingat lampu lalulintas hijau menyala di jalur 2 selama 6 satuan waktu. Berikut merupakan bentuk keadaan h2 (t) dengan i = 1, 2, . . . , 10. 10 − t, 6 − t, h2i (t) = t, 0,
untuk i = 1 untuk i = 7 untuk i = 8
(4.24)
untuk i yang lain
Saat lampu lalulintas kuning menyala pada jalur 2 maka place yang mungkin mempunyai token adalah M1 , K2 dan BK2 . Indeks masing-masing place adalah 1, 9 dan 10. Himpunan Sk2 mempunyai anggota vektor keadaan yang dinyatakan dengan Sk2 = k2 (t) : t = 0, 1, . . . , 3 . Ingat lampu lalulintas kuning menyala di jalur 2 selama 4 satuan waktu. Keadaan k2 (t) dapat dinyatakan sebagai berikut dengan i = 1, 2, . . . , 10. 4 − t, 4 − t, ki2 (t) = t, 0,
untuk i = 1 untuk i = 9 untuk i = 10
(4.25)
untuk i yang lain
Selanjutnya ditentukan bentuk umum coverability tree untuk Petri net lampu lalulintas di persimpangan. Langkah pertama yang dilakukan dalam membangun coverability tree adalah mendefinisikan bentuk umum keadaan awal Petri net sebagai node root. Bentuk keadaan awal secara umum dapat dilihat pada Algoritma 4.4. Place yang mempunyai token pada keadaan awal
112
adalah M2 , M3 , . . . , Mℓ dan H1 . Indeks masing-masing place adalah 2, 3, . . . , ℓ dan ℓ + 1. Jika x adalah vektor yang menyatakan keadaan awal Petri net maka untuk i = 1, 2, . . . , 5ℓ berlaku
xi =
P (thj + tkj ), untuk i = 2, 3, . . . , ℓ 1≤j
th1 , untuk i = ℓ + 1
(4.26)
0, untuk i yang lain
dengan thj dan tkj masing-masing menyatakan lama lampu lalulintas hijau dan kuning menyala pada jalur ke j untuk j = 1, 2, . . . , ℓ. Jika token yang disimpan pada place H1 pada saat awal lebih dari atau sama dengan 2 yaitu th1 ≥ 2 maka transisi hn1 enabled dan jika place H1 mempunyai sebuah token pada saat awal yaitu th1 = 1 maka transisi yang enabled adalah hk1 . Diasumsikan lama lampu lalulintas hijau menyala pada jalur 1 lebih dari atau sama dengan 2 satuan waktu sehingga th1 ≥ 2 yang menyebabkan transisi hn1 dapat difire. Dengan memfire transisi ini maka token pada place Mr dengan r = 2, 3, . . . , ℓ dan place H1 berkurang sedangkan token pada place BH1 bertambah. Indeks place H1 dan BH1 masing-masing adalah ℓ + 1 dan ℓ + 2. Jika Sh1 = h1 (t) : t = 0, . . . , th1 − 1 adalah himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 1 maka untuk i = 1, 2, . . . , 5ℓ berlaku P (thj + tkj ) − t, 1≤j
untuk i = 2, 3, . . . , ℓ untuk i = ℓ + 1 untuk i = ℓ + 2
(4.27)
untuk i yang lain
Transisi hn1 tidak enabled pada saat place H1 menyimpan sebuah token dan transisi hk1 menjadi enabled. Dengan memfire hk1 maka token pada place Mr dengan r = 2, 3, . . . , ℓ berkurang, token pada place H1 dan BH1 habis serta place K1 menerima token sebanyak tk1 yaitu lama lampu lalulintas kuning menyala pada jalur 1. Pada keadaan ini satu-satunya transisi yang enabled adalah kn1 . Pemfirean transisi ini menyebabkan token pada place Mr dengan r = 2, 3, . . . , ℓ dan K1 berkurang sedangkan token pada place BK1 bertambah. Indeks place K1 dan BK1 masing-masing adalah ℓ + 3 dan ℓ + 4. Himpunan Sk1 merupakan himpunan dengan anggota keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 1 yang ditulis 113
Sk1 =
1 k (t) : t = 0, 1, . . . , tk1 − 1 . Keadaan k1 (t) dengan i = 1, 2, . . . , 5ℓ
merupakan vektor kolom yang dinyatakan dalam persamaan berikut. P tk + (thj + tkj ) − t, 1 1<j
untuk i = 2, 3, . . . , ℓ untuk i = ℓ + 3 untuk i = ℓ + 4 untuk i yang lain
(4.28)
Selanjutnya dibahas keadaan yang menyatakan lampu lalulintas hi-
jau atau kuning menyala pada jalur 2. Langkah-langkah yang dilakukan serupa dengan jalur 1 ditambah beberapa penyesuaian. Penyesuaian pertama pada variabel yang menyatakan lama lampu lalulintas menyala. Hal lain yang perlu diperhatikan adalah indeks place yang mungkin mempunyai token. Jelas bahwa indeks place yang mungkin mempunyai token pada jalur 2 berbeda dengan indeks place yang mungkin mempunyai pada jalur 1 meskipun warna lampu lalulintas yang menyala sama (hijau atau kuning). Perhatikan ketika lampu lalulintas pada jalur 1 menyala hijau atau kuning maka lampu lalulintas merah pada jalur 1 tidak menyala. Kenyataan ini dapat disimpulkan dengan memperhatikan bahwa elemen pertama dari vektor keadaan selalu bernilai nol pada pembahasan sebelumnya. Hal ini juga harus disesuaikan yaitu ketika lampu lalulintas hijau atau kuning menyala pada jalur 2 maka lampu lalulintas merah pada jalur 2 tidak menyala dengan memberikan nilai nol pada elemen kedua dari vektor keadaan. Jika Sh2 adalah himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 2 maka ditulis Sh2 = h2 (t) : t = 0, 1, . . . , th2 − 1 . Keadaan h2 (t) didefinisikan sebagai berikut untuk i = 1, 2, . . . , 5ℓ.
h2i (t) =
P (thj + tkj ) − t, untuk i = 1 2≤j≤ℓ P (thj + tkj ) − t, untuk i = 3, 4, . . . , ℓ 2≤j
th2 − t, untuk i = ℓ + 5
(4.29)
t, untuk i = ℓ + 6 0, untuk i yang lain
Perhatikan bahwa terdapat kasus tambahan pada definisi h2 (t) yaitu pada saat i = 1. Ingat elemen pertama dari vektor keadaan menyatakan jumlah token pada place M1 . Lampu lalulintas merah menyala di jalur 1 selama
114
lampu lalulintas hijau atau kuning menyala di jalur 2, 3, . . . , ℓ sehingga token pada place M1 merupakan jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Himpunan Sk2 = k2 (t) : t = 0, 1, . . . , tk2 − 1 beranggotakan keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 2. Definisi keadaan k2 (t) dapat dituliskan sebagai berikut untuk i = 1, 2, . . . , 5ℓ.
ki2 (t) =
P (thj + tkj ) − t, untuk i = 1 tk2 + 2<j≤ℓ P (thj + tkj ) − t, untuk i = 3, 4, . . . , ℓ tk2 + 2<j
tk2 − t, untuk i = ℓ + 7
(4.30)
t, untuk i = ℓ + 8 0, untuk i yang lain
Selanjutnya dibahas keadaan Petri net yang menyatakan lampu lalulintas hijau atau kuning menyala pada jalur 3. Diharapkan bentuk vektor keadaan jalur 1, 2 dan 3 dapat digunakan sebagai dasar untuk menyusun bentuk umum vektor keadaan untuk semua jalur di persimpangan. Keadaan Petri net yang menyatakan lampu lalulintas hijau menyala dibahas terlebih dahulu. Langkah yang dilakukan serupa dengan sebelumnya. Misalkan Sh3 merupakan himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 3 yang ditulis Sh3 = h3 (t) : t = 0, 1, . . . , th3 − 1 . Vektor kolom h3 (t) yang menyatakan keadaan Petri net dapat dituliskan dalam persamaan berikut untuk i = 1, 2, . . . , 5ℓ.
h3i (t)
=
P
(thj + tkj ) − t, untuk i = 1, 2
(j
P
(thj + tkj ) − t, untuk i = 4, 5, . . . , ℓ
3≤j
th3 − t, untuk i = ℓ + 9 t, untuk i = ℓ + 10 0, untuk i yang lain
(4.31)
Ekspresi jumlahan yang memuat (j < i) ∨ (j ≥ 3) dilakukan pada saat i bernilai 1 atau 2. Hal ini dapat dijelaskan dengan mengambil contoh untuk i = 2 yaitu lama lampu lalulintas merah menyala pada jalur 2. Lama lampu lalulintas merah menyala pada jalur 2 diperoleh dari jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Perhatikan bahwa pada saat t = 0 lampu lalulintas merah pada jalur 2 baru saja me115
nyala. Ekspresi (j < i) ∨ (j ≥ 3) dan (1 ≤ j < i) ∨ (3 ≤ j ≤ ℓ) adalah ekivalen dengan memperhatikan bahwa j menyatakan jalur yang nilainya berada diantara 1 dan ℓ yaitu 1 ≤ j ≤ ℓ. Selanjutnya dibahas lampu lalulintas kuning menyala pada jalur 3. Misalkan Sk3 adalah himpunan keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 3 yang ditulis Sk3 = k3 (t) : t = 0, 1, . . . , tk3 − 1 . Bentuk vektor keadaan k3 (t) dapat di-
nyatakan sebagai berikut dengan i = 1, 2, . . . , 5ℓ.
ki3 (t) =
P tk3 + (thj + tkj ) − t, untuk i = 1, 2 (j
3) P tk3 + (thj + tkj ) − t, untuk i = 4, 5, . . . , ℓ 3<j
tk3 − t, untuk i = ℓ + 11 t, untuk i = ℓ + 12 0, untuk i yang lain
Jumlah node pada coverability tree adalah 1 +
Pℓ
i=1 (thi
(4.32)
+ tki ) yaitu
jumlahan lama lampu lalulintas hijau dan kuning untuk semua jalur ditambah satu. Penambahan satu node ini merupakan node duplicate dari node root. Berikutnya disusun bentuk umum keadaan yang berada di coverability tree. Misalkan S adalah himpunan keadaan di coverability tree. Dengan menggu nakan keterangan sebelumnya ditulis S = Sh ∪ Sk dengan Sh = ∪ℓr=1 Shr dan Sk = ∪ℓr=1 Skr . Himpunan Sh = {hr (tr ) : 0 ≤ tr < thr , 1 ≤ r ≤ ℓ} beranggotakan keadaan yang menyatakan terdapat lampu lalulintas hijau yang menyala. Indeks dari place Hr dan BHr masing-masing adalah ℓ + 4r − 3 dan ℓ + 4r − 2. Berikut merupakan bentuk dari vektor keadaan hr (tr ) dengan i = 1, 2, . . . , 5ℓ.
hri (tr )
=
P
(thj + tkj ) − tr , untuk 1 ≤ i < r
(j
P
(thj + tkj ) − tr , untuk r < i ≤ ℓ
r≤j
thr − tr , untuk i = ℓ + 4r − 3
(4.33)
tr , untuk i = ℓ + 4r − 2 0, untuk i yang lain
Anggota himpunan Sk = {kr (tr ) : 0 ≤ tr < tkr , 1 ≤ r ≤ ℓ} adalah semua keadaan yang menyatakan terdapat lampu lalulintas kuning yang menyala. Variabel i menyatakan indeks place dan variabel r menyatakan indeks jalur sehingga i = 1, 2, . . . , 5ℓ dan r = 1, 2, . . . , ℓ. Indeks dari place Kr dan 116
BKr masing-masing adalah ℓ + 4r − 1 dan ℓ + 4r. Berikut merupakan bentuk dari vektor keadaan kr (tr ).
kir (tr ) =
P tkr + (thj + tkj ) − tr , untuk 1 ≤ i < r (jr) P tkr + (thj + tkj ) − tr , untuk r < i ≤ ℓ r<j
tkr − tr , untuk i = ℓ + 4r − 1
(4.34)
tr , untuk i = ℓ + 4r 0, untuk i yang lain
Dengan memperhatikan persamaan (4.33) dan (4.34) dapat disimpulkan bahwa secara umum banyak keadaan yang berbeda pada coverability tree Pℓ adalah r=1 (thr + tkr ). Terdapat dua node coverability tree yang menyatakan keadaan awal sehingga jumlah node pada coverability tree sebanyak P 1 + ℓr=1 (thr + tkr ). Perhatikan bahwa tidak ada keadaan di coverability tree yang mempunyai notasi ω sehingga Petri net lampu lalulintas di persimpangan terbatas (bounded ). Coverability tree yang diperoleh juga disebut reachability tree karena tree ini secara eksplisit memuat semua keadaan yang mungkin dicapai dari keadaan awal. Batas atas setiap place pada Petri net di Gambar 4.13 dapat diperoleh dengan memperhatikan persamaan (4.22), (4.23), (4.24) dan (4.25). Jumlah token maksimum pada place M1 dan M2 masing-masing adalah 10 yang terlihat pada persamaan (4.24) dan (4.22) pada saat t = 0. Dengan cara yang sama dapat diperoleh batas atas place yang lain di Petri net. Batas atas Petri net dapat dinyatakan sebagai keadaan xb seperti telah dijelaskan pada bab sebelumnya saat membahas keterbatasan (boundedness). Keadaan yang menyatakan batas atas Petri net di Gambar 4.13 adalah [10, 10, 6, 5, 4, 3, 6, 5, 4, 3]T . Perhatikan bahwa batas atas dari place M1 adalah jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur 2 dan batas atas dari place M2 adalah jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur 1. Secara umum batas atas place M untuk suatu jalur diperoleh dari jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Jumlah token maksimum pada place H1 , H2 , K1 dan K2 merupakan lama masing-masing lampu lalulintas menyala. Batas atas untuk place ‘buffer ’ yaitu BH1 , BH2 , BK1 dan BK2 diperoleh dari lama masing-masing lampu lalulintas menyala dikurangi satu. Indeks dari place M1 , M2 , . . . , Mℓ masing-masing adalah 1, 2, . . . , ℓ. Indeks dari place H1 , H2 , . . . , Hℓ masing-masing dinyatakan 117
ℓ + 1, ℓ + 5, . . . , 5ℓ − 3. Indeks dari place BH1 , BH2 , . . . , BHℓ masing-masing adalah ℓ + 2, ℓ + 6, . . . , 5ℓ − 2. Indeks dari place K1 , K2 , . . . , Kℓ masing-masing adalah ℓ + 3, ℓ + 7, . . . , 5ℓ − 1. Indeks dari place BK1 , BK2 , . . . , BKℓ masingmasing adalah ℓ + 4, ℓ + 8, . . . , 5ℓ. Dengan menggunakan hasil yang sudah diperoleh maka dapat disusun bentuk umum batas atas place. Bentuk umum batas atas place di Petri net lampu lalulintas di persimpangan dapat dituliskan sebagai berikut. P j6=i (thj + tkj ), th(i−ℓ+3)/4 , xbi = th(i−ℓ+2)/4 − 1, tk(i−ℓ+1)/4 , tk(i−ℓ)/4 − 1,
untuk i = 1, 2, . . . , ℓ untuk i = ℓ + 1, ℓ + 5, . . . , 5ℓ − 3 untuk i = ℓ + 2, ℓ + 6, . . . , 5ℓ − 2
(4.35)
untuk i = ℓ + 3, ℓ + 7, . . . , 5ℓ − 1 untuk i = ℓ + 4, ℓ + 8, . . . , 5ℓ
Pada bagian selanjutnya dibahas sifat konservasi Petri net lampu la-
lulintas di persimpangan. 4.5.3
Konservasi
Pengujian sifat konservasi dilakukan dengan membangun sistem persamaan linier. Setiap persamaan menyatakan suatu keadaan di coverability tree sehingga jumlah persamaan sama dengan jumlah keadaan yaitu 20. Jumlah variabel satu lebih banyak dibandingkan jumlah place di Petri net yaitu 11. Notasi yang digunakan untuk menyatakan variabel sama dengan bagian sebelumnya yaitu γ1 , γ2 , . . . , γ10 , C. Sistem persamaan linier berikut diperoleh dari mengevaluasi persamaan (4.22) dengan t = 0, 1, . . . , 5. 10 γ2 + 6 γ3 = C 9 γ2 + 5 γ3 + γ4 = C 8 γ2 + 4 γ3 + 2 γ4 = C 7 γ2 + 3 γ3 + 3 γ4 = C
(4.36)
6 γ2 + 2 γ3 + 4 γ4 = C 5 γ2 + γ3 + 5 γ4 = C Nilai elemen dan posisi elemen pada vektor keadaan masing-masing menyatakan konstanta dan variabel pada sistem persamaan linier. Perhatikan bahwa konstanta dari variabel γ2 dan γ3 semakin kecil sedangkan konstanta dari variabel γ4 semakin besar. Kenyataan ini dapat digunakan sebagai 118
pedoman untuk menuliskan keenam persamaan pada (4.36) menjadi sebuah persamaan. Konstanta dari variabel γ2 , γ3 dan γ4 pada persamaan pertama masing-masing adalah 10, 6 dan 0 sehingga jika h1 = 0, 1, . . . , 5 maka sistem persamaan linier (4.36) dapat ditulis menjadi (10 − h1 )γ2 + (6 − h1 )γ3 + h1 γ4 = C
(4.37)
Dengan menggunakan cara yang sama dapat ditentukan bentuk sistem persamaan linier untuk keadaan yang lain. Ketiga persamaan berikut masingmasing diperoleh dengan mengevaluasi persamaan (4.23), (4.24) dan (4.25) dengan t yang bersesuaian. (4 − k1 )γ2 + (4 − k1 )γ5 + k1 γ6 = C
dengan k1 = 0, 1, . . . , 3
(10 − h2 )γ1 + (6 − h2 )γ7 + h2 γ8 = C
dengan h2 = 0, 1, . . . , 5
(4 − k2 )γ1 + (4 − k2 )γ9 + k2 γ10 = C
dengan k2 = 0, 1, . . . , 3
(4.38)
Perhatikan persamaan yang menyatakan lampu lalulintas hijau menyala pada jalur 1 dan jalur 2. Kedua persamaan dapat ditulis menjadi sebuah persamaan dengan menambahkan variabel r yang menyatakan jalur. Sebelum itu dibahas bagaimana mendapatkan konstanta 10 dan 6 pada kedua persamaan tersebut dari input yang diberikan. Input yang diberikan adalah lama lampu lalulintas hijau dan kuning menyala pada jalur 1 dan jalur 2. Ingat bahwa lampu lalulintas hijau dan kuning masing-masing menyala selama 6 dan 4 satuan waktu pada jalur 1 dan jalur 2 sehingga th1 = 6 = th2 dan tk1 = 4 = tk2 . Konstanta 10 pada jalur 1 diperoleh dari th1 +tk1 sedangkan konstanta 10 pada jalur 2 diperoleh dari th2 + tk2 yang terlihat pada persamaan (4.33). Dengan menggunakan cara yang sama dapat disimpulkan konstanta 6 pada jalur 1 diperoleh dari th1 dan konstanta 6 pada jalur 2 diperoleh dari th2 . Persamaan berikut menyatakan terdapat lampu lalulintas hijau yang menyala. (10 − hr )γ2−r+1 + (6 − hr )γ2+4r−3 + hr γ2+4r−2 = C
(4.39)
dengan 0 ≤ hr < thr dan r = 1, 2. Perhatikan bahwa 2 + 4r − 3 dan 2 + 4r − 2 diperoleh dari persamaan (4.33) dengan menggunakan ℓ = 2. Selanjutnya dibahas persamaan yang menyatakan lampu lalulintas kuning menyala pada jalur 1 dan jalur 2. Terlihat pada persamaan (4.38) bahwa semua konstanta bernilai sama. Konstanta 4 pada jalur 1 diperoleh dari tk1 119
sedangkan konstanta 4 pada jalur 2 diperoleh dari tk2 . Persamaan (4.34) dapat digunakan sebagai pedoman untuk menentukan persamaan yang menyatakan terdapat lampu lalulintas kuning yang menyala. Variabel ℓ diberikan nilai 2 karena persimpangan mempunyai dua jalur. (4 − kr )γ2−r+1 + (4 − kr )γ2+4r−1 + kr γ2+4r = C
(4.40)
dengan 0 ≤ kr < tkr dan r = 1, 2. Persamaan (4.39) dan (4.40) berlaku untuk persimpangan yang mempunyai dua jalur dengan lama lampu lalulintas hijau dan kuning masingmasing menyala selama 6 dan 4 satuan waktu. Kedua persamaan tersebut dapat diubah agar berlaku untuk lama lampu lalulintas menyala sebarang. Perubahan yang dilakukan berdasarkan keterangan yang telah dibahas sebelumnya. Dengan menggunakan variabel th1 , th2 , tk1 , tk2 untuk menyatakan lama masing-masing lampu lalulintas menyala pada setiap jalur maka persamaan (4.39) dan (4.40) dapat dinyatakan sebagai. ((thr + tkr ) − hr )γ2−r+1 + (thr − hr )γ2+4r−3 + hr γ2+4r−2 = C (tkr − kr )γ2−r+1 + (tkr − kr )γ2+4r−1 + kr γ2+4r = C
(4.41)
dengan 0 ≤ hr < thr dan r = 1, 2. Perhatikan bahwa (thr + tkr ) − hr , thr − hr dan hr serupa dengan persamaan (4.33) jika variabel hr diganti dengan tr . Ekspresi (tkr − kr ) dan kr juga serupa dengan persamaan (4.34). Selanjutnya disusun bentuk umum sistem persamaan linier yang diperoleh jika jalur pada persimpangan berjumlah sebarang. Bentuk umum sistem persamaan linier diperoleh dari persamaan (4.33) dan (4.34) yang telah dibahas pada saat menurunkan persamaan (4.41). Ingat letak elemen dan nilai elemen pada vektor keadaan masing-masing menentukan variabel dan konstanta pada sistem persamaan linier. Secara umum sistem persamaan linier yang terbentuk dapat dituliskan sebagai berikut. 5ℓ X
hri (thr )
5ℓ X
γi = C,
i=1
kir (tkr ) γi = C
(4.42)
i=1
dengan 0 ≤ thr < thr , 0 ≤ tkr < tkr dan 1 ≤ r ≤ ℓ. Sistem persamaan P linier (4.42) mempunyai ℓr=1 (thr + tkr ) persamaan dan 5ℓ + 1 variabel. Jelas bahwa terdapat penyelesaian tidak trivial jika jumlah persamaan kurang dari jumlah variabel. Jika terdapat penyelesaian tidak trivial maka Petri 120
net memenuhi sifat konservasi. Jadi sifat konservasi dipenuhi jika berlaku Pℓ r=1 (thr + tkr ) < 5ℓ + 1 dengan ℓ menyatakan jumlah jalur di persimpangan. Pada bagian berikutnya dibahas reduksi keadaan pada Petri net lampu lalulintas di persimpangan. Hal ini bertujuan mengurangi place di Petri net tanpa kehilangan informasi. Dengan berkurangnya place maka ukuran matriks incidence juga semakin kecil sehingga memperkecil kebutuhan memori dan mempercepat waktu komputasi.
4.6
Reduksi Keadaan Petri net Lampu Lalulintas
Secara umum terdapat lebih dari satu Petri net untuk memodelkan suatu permasalahan. Untuk itu dibutuhkan parameter untuk mengetahui Petri net yang baik. Parameter yang digunakan adalah dimensi ruang keadaan Petri net. Dimensi ruang keadaan merupakan jumlah place pada Petri net yang telah dibahas pada bab sebelumnya. Petri net yang baik mempunyai dimensi ruang keadaan yang kecil, yaitu ekivalen dengan jumlah place sedikit. Mendesain Petri net yang mempunyai place sedikit sulit dilakukan secara langsung. Untuk itu dibutuhkan proses yang bertujuan mengurangi place di Petri net yang disebut reduksi keadaan. Reduksi keadaan dilakukan setelah desain Petri net sudah dibuat. Proses ini menghasilkan Petri net dengan jumlah place yang lebih kecil jika terdapat place-place yang mempunyai perilaku sama. Pada bagian ini dibahas reduksi keadaan Petri net lampu lalulintas di persimpangan. Langkah pertama yang dilakukan untuk mereduksi keadaan Petri net adalah menentukan place-place yang mempunyai perilaku sama. Perhatikan contoh permasalahan pada bagian sebelumnya. Jelas bahwa lampu lalulintas hijau tidak pernah menyala bersamaan di jalur 1 dan jalur 2. Hal ini juga berlaku untuk lampu lalulintas kuning. Kenyataan ini menyebabkan place H1 , BH1 , K1 , BK1 dan H2 , BH2 , K2 , BK2 digunakan secara bergantian. Dengan kata lain tidak mungkin place H1 dan H2 mempunyai token pada saat yang bersamaan. Hal ini juga berlaku untuk tiga pasang place yang lain yaitu BH1 dan BH2 , K1 dan K2 , BK1 dan BK2 . Berdasarkan penjelasan sebelumnya dapat disimpulkan place H1 , BH1 , K1 , BK1 masing-masing mempunyai perilaku yang sama dengan H2 , BH2 , K2 , BK2 . Place-place yang mempunyai perilaku sama, cukup diwakili sebuah place sehingga place yang lain dapat dihapus. Pada permasalahan ini place H1 dan H2 diwakili oleh place H. Ketiga pasang place yang lain masing-masing 121
diwakili oleh place BH, K dan BK. Semua arc yang berasal dari (menuju ke) place H1 atau H2 diganti dengan arc yang berasal dari (menuju ke) place H tanpa mengubah transisi tujuan (asal) dan bobot arc. Proses ini juga dilakukan untuk place BH, K dan BK. Hasil reduksi keadaan pada Petri net sebelumnya dapat dilihat di Gambar 4.15.
6
2
hn1
6 H
2
hn2
hk1
hk2 4
kn1
6
5
BH
5 2
2
4 kn2
K km1
km2 3
M2 10
BK
3 10
10
M1
Gambar 4.15 Hasil Reduksi Keadaan pada Petri net Lampu Lalulintas di Persimpangan dengan Dua Jalur Sebelum dilakukan reduksi keadaan pada Petri net lampu lalulintas di persimpangan, jalur dimana lampu lalulintas hijau atau kuning menyala dilihat dari indeks placenya. Setelah dilakukan reduksi keadaan, place hijau maupun kuning tidak mempunyai indeks seperti terlihat pada Gambar 4.15. Ingat pada saat lampu lalulintas di suatu jalur menyala hijau atau kuning maka lampu lalulintas merah di jalur tersebut dalam keadaan padam. Pada setiap saat terdapat sebuah lampu lalulintas merah dalam keadaan padam. Berdasarkan kenyataan ini, dapat disimpulkan jalur dimana lampu lalulintas menyala hijau atau kuning adalah jalur yang lampu lalulintas merah tidak dalam keadaan menyala. Selanjutnya disusun algoritma untuk membangun Petri net lampu lalulintas di persimpangan setelah dilakukan reduksi keadaan. Ingat Petri net pada Gambar 4.15 diperoleh dari mengubah Petri net di Gambar 4.13 seperti telah dibahas sebelumnya. Penyusunan algoritma juga tidak harus dimulai dari awal melainkan dari mengubah algoritma untuk membangun Petri net sebelumnya. Perubahan dilakukan pada place Hr , BHr , Kr dan BKr dengan 122
1 ≤ r ≤ ℓ. Keempat kelompok place tersebut masing-masing diwakili place H, BH, K dan BK. Semua arc yang berasal dari (menuju ke) place Hr dengan 1 ≤ r ≤ ℓ diganti dengan arc yang berasal dari (menuju ke) place H tanpa mengubah transisi tujuan (asal) dan bobot arc. Proses ini juga dilakukan untuk place BH, K dan BK. Algoritma 4.7 Petri net Lampu Lalulintas Tereduksi Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: P, T, Aw, x0 1 P ← {H, BH, K, BK}; T ← ∅; Aw ← ∅; x0 ← zeros(ℓ + 4, 1) 2 for i = 1 to ℓ do 3 P ← P ∪ {Mi }; T ← T ∪ {hni , hki , kni , kmi } 4 Aw ← Aw ∪ {(H, hni , 2), (hni , H, 1), (hni , BH, 1), (H, hki , 1)} 5 Aw ← Aw ∪ {(K, kni , 2), (kni , K, 1), (kni , BK, 1), (K, kmi , 1)} 6 Aw ← Aw ∪ {(BH, hki , thi − 1), (hki , K, tki ), (BK, kmi , tki − 1)} 7 end for 8 for i = 1 to ℓ do 9 for j = 1 to ℓ and j 6= i do 10 Aw ← Aw ∪ {(Mi, hnj , 1), (Mi, hkj , 1), (Mi, knj , 1), (Mi, kmj , 1)} 11 end for P 12 Aw ← Aw ∪ {(kmi , H, thi+1 ), (kmi , Mi , j6=i (thj + tkj ))} P 13 x0 (i) ← i−1 j=1 (thj + tkj ) /* place Mi */ 14 end for 15 x0 (ℓ + 1) ← th1 /* place H */ Perubahan selanjutnya dilakukan pada ukuran vektor keadaan. Ukuran vektor keadaan pada Petri net menyatakan jumlah place. Secara umum place pada Petri net lampu lalulintas di persimpangan setelah dilakukan reduksi keadaan sebanyak ℓ + 4 yaitu p1 = M1 , p2 = M2 , . . . , pℓ = Mℓ , pℓ+1 = H, pℓ+2 = BH, pℓ+3 = K, pℓ+4 = BK. Hal yang tidak diubah dari algoritma sebelumnya adalah banyak transisi dan arc yang digunakan. Transisi dan arc yang digunakan pada Petri net ini sama dengan sebelumnya yaitu masingmasing sebanyak 4ℓ dan 4ℓ2 + 9ℓ dengan ℓ menyatakan jumlah jalur pada persimpangan. Urutan transisi yang digunakan sama dengan sebelumnya, yang dinyatakan dengan t1 = hn1 , t2 = hk1 , t3 = kn1 , t4 = km1 , . . . , t4ℓ−3 = hnℓ , t4ℓ−2 = hkℓ , t4ℓ−1 = knℓ , t4ℓ = kmℓ . Algoritma membangun Petri net lampu lalulintas tereduksi yang diperoleh dengan melakukan penyesuaian terhadap Algoritma 4.4. Hasil akhir proses tersebut dapat dilihat pada Algoritma 4.7. Berikutnya dibahas pengujian sifat pure pada Petri net di bagian ini. Petri net lampu lalulintas di persimpangan setelah dilakukan reduksi keadaan 123
bersifat impure karena masih terdapat place yang menjadi input sekaligus output dari suatu transisi. Place H dan K masing-masing menjadi input sekaligus output dari transisi hnr dan knr dengan 1 ≤ r ≤ ℓ dan ℓ menyatakan jumlah jalur di persimpangan. 4.6.1 ¯
Matriks Incidence Petri net pada Gambar 4.15 mempunyai 6 place dan 8 transisi se-
hingga ketiga matriks incidence berukuran 6 × 8. Sebelum dilakukan reduksi keadaan, ketiga matriks incidence berukuran lebih besar yaitu 10 × 8. Salah satu manfaat yang diperoleh dari segi komputasi dengan melakukan reduksi keadaan adalah memperkecil kebutuhan memori. 0 0 1 Af = 1 0 0
0 0 10 0 0 0 0 0 0 0 0 0 0 10 0 0 6 1 0 0 6 0 0 0 1 0 0 0 4 1 0 0 4 1 0 0 1 0 0 0 1 0
(4.43)
Matriks forward incidence pada persamaan (4.43) diperoleh dari matriks forward incidence pada persamaan (4.20) dengan beberapa perubahan. Place M1 dan M2 tidak mengalami perubahan sehingga semua elemen pada baris pertama dan kedua tidak berubah. Ingat indeks dari place M1 dan M2 masing-masing adalah 1 dan 2. Perubahan dilakukan pada place H1 , BH1 , K1 , BK1 , H2 , BH2 , K2 , BK2 yang masing-masing mempunyai indeks 3 hingga 10. Pada proses reduksi keadaan, semua arc yang menuju ke place H1 atau H2 diganti arc yang menuju ke place H dengan transisi asal dan bobot arc tidak berubah. Elemen tidak nol pada baris 3 dan baris 7 di matriks forward incidence (4.20) masing-masing menyatakan arc yang menuju ke place H1 dan H2 . Transisi asal dan bobot arc masing-masing dinyatakan dengan posisi kolom dan nilai elemen pada matriks forward incidence. Indeks place H adalah 3 setelah dilakukan reduksi keadaan pada Petri net. Ingat bahwa place tujuan dinyatakan dengan posisi baris pada matriks forward incidence. Dengan menggunakan keterangan sebelumnya maka proses reduksi keadaan ekivalen dengan memindahkan elemen tidak nol pada baris 3 dan 7 di persamaan (4.20) ke baris 3 tanpa mengubah posisi kolomnya. Jelas bahwa proses ini tidak mengubah nilai elemen. 124
Proses yang serupa dilakukan untuk place BH, K dan BK. Hasil akhir matriks forward incidence untuk Petri net lampu lalulintas di persimpangan setelah dilakukan reduksi keadaan dapat dilihat pada persamaan (4.43). Selanjutnya dibahas bentuk umum matriks forward incidence untuk Petri net setelah dilakukan reduksi keadaan. Ukuran matriks forward incidence tergantung jumlah place dan transisi pada Petri net. Berdasarkan pembahasan sebelumnya maka jumlah place dan transisi pada Petri net tergantung jumlah jalur. Kenyataan ini mengakibatkan ukuran matriks forward incidence dipengaruhi jumlah jalur di persimpangan. Oleh sebab itu bentuk umum matriks forward incidence dituliskan dalam bentuk algoritma. Algoritma 4.8 Forward Incidence Petri net Lampu Lalulintas Tereduksi Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: Af ∈ (N ∪ {0})(ℓ+4)×4ℓ /* matriks forward incidence */ Pℓ−1 1 Af ← zeros(ℓ + 4, 4ℓ); Af (ℓ + 1, 4ℓ) ← th1 ; Af (ℓ, 4ℓ) ← j=1 (thj + tkj ) 2 for i = 1 to ℓ − 1 do P 3 Af (ℓ + 1, 4i) ← thi+1 ; Af (i, 4i) ← j6=i (thj + tkj ) 4 end for 5 for i = 1 to ℓ do 6 Af (ℓ + 1, 4i − 3) ← 1; Af (ℓ + 2, 4i − 3) ← 1; Af (ℓ + 3, 4i − 1) ← 1 7 Af (ℓ + 4, 4i − 1) ← 1; Af (ℓ + 3, 4i − 2) ← tki 8 end for Algoritma 4.8 merupakan perumuman dari proses yang dibahas sebelumnya. Langkah pertama yang dilakukan adalah menentukan indeks place yang mengalami perubahan. Place yang mengalami perubahan adalah Hi , BHi , Ki dan BKi dengan 1 ≤ i ≤ ℓ. Secara umum indeks dari place Hi , BHi , Ki dan BKi masing-masing adalah ℓ + 4i−3, ℓ + 4i−2, ℓ + 4i−1 dan ℓ + 4i dengan 1 ≤ i ≤ ℓ. Indeks dari place Hi+1 adalah ℓ + 4i + 1 dengan 1 ≤ i ≤ ℓ. Setelah dilakukan reduksi keadaan, indeks dari place H, BH, K dan BK masing-masing adalah ℓ + 1, ℓ + 2, ℓ + 3 dan ℓ + 4. Berdasarkan keterangan sebelumnya maka ekspresi ℓ + 4i − 3, ℓ + 4i − 2, ℓ + 4i − 1 dan ℓ + 4i pada Algoritma 4.5 masing-masing diubah menjadi ℓ + 1, ℓ + 2, ℓ + 3 dan ℓ + 4. Ekspresi ℓ + 4i + 1 diubah menjadi ℓ + 1. Berikutnya dibahas perubahan yang dilakukan pada Algoritma 4.5 untuk memperoleh Algoritma 4.8 secara lengkap dan mendetil. Algoritma 4.8 diperoleh dari Algoritma 4.5 dengan melakukan beberapa perubahan. Perubahan pertama dilakukan adalah mengubah ukuran matriks forward incidence menjadi (ℓ + 4) × 4ℓ karena jumlah place pada Petri net sebanyak ℓ + 4. Ekspresi ℓ + 4i + 1 menyatakan place Hi+1 sehingga diganti 125
dengan ℓ + 1 yang menyatakan place H seperti terlihat pada pernyataan pertama di baris 3. Semua pernyataan pada baris 6 juga harus diubah. Ekspresi ℓ + 4i − 3, ℓ + 4i − 2 dan ℓ + 4i − 1 masing-masing menyatakan place Hi , BHi dan Ki sehingga masing-masing harus diubah menjadi ℓ + 1, ℓ + 2 dan ℓ + 3 yang masing-masing menyatakan place H, BH dan K. Perubahan terakhir dilakukan pada semua pernyataan di baris 7. Ekspresi ℓ + 4i dan ℓ + 4i − 1 yang masing-masing menyatakan place BKi dan Ki diubah menjadi ℓ + 4 dan ℓ + 3 yang masing-masing menyatakan place BK dan K. 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 2 1 0 0 2 1 0 0 Ab = 0 5 0 0 0 5 0 0 0 0 2 1 0 0 2 1 0 0 0 3 0 0 0 3
(4.44)
Matriks backward incidence pada persamaan (4.44) diperoleh dari matriks backward incidence pada persamaan (4.21) dengan melakukan beberapa perubahan. Tujuan dilakukan perubahan adalah menyesuaikan dengan proses reduksi keadaan pada Petri net lampu lalulintas di persimpangan. Place M1 dan M2 tidak mengalami perubahan sehingga elemen pada baris pertama dan baris kedua tidak berubah. Ingat indeks place M1 dan M2 masing-masing adalah 1 dan 2. Perubahan dilakukan pada place H1 , BH1 , K1 , BK1 , H2 , BH2 , K2 , BK2 yang masing-masing mempunyai indeks 3 hingga 10. Pada proses reduksi keadaan, semua arc yang berasal dari place H1 atau H2 diganti arc yang berasal dari place H tanpa mengubah transisi tujuan dan bobot arc. Elemen tidak nol pada baris 3 dan baris 7 pada matriks backward incidence (4.21) masing-masing menyatakan arc yang berasal dari place H1 dan H2 . Transisi tujuan dan bobot arc masing-masing dinyatakan dengan posisi kolom dan nilai elemen pada matriks backward incidence. Dengan menggunakan keterangan sebelumnya maka proses reduksi keadaan pada Petri net ekivalen dengan memindahkan elemen pada baris 3 dan baris 7 pada persamaan (4.21) ke baris 3 tanpa mengubah posisi kolomnya. Jelas bahwa proses ini tidak mengubah nilai elemen. Proses yang serupa dilakukan untuk ketiga place yang lain yaitu BH, K dan BK. Hal yang perlu diperhatikan adalah indeks place yang sedang diproses. Hasil akhir matriks backward incidence setelah proses reduksi keadaan dapat 126
dilihat pada persamaan (4.44). Ukuran matriks backward incidence tergantung jumlah place dan transisi di Petri net. Jumlah place dan transisi di Petri net tergantung jumlah jalur di persimpangan. Jadi ukuran matriks backward incidence tergantung jumlah jalur di persimpangan. Oleh sebab itu bentuk umum matriks backward incidence dituliskan dalam bentuk algoritma. Input algoritma ini adalah jumlah jalur di persimpangan dan lama lampu lalulintas hijau dan kuning menyala pada setiap jalur. Output algoritma ini adalah matriks backward incidence yang berisi bobot arc dari place ke transisi. Algoritma 4.9 Backward Incidence Petri net Lampu Lalulintas Tereduksi Input: th, tk ∈ (N ∪ {0})ℓ , ℓ /* ℓ adalah jumlah jalur */ Output: Ab ∈ (N ∪ {0})(ℓ+4)×4ℓ /* matriks backward incidence */ 1 Ab ← [ones(ℓ, 4ℓ); zeros(4, 4ℓ)] /* inisialisasi */ 2 for i = 1 to ℓ do 3 Ab (ℓ + 1, 4i − 3) ← 2; Ab (ℓ + 1, 4i − 2) ← 1; Ab (ℓ + 3, 4i − 1) ← 2 4 Ab (ℓ + 3, 4i) ← 1; Ab (ℓ + 2, 4i − 2) ← thi − 1; Ab (ℓ + 4, 4i) ← tki − 1 5 Ab (i, 4i − 3 : 4i) ← zeros(1, 4) 6 end for Algoritma 4.9 diperoleh dari Algoritma 4.6 dengan melakukan beberapa perubahan. Perubahan ini menyesuaikan dengan proses reduksi keadaan pada Petri net. Hal pertama yang diubah adalah ukuran matriks backward incidence sehingga menjadi (ℓ + 4) × 4ℓ seperti terlihat pada baris 1. Secara umum proses reduksi keadaan dapat dijelaskan sebagai berikut. Semua arc yang berasal dari place Hi , BHi , Ki dan BKi dengan 1 ≤ i ≤ ℓ masing-masing diubah menjadi arc yang berasal dari place H, BH, K dan BK. Indeks dari place Hi , BHi , Ki dan BKi masing-masing adalah ℓ + 4i − 3, ℓ + 4i − 2, ℓ + 4i − 1 dan ℓ + 4i dengan 1 ≤ i ≤ ℓ. Indeks dari place H, BH, K dan BK setelah dilakukan reduksi keadaan masing-masing adalah ℓ + 1, ℓ + 2, ℓ + 3 dan ℓ + 4. Berdasarkan keterangan sebelumnya maka proses reduksi keadaan ekivalen dengan mengubah ekspresi ℓ + 4i − 3, ℓ + 4i − 2, ℓ + 4i − 1 dan ℓ + 4i masing-masing menjadi ℓ + 1, ℓ + 2, ℓ + 3 dan ℓ + 4. Algoritma membangun matriks combined incidence tidak dibahas karena matriks combined incidence diperoleh dari selisih matriks forward incidence dan backward incidence. Berikutnya dibahas analisis Petri net lampu lalulintas di persimpangan setelah dilakukan reduksi keadaan. Analisis Petri net dilakukan dengan menggunakan coverability tree. Pada bagian berikutnya dibahas proses membangun coverability tree Petri net di Gambar 4.15. 127
4.6.2
Coverability Tree
Cara yang digunakan untuk membangun coverability tree sama dengan sebelumnya. Langkah pertama yang dilakukan dalam membangun coverability tree adalah mendefinisikan keadaan awal sebagai node root. Pada keadaan awal Petri net terdapat 10 token pada place M2 dan 6 token pada place H sehingga vektor keadaan dapat ditulis [0, 10, 6, 0, 0, 0]T . Transisi yang enabled pada keadaan ini adalah hn1 . Dengan memfire transisi ini diperoleh [0, 9, 5, 1, 0, 0]T , [0, 8, 4, 2, 0, 0]T , [0, 7, 3, 3, 0, 0]T , [0, 6, 2, 4, 0, 0]T , [0, 5, 1, 5, 0, 0]T . Keadaan yang terakhir menyebabkan transisi hn1 tidak enabled karena jumlah token pada place H sebanyak satu. Transisi hk1 menjadi enabled karena terdapat sebuah token pada place H dan 5 token pada place BH. Pemfirean transisi hk1 menyebabkan token yang disimpan di place M2 menjadi 4, place H dan BH tidak mempunyai token dan place K mempunyai 4 token sehingga vektor keadaan dapat ditulis [0, 4, 0, 0, 4, 0]T . Pada keadaan ini transisi kn1 menjadi enabled. Dengan memfire transisi ini maka keadaan Petri net menjadi [0, 3, 0, 0, 3, 1]T , [0, 2, 0, 0, 2, 2]T , [0, 1, 0, 0, 1, 3]T . Pada keadaan ini transisi km1 berubah menjadi enabled. Dengan memfire transisi ini maka lampu lalulintas yang menyala pada jalur 1 berubah menjadi merah dan pada saat yang bersamaan lampu lalulintas yang menyala pada jalur 2 berubah menjadi hijau. Pemfirean transisi km1 menyebabkan keadaan Petri net menjadi [10, 0, 6, 0, 0, 0]T . Satu-satunya transisi yang enabled pada saat terdapat 10 token di place M1 dan 6 token pada place H yaitu keadaan [10, 0, 6, 0, 0, 0]T adalah transisi hn2 . Pemfirean transisi ini menyebabkan keadaan Petri net menjadi [9, 0, 5, 1, 0, 0]T , [8, 0, 4, 2, 0, 0]T , . . . , [6, 0, 2, 4, 0, 0]T , [5, 0, 1, 5, 0, 0]T . Pada keadaan ini transisi hn2 menjadi tidak enabled dan transisi hk2 berubah menjadi enabled. Pemfirean transisi hk2 mengubah keadaan menjadi [4, 0, 0, 0, 4, 0]T . Dengan memfire transisi kn2 maka keadaan berubah menjadi [3, 0, 0, 0, 3, 1]T , [2, 0, 0, 0, 2, 2]T , [1, 0, 0, 0, 1, 3]T . Transisi km2 menjadi enabled pada keadaan ini. Pemfirean transisi mengubah keadaan menjadi [0, 10, 6, 0, 0, 0]T . Perhatikan bahwa keadaan ini sama dengan keadaan awal Petri net sehingga proses membangun coverability tree telah selesai. Jumlah node pada coverability tree sebanyak 21. Jumlah keadaan yang berbeda di coverability tree sebanyak 20. Berdasarkan proses sebelumnya dapat disimpulkan bahwa untuk setiap keadaan terdapat sebuah transisi yang enabled. Kenyataan ini mengakibatkan setiap node pada coverability tree mempunyai 1 anak. 128
Perhatikan bahwa jumlah node pada coverability tree tidak berubah setelah dilakukan reduksi keadaan pada Petri net. Perubahan terjadi pada ukuran vektor keadaan yang menjadi lebih kecil dari sebelumnya. Sebelum dilakukan reduksi keadaan, vektor keadaan menyimpan 10 elemen dan setelah dilakukan reduksi keadaan elemen yang disimpan di vektor keadaan sebanyak 6. Vektor keadaan pada coverability tree dapat diperoleh dari vektor keadaan pada coverability tree sebelumnya dengan menghapus elemen yang bernilai nol. Elemen yang dihapus berada pada posisi ketiga hingga keenam yang menyatakan jalur 1 atau berada pada posisi ketujuh hingga kesepuluh yang menyatakan jalur 2. Tidak mungkin elemen ketiga hingga kesepuluh bernilai nol karena selalu ada lampu lalulintas hijau atau kuning yang menyala.
0 10 6 hn1 0 0 0
0 9 5 hn1 1 0 0
0 8 4 hn1 2 0 0
. . . kn2
2 0 0 kn2 0 2 2
1 0 0 km2 0 1 3
0 10 6 0 0 0
Gambar 4.16 Coverability Tree untuk Petri net di Gambar 4.15 Coverability tree yang lengkap sulit untuk ditampilkan karena coverability tree mempunyai 21 node dan setiap node dinyatakan dengan vektor keadaan yang mempunyai 6 elemen. Untuk itu pada Gambar 4.16 hanya ditampilkan sebagian node di coverability tree. Node yang terletak di paling kiri merupakan node root yang menyatakan keadaan awal Petri net. Berdasarkan keterangan sebelumnya maka satu-satunya transisi yang enabled pada keadaan ini adalah transisi hn1 . Dengan memfire transisi ini maka diperoleh keadaan yang berada di sebelah kanan dari node root. Kedua node dihubungkan dengan anak panah yang bertuliskan nama transisi yang difire yaitu hn1 . Proses ini dilakukan berulang-ulang hingga semua node diperoleh adalah node duplicate atau node terminal. Selanjutnya keadaan yang termuat di coverability tree akan dituliskan dengan menggunakan notasi himpunan. Hal ini dilakukan untuk mengetahui karakteristik keadaan yang dapat dicapai dari keadaan awal dan menyederhanakan penulisan terutama jika jumlah node di coverability tree sangat besar. Langkah pertama yang dilakukan adalah mencari pola vektor keadaan yang 129
termuat di coverability tree. Pola ini sulit ditemukan karena jumlah node yang besar dan bentuk vektor keadaan yang bervariasi. Untuk itu keadaan di coverability tree akan dikelompokkan berdasarkan lampu lalulintas hijau atau kuning yang menyala dan jalurnya. Persimpangan yang dibahas disini mempunyai 2 jalur sehingga keadaan di coverability tree dikelompokkan menjadi 4 himpunan yaitu Sh1 , Sh2 , Sk1 dan Sk2 . Notasi h dan k masing-masing menyatakan lampu lalulintas hijau dan kuning yang menyala. Indeks menyatakan jalur dimana lampu lalulintas hijau atau kuning menyala. Sebagai contoh Sh2 merupakan himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 2 dan Sk1 merupakan himpunan keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 1. Ketika lampu lalulintas hijau menyala pada jalur 1 maka place yang mungkin mempunyai token adalah M2 , H dan BH. Place yang lain tidak mungkin mempunyai token. Indeks masing-masing place yang mungkin mempunyai token adalah 2, 3 dan 4. Anggota himpunan Sh1 adalah vektor keadaan h1 (t) untuk t = 0, 1, . . . , 5. Variabel t berhubungan dengan lama lampu lalulintas hijau menyala. Ingat lampu lalulintas hijau menyala di jalur 1 selama 6 satuan waktu. Dengan menggunakan notasi himpunan maka Sh1 dapat di nyatakan sebagai Sh1 = h1 (t) : t = 0, . . . , 5 . Berikut merupakan bentuk keadaan h1 (t) 10 − t, untuk i = 2 6 − t, untuk i = 3 h1i (t) = (4.45) t, untuk i = 4 0, untuk i yang lain dengan i = 1, 2, . . . , 6 menyatakan indeks place di Petri net. Perhatikan bahwa nilai t yang semakin besar menyebabkan token pada place M2 dan H berkurang dan token pada place BH bertambah. Hal ini disebabkan place M2 dan H adalah place input dari transisi hn1 sedangkan place BH adalah place output dari transisi hn1 . Saat lampu lalulintas yang menyala pada jalur 1 berubah menjadi kuning maka place yang mungkin mempunyai token adalah M2 , K dan BK. Indeks dari ketiga place tersebut masing-masing adalah 2, 5 dan 6. Anggota himpunan Sk1 adalah vektor keadaan k1 (t) untuk t = 0, 1, . . . , 3. Variabel t terkait dengan lama lampu lalulintas kuning menyala. Ingat lampu lalulintas kuning di jalur 1 menyala selama 4 satuan waktu. Himpunan Sk1 dapat
130
dinyatakan dengan Sk1 = k1 (t) : t = 0, 1, . . . , 3 . Dengan menggunakan ke-
terangan sebelumnya maka keadaan k1 (t) dapat dinyatakan dalam persamaan berikut 4 − t, untuk i = 2 4 − t, untuk i = 5 ki1 (t) = (4.46) t, untuk i = 6 0, untuk i yang lain
dengan i = 1, 2, . . . , 6 menyatakan indeks vektor keadaan. Perhatikan bahwa jumlah token pada place M2 sama dengan K. Hal ini disebabkan lampu lalulintas kuning di jalur 1 dan lampu lalulintas merah di jalur 2 padam pada saat bersamaan. Selanjutnya dibahas bentuk keadaan yang menyatakan lampu lalulin-
tas hijau atau kuning menyala pada jalur 2. Pada saat lampu lalulintas hijau menyala pada jalur 2, place yang mungkin mempunyai token adalah M1 , H dan BH. Indeks masing-masing place tersebut adalah 1, 3 dan 4. Himpunan Sh2 dinyatakan dengan Sh2 = h2 (t) : t = 0, . . . , 5 . Ingat lampu lalulintas hijau menyala di jalur 2 selama 6 satuan waktu. Berikut merupakan bentuk keadaan h2 (t) dengan i = 1, 2, . . . , 6.
10 − t, 6 − t, h2i (t) = t, 0,
untuk i = 1 untuk i = 3 untuk i = 4 untuk i yang lain
(4.47)
Saat lampu lalulintas kuning menyala pada jalur 2 maka place yang mungkin mempunyai token adalah M1 , K dan BK. Indeks masing-masing place adalah 1, 5 dan 6. Himpunan Sk2 mempunyai anggota vektor keadaan yang di nyatakan dengan Sk2 = k2 (t) : t = 0, 1, . . . , 3 . Ingat lampu lalulintas kuning menyala di jalur 2 selama 4 satuan waktu. Keadaan k2 (t) dapat dinyatakan sebagai berikut dengan i = 1, 2, . . . , 6. 4 − t, 4 − t, ki2 (t) = t, 0,
untuk i = 1 untuk i = 5 untuk i = 6
(4.48)
untuk i yang lain
Selanjutnya dicari bentuk umum coverability tree untuk Petri net lampu lalulintas tereduksi. Langkah pertama yang dilakukan dalam memba131
ngun coverability tree adalah mendefinisikan keadaan awal sebagai node root. Jika x menyatakan keadaan awal Petri net maka berdasarkan Algoritma 4.7 untuk i = 1, 2, . . . , ℓ + 4 berlaku
xi =
P (thj + tkj ), untuk i = 2, 3, . . . , ℓ 1≤j
th1 , untuk i = ℓ + 1
(4.49)
0, untuk i yang lain
dengan thj dan tkj masing-masing menyatakan lama lampu lalulintas hijau dan kuning menyala pada jalur ke j dengan j = 1, 2, . . . , ℓ. Jika token yang disimpan pada place H pada saat awal lebih dari atau sama dengan 2 yaitu th1 ≥ 2 maka transisi hn1 enabled dan jika place H mempunyai sebuah token pada saat awal yaitu th1 = 1 maka transisi yang enabled adalah hk1 . Diasumsikan lama lampu lalulintas hijau menyala pada jalur 1 lebih dari atau sama dengan 2 satuan waktu sehingga th1 ≥ 2 yang menyebabkan transisi hn1 dapat difire. Dengan memfire transisi ini maka token pada place Mr dengan r = 2, 3, . . . , ℓ dan place H berkurang sedangkan token pada place BH bertambah. Indeks place H dan BH masing-masing adalah ℓ + 1 dan ℓ + 2. Jika Sh1 = h1 (t) : t = 0, . . . , th1 − 1 adalah himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 1 maka untuk i = 1, 2, . . . , ℓ + 4 berlaku P (thj + tkj ) − t, 1≤j
untuk i = 2, 3, . . . , ℓ untuk i = ℓ + 1 untuk i = ℓ + 2
(4.50)
untuk i yang lain
Transisi hn1 tidak enabled pada saat place H menyimpan sebuah token dan transisi hk1 menjadi enabled. Dengan memfire hk1 maka token pada place Mr dengan r = 2, 3, . . . , ℓ berkurang, token pada place H dan BH habis serta place K menerima token sebanyak tk1 yaitu lama lampu lalulintas kuning menyala pada jalur 1. Pada keadaan ini satu-satunya transisi yang enabled adalah transisi kn1 . Pemfirean transisi ini menyebabkan token pada place Mr dengan r = 2, 3, . . . , ℓ dan K berkurang sedangkan token pada place BK bertambah. Indeks place K dan BK masing-masing adalah ℓ + 3 dan ℓ + 4. Anggota himpunan Sk1 adalah keadaan yang menyatakan lampu lalulintas kuning menyala 132
pada jalur 1 yang ditulis Sk1 = k1 (t) : t = 0, 1, . . . , tk1 − 1 . Dengan meng-
gunakan keterangan sebelumnya maka keadaan k1 (t) dapat dinyatakan dalam persamaan berikut P tk1 + (thj + tkj ) − t, 1<j
untuk i = 2, 3, . . . , ℓ untuk i = ℓ + 3 untuk i = ℓ + 4
(4.51)
untuk i yang lain
dengan i = 1, 2, . . . , ℓ + 4. Keadaan yang menyatakan lampu lalulintas hijau atau kuning menyala pada jalur 1 telah dibahas. Selanjutnya dibahas keadaan yang menyatakan lampu lalulintas hijau atau kuning menyala pada jalur 2. Langkah-langkah yang dilakukan serupa dengan jalur 1 dengan ditambahkan beberapa penyesuaian. Penyesuaian pertama pada variabel yang menyatakan lama lampu lalulintas menyala. Hal lain yang perlu diperhatikan adalah indeks place yang mungkin mempunyai token. Jelas bahwa indeks place yang mungkin mempunyai token pada jalur 2 berbeda dengan indeks place yang mungkin mempunyai pada jalur 1 meskipun warna lampu lalulintas yang menyala sama (hijau atau kuning). Perhatikan ketika lampu lalulintas hijau atau kuning menyala pada jalur 1 maka lampu lalulintas merah pada jalur 1 tidak menyala. Kenyataan ini dapat disimpulkan dengan memperhatikan bahwa elemen pertama dari vektor keadaan selalu bernilai nol pada pembahasan sebelumnya. Hal ini juga harus disesuaikan yaitu ketika lampu lalulintas hijau atau kuning menyala pada jalur 2 maka lampu lalulintas merah pada jalur 2 tidak menyala dengan memberikan nilai nol pada elemen kedua dari vektor keadaan. Ketika lampu lalulintas hijau menyala pada jalur 2 maka place yang mungkin mempunyai token adalah M1 , M3 , M4 , . . . , Mℓ , H dan BH. Place yang lain tidak mungkin mempunyai token. Indeks place yang mungkin mempunyai token masing-masing adalah 1, 3, 4, . . . , ℓ, ℓ + 1 dan ℓ + 2. Misal Sh2 adalah himpunan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 2. Anggota himpunan Sh2 adalah keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 2 yang dinotasikan h2 (t) untuk t = 0, 1, . . . , th2 − 1. Variabel t berhubungan dengan lama lampu lalulintas hijau menyala. Ingat lampu lalulintas hijau menyala di jalur 2 selama th2 satuan waktu. Himpunan 133
Sh2 dapat dinyatakan dengan Sh2 = h2 (t) : t = 0, 1, . . . , th2 − 1 . Dengan menggunakan keterangan sebelumnya maka keadaan h2 (t) dapat dituliskan dalam persamaan berikut
h2i (t) =
P (thj + tkj ) − t, untuk i = 1 2≤j≤ℓ P (thj + tkj ) − t, untuk i = 3, 4, . . . , ℓ 2≤j
th2 − t, untuk i = ℓ + 1 t, untuk i = ℓ + 2 0, untuk i yang lain
(4.52)
dengan i = 1, 2, . . . , ℓ + 4. Perhatikan bahwa terdapat kasus tambahan pada definisi h2 (t) yaitu pada saat i = 1. Ingat elemen pertama dari vektor keadaan menyatakan jumlah token pada place M1 . Lampu lalulintas merah menyala di jalur 1 selama lampu lalulintas hijau atau kuning menyala di jalur 2, 3, . . . , ℓ sehingga token pada place M1 merupakan jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Himpunan Sk2 = k2 (t) : t = 0, 1, . . . , tk2 − 1 beranggotakan keadaan yang menyatakan lampu lalulintas kuning menyala pada jalur 2. Definisi keadaan k2 (t) dapat dituliskan sebagai berikut untuk i = 1, 2, . . . , ℓ + 4.
ki2 (t) =
P tk2 + (thj + tkj ) − t, untuk i = 1 2<j≤ℓ P (thj + tkj ) − t, untuk i = 3, 4, . . . , ℓ tk2 + 2<j
tk2 − t, untuk i = ℓ + 3 t, untuk i = ℓ + 4 0, untuk i yang lain
(4.53)
Selanjutnya dibahas keadaan Petri net yang menyatakan lampu lalulintas hijau atau kuning menyala pada jalur 3. Diharapkan bentuk vektor keadaan pada jalur 1, 2 dan 3 dapat digunakan sebagai dasar untuk menyusun bentuk umum vektor keadaan untuk semua jalur di persimpangan. Keadaan Petri net yang menyatakan lampu lalulintas hijau menyala pada jalur 3 dibahas terlebih dahulu. Pada saat lampu lalulintas hijau menyala di jalur 3 maka place yang mungkin mempunyai token adalah M1 , M2, M4 , . . . , Mℓ , H dan BH. Indeks setiap place adalah 1, 2, 4, . . . , ℓ, ℓ + 1 dan ℓ + 2. Misalkan Sh3 merupakan him134
punan keadaan yang menyatakan lampu lalulintas hijau menyala pada jalur 3 yang ditulis Sh3 = h3 (t) : t = 0, 1, . . . , th3 − 1 . Bentuk vektor keadaan h3 (t) dapat dituliskan sebagai berikut
h3i (t)
=
P
(thj + tkj ) − t, untuk i = 1, 2
(j
P
(thj + tkj ) − t, untuk i = 4, 5, . . . , ℓ
3≤j
th3 − t, untuk i = ℓ + 1 t, untuk i = ℓ + 2
(4.54)
0, untuk i yang lain
dengan i = 1, 2, . . . , ℓ + 4. Ekspresi jumlahan yang memuat (j < i) ∨ (j ≥ 3) dilakukan pada saat i bernilai 1 atau 2. Hal ini dapat dijelaskan dengan mengambil contoh untuk i = 2 yaitu lama lampu lalulintas merah menyala pada jalur 2. Lama lampu lalulintas merah menyala pada jalur 2 diperoleh dari jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Perhatikan bahwa pada saat t = 0 lampu lalulintas merah pada jalur 2 baru saja menyala. Ekspresi (j < i) ∨ (j ≥ 3) dan (1 ≤ j < i) ∨ (3 ≤ j ≤ ℓ) adalah ekivalen.
ki3 (t) =
P tk3 + (thj + tkj ) − t, untuk i = 1, 2 (j3) P tk3 + (thj + tkj ) − t, untuk i = 4, 5, . . . , ℓ 3<j
tk3 − t, untuk i = ℓ + 3 t, untuk i = ℓ + 4
(4.55)
0, untuk i yang lain
Misalkan Sk3 adalah himpunan keadaan yang menyatakan lampu la lulintas kuning menyala di jalur 3 yaitu Sk3 = k3 (t) : t = 0, 1, . . . , tk3 − 1 dan i menyatakan indeks place. Bentuk vektor keadaan k3 (t) dapat dinyatakan dalam persamaan (4.55) untuk i = 1, 2, . . . , ℓ + 4. P Jumlah node pada coverability tree adalah 1 + ℓr=1 (thr + tkr ) yaitu jumlahan lama lampu lalulintas hijau dan kuning untuk semua jalur ditambah satu. Penambahan satu node ini merupakan node duplicate dari node root. Berikutnya disusun bentuk umum keadaan yang berada di coverability tree. Misalkan S adalah himpunan keadaan di coverability tree. Dengan meng gunakan keterangan sebelumnya ditulis S = Sh ∪ Sk dengan Sh = ∪ℓr=1 Shr dan Sk = ∪ℓr=1 Skr . Himpunan Sh = {hr (tr ) : 0 ≤ tr < thr , 1 ≤ r ≤ ℓ} ber135
anggotakan keadaan yang menyatakan terdapat lampu lalulintas hijau yang menyala. Variabel r menyatakan jalur yang dilayani sehingga r = 1, 2, . . . , ℓ. Berikut merupakan bentuk umum keadaan hr (tr )
hri (tr )
=
P
(thj + tkj ) − tr , untuk 1 ≤ i < r
(j
P
(thj + tkj ) − tr , untuk r < i ≤ ℓ
r≤j
thr − tr , untuk i = ℓ + 1 tr , untuk i = ℓ + 2
(4.56)
0, untuk i yang lain
dengan i = 1, 2, . . . , ℓ + 4. Anggota himpunan Sk = {kr (tr ) : 0 ≤ tr < tkr , 1 ≤ r ≤ ℓ} adalah keadaan yang menyatakan terdapat lampu lalulintas kuning yang menyala. Berikut merupakan bentuk dari vektor keadaan kr (tr ) dengan i = 1, 2, . . . , ℓ + 4.
kir (tr ) =
P tk + (thj + tkj ) − tr , untuk 1 ≤ i < r r (jr) P tkr + (thj + tkj ) − tr , untuk r < i ≤ ℓ r<j
tkr − tr , untuk i = ℓ + 3
(4.57)
tr , untuk i = ℓ + 4 0, untuk i yang lain
Dengan memperhatikan persamaan (4.56) dan (4.57) dapat disimpulkan bahwa secara umum banyak keadaan yang berbeda pada coverability tree Pℓ adalah r=1 (thr + tkr ). Terdapat dua node coverability tree yang menyatakan keadaan awal sehingga jumlah node pada coverability tree sebanyak P 1 + ℓr=1 (thr + tkr ). Perhatikan bahwa tidak ada keadaan di coverability tree yang mempunyai notasi ω sehingga Petri net lampu lalulintas tereduksi bersifat terbatas (bounded ). Coverability tree yang diperoleh juga disebut reachability tree karena tree ini secara eksplisit memuat semua keadaan yang mungkin dicapai dari keadaan awal. Selanjutnya ditentukan batas atas setiap place di Petri net. Batas atas setiap place pada Petri net di Gambar 4.15 dapat diperoleh dengan memperhatikan persamaan (4.45), (4.46), (4.47) dan (4.48). Jumlah token maksimum pada place M1 dan M2 masing-masing adalah 10 yang terlihat pada persamaan (4.47) dan (4.45) pada saat variabel t bernilai 0. Cara yang sama dapat digunakan untuk mendapatkan batas atas semua place. 136
Batas atas Petri net dapat dinyatakan sebagai keadaan xb seperti telah dijelaskan pada bab sebelumnya saat membahas keterbatasan (boundedness). Keadaan yang menyatakan batas atas Petri net di Gambar 4.15 adalah [10, 10, 6, 5, 4, 3]T . Perhatikan bahwa batas atas dari place M1 dan M2 masingmasing adalah jumlahan lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Jumlah token maksimum pada place H dan K merupakan maksimum lama masing-masing lampu lalulintas menyala untuk semua jalur. Batas atas untuk place ‘buffer ’ yaitu BH dan BK merupakan maksimum lama masing-masing lampu lalulintas menyala untuk setiap jalur dikurangi satu. Hasil yang diperoleh pada contoh ini dapat digunakan sebagai acuan untuk memperoleh bentuk umum batas atas place di Petri net lampu lalulintas di persimpangan. Bentuk umum keadaan xb dapat dinyatakan dalam persamaan berikut P j6=i (thj + tkj ), untuk i = 1, 2, . . . , ℓ max{thj : 1 ≤ j ≤ ℓ}, untuk i = ℓ + 1 xbi = (4.58) max{thj : 1 ≤ j ≤ ℓ} − 1, untuk i = ℓ + 2 max{tkj : 1 ≤ j ≤ ℓ}, untuk i = ℓ + 3 max{tkj : 1 ≤ j ≤ ℓ} − 1, untuk i = ℓ + 4 dengan i = 1, 2, . . . , ℓ + 4.
Pada bagian selanjutnya dibahas sifat konservasi Petri net lampu lalulintas di persimpangan setelah dilakukan proses reduksi keadaan. Pengujian sifat konservasi menggunakan coverability tree yang telah dibangun dan dibahas pada bagian ini. 4.6.3
Konservasi
Pada bagian ini dibahas sifat konservasi untuk Petri net yang terdapat pada Gambar 4.15. Pengujian sifat konservasi dilakukan dengan membangun sistem persamaan linier terlebih dahulu. Setiap persamaan menyatakan suatu keadaan di coverability tree sehingga jumlah persamaan sama dengan jumlah keadaan di coverability tree yaitu 20. Jumlah variabel satu lebih banyak dibandingkan jumlah place di Petri net yaitu 7. Notasi yang digunakan untuk menyatakan variabel sama dengan notasi yang digunakan pada bagian sebelumnya yaitu γ1 , γ2 , . . . , γ6 , C. Sistem persamaan linier (4.59) diperoleh dengan mengevaluasi persamaan (4.45) untuk t = 0, 1, . . . , 5. Perhatikan bahwa sistem persamaan linier 137
yang diperoleh sama dengan sistem persamaan linier sebelum dilakukan proses reduksi keadaaan pada Petri net. 10 γ2 + 6 γ3 = C 9 γ2 + 5 γ3 + γ4 = C 8 γ2 + 4 γ3 + 2 γ4 = C 7 γ2 + 3 γ3 + 3 γ4 = C
(4.59)
6 γ2 + 2 γ3 + 4 γ4 = C 5 γ2 + γ3 + 5 γ4 = C Nilai elemen dan posisi elemen pada vektor keadaan masing-masing menyatakan konstanta dan variabel pada sistem persamaan linier. Kenyataan ini dapat digunakan sebagai pedoman untuk menuliskan keenam persamaan pada (4.59) sebagai berikut. (10 − h1 )γ2 + (6 − h1 )γ3 + h1 γ4 = C
(4.60)
dengan h1 = 0, 1, . . . , 5. Cara yang sama dapat digunakan untuk mendapatkan bentuk sistem persamaan linier untuk keadaan yang lain. Bentuk berikut diperoleh dari persamaan (4.46), (4.47) dan (4.48). (4 − k1 )γ2 + (4 − k1 )γ5 + k1 γ6 = C
dengan k1 = 0, 1, . . . , 3
(10 − h2 )γ1 + (6 − h2 )γ3 + h2 γ4 = C
dengan h2 = 0, 1, . . . , 5
(4 − k2 )γ1 + (4 − k2 )γ5 + k2 γ6 = C
dengan k2 = 0, 1, . . . , 3
(4.61)
Perhatikan bahwa persamaan (4.60) dan persamaan pertama pada sistem persamaan linier (4.61) masing-masing sama dengan persamaan (4.37) dan persamaan pertama pada sistem persamaan linier (4.38). Persamaan kedua dan ketiga pada sistem persamaan linier (4.61) diperoleh dari persamaan kedua dan ketiga pada sistem persamaan linier (4.38) dengan menggantikan variabel γ7 , γ8 , γ9 dan γ10 masing-masing dengan variabel γ3 , γ4, γ5 dan γ6 . Perhatikan persamaan yang menyatakan lampu lalulintas hijau menyala pada jalur 1 dan jalur 2. Kedua persamaan dapat ditulis menjadi sebuah persamaan dengan menambahkan variabel r yang menyatakan jalur. Sebelum itu dibahas bagaimana mendapatkan konstanta 10 dan 6 pada kedua persamaan tersebut dari input yang diberikan. Input yang diberikan adalah lama lampu lalulintas hijau dan kuning menyala pada jalur 1 dan jalur 2. Ingat 138
bahwa lampu lalulintas hijau dan kuning masing-masing menyala selama 6 dan 4 satuan waktu pada jalur 1 dan jalur 2 sehingga th1 = 6 = th2 dan tk1 = 4 = tk2 . Konstanta 10 pada jalur 1 diperoleh dari th1 +tk1 sedangkan konstanta 10 pada jalur 2 diperoleh dari th2 + tk2 yang terlihat pada persamaan (4.56). Dengan menggunakan cara yang sama dapat disimpulkan konstanta 6 pada jalur 1 diperoleh dari th1 dan konstanta 6 pada jalur 2 diperoleh dari th2 . Persamaan berikut menyatakan terdapat lampu lalulintas hijau yang menyala. (10 − hr )γ2−r+1 + (6 − hr )γ3 + hr γ4 = C
(4.62)
dengan 0 ≤ hr < thr dan r = 1, 2. Perhatikan bahwa indeks 3 dan 4 diperoleh dari persamaan (4.56) dengan menggunakan ℓ = 2. Selanjutnya dibahas persamaan yang menyatakan lampu lalulintas kuning menyala pada jalur 1 dan jalur 2. Terlihat pada persamaan (4.61) bahwa semua konstanta bernilai sama. Konstanta 4 pada jalur 1 diperoleh dari tk1 sedangkan konstanta 4 pada jalur 2 diperoleh dari tk2 . Persamaan (4.57) dapat digunakan sebagai pedoman untuk menentukan persamaan yang menyatakan terdapat lampu lalulintas kuning yang menyala. Variabel ℓ diberikan nilai 2 karena persimpangan mempunyai dua jalur. (4 − kr )γ2−r+1 + (4 − kr )γ5 + kr γ6 = C
(4.63)
dengan 0 ≤ kr < tkr dan r = 1, 2. Persamaan (4.62) dan (4.63) berlaku untuk persimpangan yang mempunyai dua jalur dengan lama lampu lalulintas hijau dan kuning masingmasing menyala selama 6 dan 4 satuan waktu. Kedua persamaan tersebut dapat diubah agar berlaku untuk lama lampu lalulintas menyala sebarang. Perubahan yang dilakukan berdasarkan keterangan yang telah dibahas sebelumnya. Dengan menggunakan variabel th1 , th2 , tk1 , tk2 untuk menyatakan lama masing-masing lampu lalulintas menyala pada setiap jalur maka persamaan (4.62) dan (4.63) dapat dinyatakan sebagai. ((thr + tkr ) − hr )γ2−r+1 + (thr − hr )γ3 + hr γ4 = C (tkr − kr )γ2−r+1 + (tkr − kr )γ5 + kr γ6 = C
(4.64)
dengan 0 ≤ hr < thr dan r = 1, 2. Perhatikan bahwa (thr + tkr ) − hr , thr −hr dan hr serupa dengan persamaan (4.56) jika variabel hr diganti dengan 139
tr . Ekspresi (tkr − kr ) dan kr juga serupa dengan persamaan (4.57) dengan mengganti variabel kr menjadi tr . Selanjutnya disusun bentuk umum sistem persamaan linier yang diperoleh jika jalur pada persimpangan berjumlah sebarang. Bentuk umum sistem persamaan linier diperoleh dari persamaan (4.56) dan (4.57) yang telah dibahas pada saat menurunkan persamaan (4.64). Ingat letak elemen dan nilai elemen pada vektor keadaan masing-masing menentukan variabel dan konstanta pada sistem persamaan linier. Secara umum sistem persamaan linier yang terbentuk dapat dituliskan sebagai berikut. ℓ+4 X
hri (thr )
ℓ+4 X
γi = C,
kir (tkr ) γi = C
(4.65)
i=1
i=1
dengan 0 ≤ thr < thr , 0 ≤ tkr < tkr dan 1 ≤ r ≤ ℓ. Perhatikan bahwa sistem persamaan linier (4.65) dapat diperoleh dari sistem persamaan linier (4.42) dengan mengganti ekspresi 5ℓ menjadi ℓ + 4. Perubahan ini berkaitan dengan jumlah place pada Petri net. P Sistem persamaan linier (4.65) mempunyai ℓr=1 (thr +tkr ) persamaan dan ℓ + 5 variabel. Jelas bahwa terdapat penyelesaian tidak trivial jika jumlah persamaan kurang dari jumlah variabel. Jika terdapat penyelesaian tidak trivial maka Petri net memenuhi sifat konservasi. Jadi sifat konservasi dipenuhi P jika berlaku ℓr=1 (thr + tkr ) < ℓ + 5 dengan ℓ menyatakan jumlah jalur di
persimpangan. Semua Petri net yang dibahas hingga bagian ini digunakan untuk mensimulasikan lampu lalulintas dengan berbagai variasinya. Pada bagian berikutnya dibahas desain algoritma untuk mensimulasikan jumlah pengguna di persimpangan pada setiap waktu.
4.7
Simulasi Jumlah Pengguna di Persimpangan
Ada beberapa faktor yang harus diperhitungkan dalam mensimulasikan jumlah pengguna di persimpangan. Pertama adalah urutan jalur yang dilayani sudah ditetapkan sebelumnya. Penetapan ini dilakukan dengan tujuan tidak membingungkan pengguna jalan. Selain itu diasumsikan pada setiap jalur terdapat sebuah lampu lalulintas yang menyala disertai ‘bilangan’ yang menunjukkan sisa waktu lampu lalulintas menyala. Berdasarkan keterangan sebelumnya maka pada setiap jalur terdapat satu lampu lalulintas yang me140
nyala setiap waktu sehingga dibutuhkan sebuah ‘bilangan’ untuk setiap jalur. ‘Bilangan’ ini digunakan secara bergantian oleh masing-masing lampu lalulintas. Asumsi yang digunakan sebelumnya merupakan batasan dalam mensimulasikan jumlah pengguna di persimpangan. Jumlah pengguna yang melewati persimpangan pada saat lampu lalulintas hijau menyala lebih besar dibandingkan pada saat lampu lalulintas kuning menyala. Hal ini disebabkan lampu lalulintas kuning menyatakan pelayanan pada jalur tersebut segera berakhir. Pada saat lampu lalulintas hijau baru saja menyala, jumlah pengguna yang melewati persimpangan sedikit karena sebelumnya pengguna dalam keadaan berhenti. Pada simulasi ini diusahakan untuk memperkecil frekuensi pergantian jalur yang dilayani. Pada setiap jalur diberikan maksimum lama lampu lalulintas hijau dan kuning menyala. Lama maksimum lampu lalulintas kuning menyala dapat diberikan nilai yang sama untuk semua jalur. Lama maksimum lampu lalulintas hijau menyala menunjukkan perkiraan tingkat kepadatan pada masing-masing jalur. Semakin tinggi tingkat kepadatan pada suatu jalur maka maksimum lama lampu lalulintas hijau pada jalur tersebut semakin besar. Penentuan lama lampu lalulintas hijau atau kuning menyala pada suatu jalur tergantung perkiraan waktu yang dibutuhkan untuk melayani semua pengguna yang saat itu berada pada jalur tersebut. Jika waktu yang dibutuhkan melebihi maksimum lama lampu lalulintas menyala maka lama lampu lalulintas menyala adalah maksimum lamanya. Jadi lama lampu lalulintas menyala adalah minimum perkiraan waktu yang dibutuhkan untuk melayani semua pengguna saat itu dan maksimum lamanya. Permasalahan berikutnya adalah saat penentuan lama lampu lalulintas hijau dan kuning menyala. Jelas bahwa lama lampu lalulintas hijau dan kuning menyala tergantung jumlah pengguna. Penentuan lama lampu lalulintas hijau dan kuning menyala dapat dilakukan pada saat lampu lalulintas akan menyala. Ingat lama lampu lalulintas merah menyala tergantung lama lampu lalulintas hijau dan kuning menyala pada jalur yang lain. Dengan menggunakan pendekatan ini maka lama lampu lalulintas merah menyala tidak dapat dihitung. Hal ini disebabkan tidak tersedia lama lampu lalulintas hijau dan kuning menyala pada semua jalur. Oleh sebab itu penetapan lama lampu lalulintas hijau dan kuning menyala di suatu jalur dilakukan pada saat lampu lalulintas yang menyala di jalur tersebut akan berganti ke merah. Ingat lama lampu lalulintas hijau dan kuning menyala tergantung jumlah pengguna. Jelas bahwa jumlah pengguna belum diketahui pada saat mene141
tapkan lama lampu lalulintas hijau dan kuning menyala sehingga lama kedua lampu lalulintas menyala belum bisa dihitung. Lama lampu lalulintas hijau dan kuning menyala dapat dihitung dengan menggunakan perkiraan jumlah pengguna pada saat lampu lalulintas hijau atau kuning akan menyala. Simulasi jumlah pengguna di persimpangan membutuhkan data kedatangan dan keberangkatan setiap jalur pada setiap waktu. Jika simulasi tidak dilakukan dalam waktu yang lama, data ini dapat diinputkan secara manual. Jika simulasi dilakukan dalam waktu yang lama, tidak realistis untuk menginputkan data ini secara manual. Ingat jumlah kedatangan dan keberangkatan pada setiap jalur secara umum tidak sama untuk setiap waktu. Pada penelitian ini jumlah keberangkatan pada setiap waktu dianggap mendekati konstan sehingga jumlah pengguna yang dilayani berdistribusi normal dengan mean µ dan varian σ 2 . Mean menyatakan perkiraan jumlah pengguna yang terlayani dan varian menyatakan tingkat akurasi dari perkiraan. Diharapkan dengan menggunakan pendekatan ini, jumlah keberangkatan yang diperoleh mendekati kenyataan. Pada penelitian ini dibahas dua pendekatan untuk menyatakan kedatangan pengguna. Pendekatan yang pertama menggunakan distribusi normal dan pendekatan yang kedua menggunakan distribusi uniform diskrit.
4.7.1
Kedatangan Berdistribusi Normal
Pada pendekatan ini jumlah pengguna yang datang pada setiap waktu dianggap mendekati nilai tertentu. Nilai ini menyatakan mean yang disimbolkan dengan µ. Varian menyatakan tingkat keberagaman data yang disimbolkan dengan σ 2 . Semakin besar nilai varian maka jumlah pengguna yang datang semakin bervariasi dan semakin kecil nilai varian menyebabkan jumlah pengguna yang datang semakin mendekati nilai mean. Pada kajian sebelumnya telah dibahas lama lampu lalulintas hijau atau kuning menyala tergantung jumlah pengguna pada saat itu. Berdasarkan keterangan pada paragraf sebelumnya maka jumlah keberangkatan pengguna pada setiap waktu merupakan bilangan random berdistribusi normal. Waktu yang dibutuhkan untuk melayani semua pengguna diperoleh dari jumlah pengguna dibagi mean keberangkatan. Mean kedatangan digunakan untuk memperkirakan jumlah pengguna pada waktu yang akan datang. Nilai mean dipilih karena mempunyai peluang paling besar jika dibandingkan dengan nilai yang lain pada distribusi normal. 142
Selanjutnya akan disusun algoritma simulasi jumlah pengguna di persimpangan. Sebelum itu akan dibahas notasi-notasi yang digunakan di algoritma. Notasi ℓ menyatakan jumlah jalur pada persimpangan. Jelas bahwa ℓ merupakan bilangan asli sehingga dapat ditulis ℓ ∈ N. Notasi N(µ, σ 2 ) menyatakan bilangan random berdistribusi normal dengan mean µ dan varian σ 2 . Variabel x menyatakan jumlah pengguna di setiap jalur untuk setiap waktu. Jelas bahwa variabel x merupakan matriks dengan baris menyatakan jalur dan kolom menyatakan waktu. Jumlah baris matriks x sama dengan jumlah jalur di persimpangan yaitu ℓ. Pada permasalahan ini elemen dari x merupakan bilangan bulat taknegatif karena menyatakan jumlah pengguna di suatu jalur pada saat tertentu. Data mean kedatangan dan keberangkatan disimpan dalam variabel µ yang bertipe matriks. Data varian kedatangan dan keberangkatan disimpan dalam variabel σ 2 yang bertipe matriks. Elemen matriks µ dan σ 2 merupakan bilangan real positif. Variabel wkt menyimpan lama lampu lalulintas hijau dan kuning menyala pada setiap jalur. Elemen matriks wkt merupakan bilangan bulat taknegatif. Variabel maks menyimpan maksimum lama lampu lalulintas hijau dan kuning menyala pada setiap jalur. Elemen matriks maks sama dengan wkt yaitu bilangan bulat taknegatif. Baris pada matriks µ, σ 2 , wkt, maks menyatakan jalur sehingga jumlah baris pada keempat matriks tersebut sama dengan jumlah jalur di persimpangan. Kolom pertama matriks µ dan σ 2 masing-masing menyimpan mean dan varian kedatangan. Kolom kedua dari matriks µ dan σ 2 masing-masing menyimpan mean dan varian keberangkatan saat lampu lalulintas hijau menyala. Kolom ketiga dari matriks µ dan σ 2 masing-masing menyimpan mean dan varian keberangkatan saat lampu lalulintas kuning menyala. Kolom pertama dan kedua dari matriks wkt masing-masing menyimpan lama lampu lalulintas hijau dan kuning menyala pada setiap jalur. Kolom pertama dan kedua dari matriks maks masing-masing menyimpan maksimum lama lampu lalulintas hijau dan kuning menyala pada setiap jalur. Lama simulasi dinyatakan dengan variabel T . Pada penelitian ini lama simulasi merupakan bilangan bulat taknegatif. Berikut dituliskan nama variabel yang digunakan di algoritma simulasi pengguna di persimpangan disertai dengan keterangan singkat yang menjelaskan kegunaan variabel tersebut. Daftar nama variabel ini merupakan ringkasan dari pembahasan sebelumnya. Diharapkan dengan menggunakan daftar ini maka algoritma simulasi jumlah pengguna lebih cepat dipahami. 143
x(:, t)
jumlah pengguna pada waktu ke t
µ(:, 1) mean kedatangan µ(:, 2) mean keberangkatan saat lampu lalulintas hijau menyala µ(:, 3) mean keberangkatan saat lampu lalulintas kuning menyala σ 2 (:, 1) varian kedatangan σ 2 (:, 2) varian keberangkatan saat lampu lalulintas hijau menyala σ 2 (:, 3) varian keberangkatan saat lampu lalulintas kuning menyala wkt(:, 1) lama lampu lalulintas hijau menyala wkt(:, 2) lama lampu lalulintas kuning menyala maks(:, 1) maksimum lama lampu lalulintas hijau menyala maks(:, 2) maksimum lama lampu lalulintas kuning menyala T
lama simulasi
Selanjutnya didesain algoritma untuk mensimulasikan jumlah pengguna setiap jalur di persimpangan pada setiap waktu. Urutan jalur yang dilayani pada setiap periode adalah tetap dengan asumsi pelayanan dimulai dari jalur yang mempunyai indeks kecil. Berdasarkan keterangan sebelumnya maka lampu lalulintas hijau menyala di jalur 1 dan lampu lalulintas merah menyala di jalur yang lain pada kondisi awal. Pada tahap inisialisasi dihitung lama lampu lalulintas hijau menyala pada jalur 1 dan lama lampu lalulintas merah menyala pada jalur yang lain. Hasil dari proses ini ditampilkan kepada pengguna di setiap jalur agar mengetahui perkiraan lama suatu lampu lalulintas menyala. Ada beberapa input yang dibutuhkan untuk algoritma tahap inisialisasi. Input pertama adalah jumlah pengguna setiap jalur di persimpangan pada kondisi awal yang dinotasikan dengan x. Variabel ini merupakan vektor dengan elemen sebanyak jumlah jalur di persimpangan yaitu ℓ. Jelas bahwa elemen dari x adalah bilangan bulat taknegatif. Selain jumlah pengguna, mean kedatangan dan keberangkatan pada setiap jalur juga dibutuhkan sebagai input algoritma tahap inisialisasi. Nilai mean digunakan untuk memperkirakan jumlah pengguna pada saat terjadi pergantian lampu lalulintas yang menyala. Selain itu nilai mean juga digunakan untuk menghitung waktu yang dibutuhkan agar semua pengguna pada suatu jalur terlayani. Lama lampu lalulintas menyala merupakan minimum dari waktu yang dibutuhkan untuk melayani semua pengguna dan maksimum lama lampu lalulintas menyala sehingga input berikutnya adalah maksimum lama lampu lalulintas hijau dan kuning menyala pada setiap jalur di persimpangan. 144
Pengguna yang menunggu di jalur 1 pada kondisi awal sebanyak x1 dan mean keberangkatan saat lampu lalulintas hijau menyala adalah µ(1, 2) sehingga waktu yang dibutuhkan untuk melayani semua pengguna di jalur ini selama ⌈x1 /µ(1, 2)⌉ satuan waktu. Ekspresi ⌈x1 /µ(1, 2)⌉ dapat ditulis xpreh1 /µ(1, 2) dengan xpreh1 menyatakan perkiraan banyak pengguna di jalur 1 saat lampu lalulintas hijau akan menyala. Lama lampu lalulintas hijau menyala merupakan minimum dari waktu yang dibutuhkan untuk melayani semua pengguna dan maksimum lama lampu lalulintas hijau menyala di jalur 1 yang dinyatakan dengan maks(1, 1). Ingat lampu lalulintas hijau menyala paling tidak selama 1 satuan waktu. Hal ini berguna untuk menghindari terjadinya deadlock ketika tidak ada pengguna pada semua jalur di persimpangan. Notasi yang menyatakan lama lampu lalulintas hijau menyala pada jalur 1 di Algoritma 4.10 adalah wkt(1, 1). Berdasarkan keterangan sebelumnya maka wkt(1, 1) diperoleh dari min max xpreh1 /µ(1, 2) , 1 , maks(1, 1) . Selanjutnya dihitung lama lampu lalulintas kuning menyala pada jalur 1 yang dinotasikan dengan wkt(1, 2) di Algoritma 4.10. Lama lampu lalulintas kuning menyala merupakan minimum dari waktu yang dibutuhkan untuk melayani semua pengguna dan maksimum lama lampu lalulintas kuning menyala. Waktu yang dibutuhkan untuk melayani semua pengguna tergantung banyak pengguna saat pergantian lampu lalulintas yang menyala. Perkiraan banyak pengguna saat lampu lalulintas kuning baru menyala diperoleh dari xpreh1 + (µ(1, 1) − µ(1, 2))wkt(1, 1) yaitu banyak pengguna pada kondisi awal ditambah selisih antara mean kedatangan dan mean keberangkatan saat lampu lalulintas hijau menyala dikalikan lama lampu lalulintas hijau menyala. Ekspresi sebelumnya dapat ditulis xprek1 yang menyatakan perkiraan banyak pengguna di jalur 1 saat lampu lalulintas kuning akan menyala. Waktu yang dibutuhkan untuk melayani pengguna di jalur 1 selama xprek1 /µ(1, 3) satuan waktu. Lama maksimum lampu lalulintas kuning menyala dinotasikan dengan maks(1, 2). Ingat lampu lalulintas kuning menyala paling tidak selama 1 satuan waktu dengan menggunakan alasan yang sama seperti sebelumnya. Berdasarkan keterangan sebelumnya maka lampu lalulintas kuning menyala di jalur 1 selama min max xprek1 /µ(1, 3) , 1 , maks(1, 2) satuan waktu. Lama lampu lalulintas hijau menyala di jalur 2 tergantung waktu yang dibutuhkan untuk melayani semua pengguna di jalur 1 dan maksimum lama lampu lalulintas hijau menyala. Waktu yang dibutuhkan untuk melayani semua pengguna pada jalur 2 tergantung banyak pengguna saat lampu lalulintas hijau akan menyala di jalur 2. Perkiraan banyak pengguna yang menunggu di 145
jalur 2 sebanyak pengguna pada kondisi awal ditambah dengan pengguna yang datang pada saat lampu lalulintas hijau dan kuning menyala pada jalur 1 yang ditulis x2 + (wkt(1, 1) + wkt(1, 2))µ(2, 1). Ekspresi sebelumnya dinyatakan dengan xpreh2 agar penulisan lebih sederhana. Waktu yang dibutuhkan untuk melayani pengguna di jalur 2 diperoleh dari banyak pengguna dibagi mean keberangkatan yaitu selama xpreh2 /µ(2, 2) satuan waktu. Dengan menggu-
nakan keterangan sebelumnya maka lampu lalulintas hijau menyala di jalur 2 selama min max xpreh2 /µ(2, 2) , 1 , maks(2, 1) satuan waktu.
Pada bagian ini ditentukan lama lampu lalulintas kuning menyala pada jalur 2. Pada Algoritma 4.10 notasi yang digunakan adalah wkt(1, 2). Lama lampu lalulintas kuning menyala di jalur 2 merupakan minimum dari waktu yang dibutuhkan untuk melayani semua pengguna di jalur ini dan maksimum lama lampu lalulintas kuning menyala. Waktu yang dibutuhkan untuk melayani semua pengguna tergantung banyak pengguna saat lampu lalulintas kuning akan menyala. Perkiraan banyak pengguna pada saat itu adalah xpreh2 +(µ(2, 1)−µ(2, 2))wkt(2, 1) yaitu perkiraan banyak pengguna saat lampu lalulintas hijau akan menyala ditambah selisih antara mean kedatangan dan mean keberangkatan dikalikan lama lampu lalulintas hijau menyala. Ekspresi sebelumnya ditulis xprek2 yang menyatakan perkiraan banyak pengguna di jalur 2 saat lampu lalulintas kuning akan menyala. Waktu yang dibutuh kan untuk melayani pengguna di jalur 2 selama xprek2 /µ(2, 3) satuan waktu.
Lama maksimum lampu lalulintas kuning menyala di jalur 2 dinotasikan dengan maks(2, 2). Ingat lampu lalulintas kuning menyala paling tidak selama 1 satuan waktu dengan menggunakan alasan yang sama seperti sebelumnya. Berdasarkan keterangan sebelumnya maka lampu lalulintas kuning menyala di jalur 2 selama min max xprek2 /µ(2, 3) , 1 , maks(2, 2) satuan waktu.
Secara umum perkiraan banyak pengguna pada jalur i saat lampu lalulintas hijau akan menyala diperoleh dari banyak pengguna pada kondisi awal ditambah pengguna yang datang saat lampu lalulintas hijau dan kuning menyala pada jalur sebelumnya. Proses ini dapat ditulis menjadi persamaan P xi + µ(i, 1) i−1 j=1 (wkt(j, 1) + wkt(j, 2)) dengan xi menyatakan banyak peng-
guna di jalur i pada kondisi awal. Ekspresi sebelumnya juga dapat ditulis P P2 h xi + µ(i, 1) i−1 q=1 wkt(j, q) yang dinyatakan dengan xprei . Waktu yang j=1 dibutuhkan untuk melayani pengguna pada jalur i saat lampu lalulintas hi jau menyala adalah xprehi /µ(i, 2) satuan waktu. Lama lampu lalulintas hijau menyala pada jalur i dinyatakan dengan wkt(i, 1) yang diperoleh dari min max xprehi /µ(i, 2) , 1 , maks(i, 1) . 146
Perkiraan banyak pengguna pada jalur i saat lampu lalulintas kuning akan menyala diperoleh dari banyak pengguna saat lampu lalulintas hijau akan menyala ditambah selisih antara mean kedatangan dan mean keberangkatan saat lampu lalulintas hijau menyala. Proses ini dapat ditulis menjadi persamaan xprehi + (µ(i, 1) − µ(i, 2))wkt(i, 1) dengan xprehi menyatakan perkiraan banyak pengguna di jalur i saat lampu lalulintas hijau akan menyala. Ekspresi sebelumnya dinyatakan dengan xpreki untuk menyederhanakan penulisan. Waktu yang dibutuhkan untuk melayani pengguna pada jalur i saat lampu lalulintas kuning menyala adalah xpreki /µ(i, 3) satuan waktu. Lama lampu lalulintas hijau menyala pada jalur i dapat ditulis sebagai ekspresi min max xpreki /µ(i, 3) , 1 , maks(i, 2) yang dinyatakan dengan wkt(i, 2). Berikut merupakan algoritma tahap inisialisasi simulasi persimpangan. Algoritma 4.10 Tahap Inisialisasi Simulasi Jumlah Pengguna Input: µ ∈ Rℓ×3 , x ∈ (N ∪ {0})ℓ , maks ∈ (N ∪ {0})ℓ×2 , ℓ ∈ N Output: wkt ∈ (N ∪ {0})ℓ×2 1 for i = 1 to ℓ do P P2 2 xpre ← xi + µ(i, 1) i−1 q=1 wkt(j, q) /* hijau */ j=1 3 wkt(i, 1) ← min {max {⌈xpre/µ(i, 2)⌉ , 1} , maks(i, 1)} 4 xpre ← xpre + (µ(i, 1) − µ(i, 2)) wkt(i, 1) /* kuning */ 5 wkt(i, 2) ← min {max {⌈xpre/µ(i, 3)⌉ , 1} , maks(i, 2)} 6 end for Variabel yang digunakan untuk menyimpan perkiraan banyak pengguna saat lampu lalulintas hijau atau kuning akan menyala pada semua jalur adalah xpre. Hal ini dilakukan dengan tujuan mengurangi kebutuhan memori Algoritma 4.10. Berikutnya ditentukan kompleksitas algoritma tahap inisialisasi simulasi persimpangan. Kompleksitas algoritma terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung adalah perkalian karena operasi ini terdiri dari banyak operasi dasar. Operasi-operasi yang setara dengan perkalian juga dihitung misalnya pembagian. Operasi perkalian dilakukan pada baris 2 dan 4 sedangkan operasi pembagian dilakukan pada baris 3 dan 5. Pernyataan pada baris 2, 3, 4 dan 5 dilakukan sebanyak ℓ sehingga banyak kerja yang dilakukan Algoritma 4.10 adalah 4ℓ yang dapat ditulis O(ℓ). Banyak memori yang dipakai Algoritma 4.10 tergantung variabel tambahan di algoritma tersebut. Pada algoritma tahap inisialisasi simulasi persimpangan terdapat sebuah variabel tambahan yaitu xpre. Banyak memori yang 147
dipakai variabel ini tidak tergantung input sehingga Algoritma 4.10 bekerja di tempat (work in place). Berikut merupakan ilustrasi proses yang dilakukan oleh Algoritma 4.10. Contoh 4.1. Persimpangan yang dibahas pada contoh ini mempunyai 2 jalur sehingga ℓ = 2. Lama maksimum lampu lalulintas hijau menyala di jalur 1 dan jalur 2 adalah 6 satuan waktu. Lama maksimum lampu lalulintas kuning menyala pada kedua jalur adalah 4 satuan waktu. Mean kedatangan pada jalur 1 dan jalur 2 adalah 2. Mean keberangkatan saat lampu lalulintas hijau menyala adalah 5 dan mean keberangkatan saat lampu lalulintas kuning menyala adalah 3. Nilai mean keberangkatan sama untuk kedua jalur di persimpangan. Pada kondisi awal terdapat 15 pengguna pada kedua jalur. Ukuran matriks µ adalah 2 × 3 sedangkan ukuran matriks maks adalah 2 × 2. "
2 5 3 µ= 2 5 3
#
" # 6 4 maks = 6 4
" # 15 x= 15
(4.66)
Perulangan di baris 1 dijalankan dengan i = 1. Variabel xpre bernilai sama dengan x1 yaitu 15 setelah menjalankan perintah di baris 2. Ekspresi ⌈xpre/µ(1, 2)⌉ bernilai 3 dan ekspresi maks(1, 1) bernilai 6 sehingga ekspresi min{max{3, 1}, 6} bernilai 3. Selanjutnya menjalankan perintah di baris 4. Ekspresi µ(1, 1), µ(1, 2) dan wkt(1, 1) masing-masing bernilai 2, 5 dan 3 sehingga variabel xpre bernilai 6 yang diperoleh dari 15 + (2 − 5)3. Variabel wkt(1, 2) bernilai 2 setelah menjalankan perintah di baris 5 karena µ(1, 3) = 3 dan maks(1, 2) = 4. Langkah selanjutnya menjalankan perulangan untuk i = 2. Ekspresi pada baris 2 dapat ditulis menjadi x2 + µ(2, 1)(wkt(1, 1) + wkt(1, 2)). Variabel xpre bernilai 25 karena variabel x2 , µ(2, 1), wkt(1, 1) dan wkt(1, 2) masingmasing bernilai 15, 2, 3 dan 2. Variabel wkt(2, 1) bernilai 5 setelah menjalankan perintah pada baris 3 karena µ(2, 2) = 5 dan maks(2, 1) = 6. Perintah pada baris 4 menyebabkan variabel xpre berubah menjadi 10 karena variabel µ(2, 1), µ(2, 2) dan wkt(2, 1) masing-masing bernilai 2, 5 dan 5. Variabel wkt(2, 2) bernilai 4 karena µ(2, 3) = 3 dan maks(2, 2) = 4. Matriks wkt berukuran 2 × 2 dan dapat dituliskan sebagai berikut. " # 3 2 wkt = 5 4
(4.67)
148
Setelah menyusun algoritma tahap inisialisasi, berikutnya disusun algoritma perpindahan jalur pada simulasi jumlah pengguna. Algoritma perpindahan jalur dijalankan ketika terjadi perubahan jalur yang dilayani. Proses ini ditandai dengan perubahan lampu lalulintas yang menyala dari kuning ke merah di suatu jalur dan pada saat yang bersamaan terjadi perubahan lampu lalulintas yang menyala dari merah ke hijau di jalur lain. Jalur lain yang dimaksud adalah jalur yang akan dilayani. Proses yang dilakukan oleh algoritma perpindahan jalur adalah menghitung lama lampu lalulintas hijau dan kuning menyala di jalur yang dilayani terakhir untuk periode berikutnya. Perintah pada algoritma ini serupa dengan algoritma tahap inisialisasi karena tujuan kedua algoritma hampir sama. Algoritma tahap inisialisasi menghitung lama lampu lalulintas menyala di semua jalur sedangkan algoritma perpindahan jalur menghitung lama lampu lalulintas menyala di satu jalur. Ada beberapa input yang dibutuhkan oleh algoritma perpindahan jalur. Pertama adalah data mean pada jalur yang dihitung. Data mean ini meliputi mean kedatangan, mean keberangkatan saat lampu lalulintas hijau menyala dan mean keberangkatan saat lampu lalulintas kuning menyala. Pada Algoritma 4.11, data mean dinotasikan dengan µ yaitu vektor baris dengan 3 elemen. Data mean digunakan untuk menghitung perkiraan banyak pengguna dan menentukan lama lampu lalulintas menyala. Dalam memperkirakan banyak pengguna, selain membutuhkan mean kedatangan juga membutuhkan informasi banyak pengguna di jalur yang dimaksud pada saat ini dan lama lampu lalulintas menyala di jalur yang lain. Informasi banyak pengguna disimpan di variabel x dan lama lampu lalulintas menyala pada jalur yang lain disimpan di variabel wkt. Dalam menghitung lama lampu lalulintas menyala dibutuhkan data maksimum lama lampu lalulintas menyala. Data ini disimpan dalam variabel maks yaitu vektor baris dengan 2 elemen. Indeks jalur yang dihitung juga menjadi input yang digunakan untuk menghitung perkiraan banyak pengguna seperti terlihat pada baris 1. Langkah pertama yang dilakukan adalah menghitung perkiraan banyak pengguna di jalur yang dilayani terakhir pada periode berikutnya. Perkiraan banyak pengguna tergantung mean kedatangan dan waktu yang dibutuhkan hingga jalur tersebut dilayani. Ingat urutan jalur yang dilayani adalah tetap sehingga jalur akan dilayani lagi ketika jalur yang lain sudah dilayani. Jadi waktu yang dibutuhkan hingga jalur dilayani lagi sama dengan jumlah waktu untuk melayani jalur yang lain. 149
Variabel yang digunakan untuk menyimpan perkiraan banyak pengguna saat lampu lalulintas hijau atau kuning akan menyala adalah xpre. Hal ini dapat dilakukan karena perkiraan banyak pengguna tidak dibutuhkan setelah mengetahui lama lampu lalulintas hijau atau kuning menyala. Dengan melakukan hal ini diharapkan kebutuhan memori Algoritma 4.11 menjadi semakin kecil. Algoritma 4.11 Perpindahan Jalur Simulasi Jumlah Pengguna Input: µ ∈ R1×3 , x ∈ N ∪ {0}, maks ∈ (N ∪ {0})1×2 , wkt ∈ (N ∪ {0})ℓ×2, i ∈ N ℓ×2 Output: wkt ∈ (N ∪ {0}) P P2 1 xpre ← x + µ(1) j6=i q=1 wkt(j, q) /* hijau */ 2 wkt(i, 1) ← min {max {⌈xpre/µ(2)⌉ , 1} , maks(1)} 3 xpre ← xpre + (µ(1) − µ(2)) wkt(i, 1) /* kuning */ 4 wkt(i, 2) ← min {max {⌈xpre/µ(3)⌉ , 1} , maks(2)} Berikutnya ditentukan kompleksitas algoritma perpindahan jalur simulasi jumlah pengguna. Kompleksitas algoritma terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung adalah perkalian karena operasi ini terdiri dari banyak operasi dasar. Operasi-operasi yang setara dengan perkalian juga dihitung misalnya pembagian. Operasi perkalian dilakukan pada baris 1 dan 3 sedangkan operasi pembagian dilakukan pada baris 2 dan 4. Pernyataan pada baris 1, 2, 3 dan 4 dilakukan sekali sehingga banyak kerja yang dilakukan Algoritma 4.11 adalah 4. Banyak memori yang dipakai Algoritma 4.11 tergantung variabel tambahan di algoritma tersebut. Pada algoritma perpindahan jalur simulasi persimpangan terdapat sebuah variabel tambahan yaitu xpre. Banyak memori yang dipakai variabel ini tidak tergantung input sehingga Algoritma 4.11 bekerja di tempat (work in place). Berikut dijelaskan proses yang dilakukan oleh algoritma perpindahan jalur. Contoh 4.2. Misal input dari Algoritma 4.11 adalah µ = [2, 5, 3], x = 7, maks = [6, 4], i = 1 dan variabel wkt yang digunakan sama dengan persamaan (4.67). Perintah pada baris 1 yaitu xpre ← 7 + 2(5 + 4) menyebabkan variabel xpre bernilai 25. Variabel wkt(1, 1) = 5 karena variabel µ(2) dan maks(1) masing-masing bernilai 5 dan 6. Perintah pada baris 3 yaitu xpre ← 25 + (2 − 5)5 menyebabkan nilai variabel xpre berubah menjadi 10. Variabel wkt(1, 2) bernilai 4 karena variabel µ(3) dan maks(2) masing-masing 150
bernilai 3 dan 4. Elemen pada baris pertama matriks wkt menjadi [5, 4]. Matriks wkt yang lengkap dapat ditulis sebagai berikut. " # 5 4 wkt = 5 4
(4.68)
Selanjutnya disusun algoritma untuk mensimulasikan jumlah pengguna di persimpangan pada setiap waktu. Algoritma tahap inisialisasi dan perpindahan jalur merupakan bagian dari algoritma ini. Input algoritma ini adalah mean dan varian kedatangan dan keberangkatan di setiap jalur, jumlah pengguna pada kondisi awal, maksimum lama lampu lalulintas menyala, jumlah jalur di persimpangan dan lama simulasi dilakukan. Variabel t menyatakan waktu simulasi dan variabel r menyatakan indeks jalur yang sedang dilayani. Ingat variabel r dimulai dari nol sehingga r = 0, 1, . . . , ℓ − 1 dengan ℓ menyatakan jumlah jalur di persimpangan. Pada tahap inisialisasi variabel t diberikan nilai 1. Variabel r diinisialisasi dengan 0 karena jalur yang dilayani pertama kali adalah jalur 1. Berikutnya dihitung lama lampu lalulintas hijau dan kuning menyala di semua jalur dengan menjalankan Algoritma 4.10 seperti terlihat pada baris 1. Kondisi t ≤ T pada perulangan while menyatakan variabel T berisi lama simulasi. Variabel q menyatakan warna lampu lalulintas yang menyala. Jika q = 2 maka lampu lalulintas hijau menyala dan jika q = 3 maka lampu lalulintas kuning menyala. Perulangan for pada baris 4 dilakukan sebanyak lama lampu lalulintas hijau atau kuning menyala. Ingat lama lampu lalulintas hijau dan kuning menyala di semua jalur disimpan di variabel wkt. Notasi N(µ, σ 2 ) menyatakan bilangan random berdistribusi normal dengan mean µ dan varian σ 2 . Notasi ⌊. . . ⌉ menyatakan pembulatan ke bilangan bulat yang paling dekat. Variabel j menyatakan indeks jalur yaitu j = 1, 2, . . . , ℓ dengan ℓ adalah jumlah jalur di persimpangan. Perintah pada baris 6 menyatakan kedatangan pengguna pada setiap jalur di persimpangan sedangkan perintah pada baris 9 menyatakan jalur r + 1 sedang dilayani. Perintah pada baris 13 dan 14 dijalankan ketika terjadi perpindahan jalur. Algoritma 4.11 digunakan untuk menghitung lama lampu lalulintas hijau dan kuning menyala pada periode berikutnya. Perintah di baris 14 berguna untuk mengubah nilai variabel r sehingga jalur yang dilayani berubah. Jumlah perulangan while bisa lebih dari T + 1 sehingga menyebabkan jumlah kolom 151
matriks x lebih dari T + 1. Perintah pada baris 16 digunakan untuk menjamin jumlah kolom matriks x sebanyak T + 1 sehingga sesuai dengan output Algoritma 4.12. Algoritma 4.12 Simulasi Jumlah Pengguna di Persimpangan Input: µ, σ 2 ∈ Rℓ×3 ; x(:, 1) ∈ (N ∪ {0})ℓ ; maks ∈ (N ∪ {0})ℓ×2; T, ℓ ∈ N Output: x ∈ (N ∪ {0})ℓ×(T +1) 1 t ← 1; r ← 0; wkt ← Algoritma 4.10 (µ, x(:, 1), maks, ℓ) 2 while t ≤ T do 3 for q = 2 to 3 do 4 for i = 1 to wkt(r + 1, q − 1) do 5 for j = 1 to ℓ do 6 wd ∼ N(µ(j, 1), σ 2 (j, 1)); x(j, t + 1) ← max {x(j, t) + ⌊wd⌉ , 0} 7 end for 8 wb ∼ N(µ(r + 1, q), σ 2(r + 1, q)) 9 x(r + 1, t + 1) ← max{x(r + 1, t + 1) − ⌊wb⌉ , 0} 10 t ← t + 1 /* hijau (q = 2) dan kuning (q = 3) */ 11 end for 12 end for 13 wkt ← Algoritma 4.11 (µ(r + 1, :), x(r + 1, t), maks(r + 1, :), wkt, r + 1) 14 r ← (r + 1) mod ℓ /* perpindahan jalur */ 15 end while 16 x ← x(:, 1 : T + 1) Selanjutnya ditentukan kompleksitas algoritma simulasi jumlah pengguna di persimpangan. Kompleksitas algoritma terdiri dari banyak kerja yang dilakukan dan banyak memori yang dipakai oleh Algoritma 4.12. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Operasi yang dihitung adalah membangkitkan bilangan random berdistribusi normal karena operasi ini termasuk rumit yaitu terdiri dari banyak operasi dasar. Operasi ini dilakukan di baris 6 dan baris 9 pada algoritma simulasi jumlah pengguna di persimpangan. Pada setiap iterasi, banyak kerja yang dilakukan adalah ℓ + 1 sehingga jumlah banyak kerja yang dilakukan oleh Algoritma 4.12 sebanyak ℓ + 1 dikalikan dengan jumlah perulangan pada while. Jumlah perulangan pada while yang paling kecil adalah T . Informasi yang dibutuhkan adalah jumlah perulangan while yang paling besar. Dalam mencari jumlah perulangan while yang paling besar, akan ditentukan kondisi yang menyebabkan hal itu terjadi. Kondisi yang menyebabkan perulangan while paling besar ketika pergantian jalur terjadi saat t = T dan jumlah lama lampu lalulintas hijau dan kuning menyala pada jalur berikutnya paling besar. Jumlah lama lampu lalu152
lintas menyala paling besar ketika lama lampu lalulintas menyala sama dengan maksimum lamanya. Jalur yang jumlah maksimum lama lampu lalulintas menyala paling besar menyebabkan jumlah perulangan pada while lebih dari atau sama dengan jalur yang lain. W (ℓ, T, maks) = (ℓ + 1) T + max
( 2 X
maks(1, j), . . . ,
j=1
= (ℓ + 1) T + max
( 2 X
2 X
maks(ℓ, j)
j=1
maks(i, j) : 1 ≤ i ≤ ℓ
j=1
)!
)!
(4.69) Jika jumlah maksimum lama lampu lalulintas hijau dan kuning meP nyala di setiap jalur kurang dari lama simulasi yaitu 2j=1 maks(i, j) < T untuk setiap 1 ≤ i ≤ ℓ maka persamaan (4.69) dapat ditulis menjadi persamaan yang lebih sederhana sebagai berikut. W (ℓ, T ) = 2T (ℓ + 1)
(4.70)
= O(T ℓ)
Banyak memori yang dipakai Algoritma 4.12 tergantung variabel tambahan pada algoritma tersebut. Variabel tambahan yang digunakan adalah t, r, q, i, j, wd, wb dan wkt. Banyak memori yang dipakai oleh variabel t, r, q, i, j, wd dan wb tetap sedangkan banyak memori yang dipakai variabel wkt tergantung nilai ℓ yang diberikan sehingga Algoritma 4.12 tidak bekerja di tempat (work in place). Berikutnya dibahas ilustrasi proses yang dilakukan algoritma simulasi jumlah pengguna di persimpangan dengan tujuan algoritma tersebut lebih mudah dipahami. Contoh 4.3. Persimpangan yang dibahas disini mempunyai 2 jalur sehingga ℓ = 2. Simulasi dilakukan selama 13 satuan waktu sehingga variabel T bernilai 13. Berikut merupakan input lain yang diberikan ke Algoritma 4.12. " # 15 x= 15
" # 2 5 3 µ= 2 5 3
" # 1 2 1 σ2 = 1 2 1
"
6 4 maks = 6 4
#
(4.71)
Jumlah baris matriks µ, σ 2 dan maks menunjukkan banyak jalur yang ada di persimpangan yang pada contoh ini berjumlah 2. Matriks µ dan σ 2 mempunyai 3 kolom. Kolom pertama berisi data kedatangan, kolom kedua berisi data keberangkatan saat lampu lalulintas hijau menyala dan kolom 153
ketiga berisi data keberangkatan saat lampu lalulintas kuning menyala. Matriks maks terdiri dari 2 kolom. Kolom pertama berisi data lampu lalulintas hijau dan kolom kedua berisi data lampu lalulintas kuning. Pada baris 1, variabel t dan r masing-masing diberikan nilai 1 dan 0. Perhatikan input yang diberikan ke Algoritma 4.10 disini sama dengan input yang diberikan di Contoh 4.1 sehingga output yang dihasilkan disini sama dengan output yang dihasilkan pada Contoh 4.1. Berikut merupakan matriks wkt yang dihasilkan pada Contoh 4.1. " # 3 2 wkt = 5 4
(4.72)
Kondisi pada while dipenuhi karena 1 = t ≤ T = 13 selanjutnya menuju ke perulangan for di baris 3. Variabel q diinisialisasi dengan 2 sehingga variabel i dijalankan mulai dari 1 hingga wkt(1, 1) = 3. Untuk perulangan pertama, variabel i bernilai 1. Perintah yang berada pada baris 6 yaitu ekspresi x(1, 2) ← max{15 + ⌊1.2383509⌉, 0} menyebabkan x(1, 2) = 16 dan perintah x(2, 2) ← max{15 + ⌊2.6755537⌉, 0} menyebabkan x(2, 2) = 18. Perintah x(1, 2) ← max{16 − ⌊4.7555716⌉, 0} mengubah variabel x(1, 2) menjadi 11. Jadi pada saat ini jumlah pengguna pada jalur 1 sebanyak 11 dan jumlah pengguna pada jalur 2 sebanyak 18 yang ditulis x(:, 2) = [11, 18]T . Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 2. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 3) ← max{11+⌊3.4739762⌉, 0} menyebabkan x(1, 3) bernilai 14 dan perintah x(2, 3) ← max{18 + ⌊3.1443051⌉, 0} menyebabkan x(2, 3) = 21. Perintah x(1, 3) ← max{14 − ⌊6.0789152⌉, 0} mengubah variabel x(1, 3) menjadi 8. Jadi jumlah pengguna pada jalur 1 sebanyak 8 dan jumlah pengguna pada jalur 2 sebanyak 21 yang ditulis x(:, 3) = [8, 21]T . Nilai variabel t berubah menjadi 3 setelah menjalankan perintah pada baris 10. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 4) ← max{8 + ⌊2.8529775⌉, 0} menyebabkan x(1, 4) menjadi 11 dan perintah x(2, 4) ← max{21 + ⌊2.4529708⌉, 0} menyebabkan x(2, 4) = 23. Perintah x(1, 4) ← max{11 − ⌊4.148662⌉, 0} mengubah variabel x(1, 4) menjadi 7. Jumlah pengguna pada jalur 1 sebanyak 7 dan jumlah pengguna pada jalur 2 sebanyak 23 yang ditulis x(:, 4) = [7, 23]T . Perintah pada baris 10 menyebabkan nilai variabel t berubah menjadi 4. Perulangan pada baris 3 dijalankan untuk q = 3 yang menyatakan 154
lampu lalulintas kuning menyala pada jalur 1. Perulangan variabel i dimulai dari 1 hingga wkt(1, 2) = 2. Perulangan pada baris 4 dijalankan untuk i = 1. Perintah pada baris 6 yaitu ekspresi x(1, 5) ← max{7 + ⌊2.7223316⌉, 0} menyebabkan x(1, 5) = 10 dan perintah x(2, 5) ← max{23 + ⌊3.9273333⌉, 0} menyebabkan x(2, 5) = 27. Perintah x(1, 5) ← max{10 − ⌊2.6890209⌉, 0} mengubah variabel x(1, 5) menjadi 7. Jadi pada saat ini terdapat 7 pengguna pada jalur 1 dan 27 pengguna pada jalur 2 yang ditulis x(:, 5) = [7, 27]T . Kemudian menjalankan perintah pada baris 10 sehingga variabel t bernilai 5. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 6) ← max{7 + ⌊2.6380837⌉, 0} menyebabkan x(1, 6) menjadi 10 dan perintah x(2, 6) ← max{27 + ⌊1.1501105⌉, 0} menyebabkan x(2, 6) bernilai 28. Perintah x(1, 6) ← max{10 − ⌊2.7669869⌉, 0} mengubah variabel x(1, 6) menjadi 7. Saat ini jumlah pengguna pada jalur 1 sebanyak 7 dan jumlah pengguna pada jalur 2 sebanyak 28. Dengan menggunakan notasi vektor, hasil ini dapat ditulis x(:, 6) = [7, 28]T . Selanjutnya menjalankan perintah pada baris 10 yang menyebabkan nilai variabel t berubah menjadi 6. Kemudian proses dilanjutkan dengan menjalankan Algoritma 4.11. Perhatikan bahwa input yang diberikan disini sama dengan input yang diberikan ke Algoritma 4.11 pada Contoh 4.2 sehingga variabel wkt yang dihasilkan disini sama dengan variabel wkt pada persamaan (4.68). " # 5 4 wkt = (4.73) 5 4 Perintah pada baris 14 menyebabkan nilai variabel r berubah menjadi 1. Perubahan ini menyatakan jalur yang dilayani berikutnya yaitu jalur 2. Kemudian menuju ke kondisi perulangan while pada baris 2. Jelas bahwa kondisi pada while dipenuhi karena 6 = t ≤ T = 13. Variabel q diinisialisasi dengan nilai 2 pada baris 3. Perulangan variabel i pada baris 4 dimulai dari 1 hingga wkt(2, 1) = 5. Pertama variabel i diinisialisasi dengan 1. Ingat bahwa nilai variabel t adalah 6. Seperti yang telah dijelaskan sebelumnya maka perulangan pada baris 4 dijalankan untuk i = 1. Perintah pada baris 6 yaitu ekspresi x(1, 7) ← max{7 + ⌊2.2546697⌉, 0} menyebabkan x(1, 7) menjadi 9 dan perintah x(2, 7) ← max{28 + ⌊0.4582791⌉, 0} menyebabkan x(2, 7) = 28. Perintah x(2, 7) ← max{28 − ⌊4.966136⌉, 0} mengubah variabel x(2, 7) menjadi 23. Jadi saat t = 7 jumlah pengguna pada jalur 1 dan 2 masing-masing sebanyak 9 dan 23 yang ditulis x(:, 7) = [9, 23]T .
155
Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 7. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 8) ← max{9 + ⌊1.3165783⌉, 0} menyebabkan x(1, 8) = 10 dan perintah x(2, 8) ← max{23 + ⌊1.2790466⌉, 0} menyebabkan x(2, 8) = 24. Perintah x(2, 8) ← max{24 − ⌊2.7910661⌉, 0} mengubah variabel x(2, 8) menjadi 21. Jumlah pengguna pada jalur 1 sebanyak 10 dan jumlah pengguna pada jalur 2 sebanyak 21 yang ditulis x(:, 8) = [10, 21]T . Perintah pada baris 10 menyebabkan nilai variabel t berubah menjadi 8. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 9) ← max{10 + ⌊2.8145126⌉, 0} menyebabkan x(1, 9) bernilai 13 dan perintah x(2, 9) ← max{21 + ⌊2.3240162⌉, 0} menyebabkan x(2, 9) = 23. Perintah x(2, 9) ← max{23 − ⌊4.2027845⌉, 0} mengubah variabel x(2, 9) menjadi 19. Jadi jumlah pengguna pada jalur 1 sebanyak 13 dan jumlah pengguna pada jalur 2 sebanyak 19 yang ditulis x(:, 9) = [13, 19]T . Nilai variabel t berubah menjadi 9 setelah menjalankan perintah pada baris 10. Perulangan pada baris 4 dijalankan untuk i = 4. Perintah pada baris 6 yaitu ekspresi x(1, 10) ← max{13 + ⌊1.8115197⌉, 0} menyebabkan x(1, 10) = 15 dan perintah x(2, 10) ← max{19 + ⌊2.424161⌉, 0} menyebabkan x(2, 10) = 21. Perintah x(2, 10) ← max{21 − ⌊4.4500611⌉, 0} mengubah variabel x(2, 10) menjadi 17. Jumlah pengguna pada jalur 1 sebanyak 15 dan jumlah pengguna pada jalur 2 sebanyak 17 yang ditulis x(:, 10) = [15, 17]T . Kemudian menjalankan perintah pada baris 10 sehingga variabel t bernilai 10. Perulangan pada baris 4 dijalankan untuk i = 5. Perintah pada baris 6 yaitu ekspresi x(1, 11) ← max{15+⌊0.9672643⌉, 0} menyebabkan x(1, 11) = 16 dan perintah x(2, 11) ← max{17+⌊1.3220328⌉, 0} menyebabkan x(2, 11) = 18. Perintah x(2, 11) ← max{18 − ⌊4.0673633⌉, 0} mengubah variabel x(2, 11) menjadi 14. Jadi jumlah pengguna pada jalur 1 menjadi 16 dan jumlah pengguna pada jalur 2 menjadi 14 yang ditulis x(:, 11) = [16, 14]T . Selanjutnya menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 11. Langkah berikutnya adalah menjalankan perulangan di baris 3 yang menyebabkan nilai variabel q berubah menjadi 3. Proses ini menyatakan lampu lalulintas yang menyala pada jalur 2 berubah dari hijau ke kuning. Perulangan variabel i pada baris 4 dimulai dari 1 hingga wkt(2, 2) = 4. Pertama variabel i diinisialisasi dengan 1. Perintah pada baris 6 yang dapat ditulis dengan ekspresi x(1, 12) ← max{16 + ⌊1.0760742⌉, 0} menyebabkan x(1, 12) = 17 dan perintah x(2, 12) ← max{14 + ⌊0.6125922⌉, 0} menyebabkan x(2, 12) = 15. Perintah x(2, 12) ← max{15 − ⌊3.9741226⌉, 0} mengubah variabel x(2, 12) 156
menjadi 11. Jadi jumlah pengguna pada jalur 1 sebanyak 17 dan jumlah pengguna pada jalur 2 sebanyak 11 yang ditulis x(:, 12) = [17, 11]T . Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 12. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 13) ← max{17+⌊4.7266682⌉, 0} menyebabkan x(1, 13) = 22 dan perintah x(2, 13) ← max{11+⌊1.2876866⌉, 0} menyebabkan x(2, 13) = 12. Perintah x(2, 13) ← max{12 − ⌊2.7656077⌉, 0} mengubah variabel x(2, 13) menjadi 9. Jumlah pengguna pada jalur 1 sebanyak 22 dan jumlah pengguna pada jalur 2 sebanyak 9 yang ditulis x(:, 13) = [22, 9]T . Kemudian menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 13. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 14) ← max{22+⌊0.2913226⌉, 0} menyebabkan x(1, 14) = 22 dan perintah x(2, 14) ← max{9 + ⌊2.9520307⌉, 0} menyebabkan x(2, 14) = 12. Perintah x(2, 14) ← max{12 − ⌊2.8178063⌉, 0} mengubah variabel x(2, 14) menjadi 9. Jadi saat t = 14 jumlah pengguna pada jalur 1 sebanyak 22 dan jumlah pengguna pada jalur 2 sebanyak 9 yang ditulis x(:, 14) = [22, 9]T . Selanjutnya menjalankan perintah di baris 10 sehingga variabel t bernilai 14. Nilai variabel i berubah menjadi 4 pada perulangan berikutnya. Perintah pada baris 6 yaitu ekspresi x(1, 15) ← max{22 + ⌊2.0698768⌉, 0} menyebabkan x(1, 15) = 24 dan perintah x(2, 15) ← max{9 + ⌊−0.8759126⌉, 0} menyebabkan x(2, 15) = 8. Perintah x(2, 15) ← max{8 − ⌊4.4027611⌉, 0} mengubah variabel x(2, 15) menjadi 4. Jadi saat t = 15 jumlah pengguna pada jalur 1 sebanyak 24 dan jumlah pengguna pada jalur 2 sebanyak 4 yang ditulis x(:, 15) = [24, 4]T . Kemudian menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 15. Proses dilanjutkan dengan menjalankan Algoritma 4.11 seperti terlihat pada baris 13 yang menyebabkan wkt(2, 2) berubah menjadi 3. Perintah pada baris 14 menyebabkan nilai variabel r berubah menjadi 0. Proses ini menyatakan jalur yang akan dilayani adalah jalur 1. Selanjutnya menuju ke kondisi pada perulangan while di baris 2. Jelas kondisi pada while tidak dipenuhi karena 15 = t T = 13 sehingga menuju ke baris 16. Perintah pada baris ini menghapus kolom ke 15 dari matriks x. Hal ini dilakukan karena simulasi dilakukan selama 13 satuan waktu sehingga matriks yang dihasilkan mempunyai kolom sebanyak 13 + 1 = 14. Tambahan satu kolom berisi informasi mengenai keadaan awal. 157
Gambar 4.17 merupakan sketsa grafik perubahan jumlah pengguna terhadap waktu yang dibahas pada Contoh 4.3. Grafik dengan warna biru menyatakan jumlah pengguna pada jalur 1 dan grafik dengan warna merah menyatakan jumlah pengguna pada jalur 2. Pengguna di jalur 1 cenderung turun dan pengguna di jalur 2 cenderung naik pada saat awal karena jalur 1 sedang dilayani. Ketika terjadi perpindahan jalur pelayanan maka pengguna di jalur 1 cenderung naik dan pengguna di jalur 2 cenderung turun.
jumlah pengguna
25 20 15 10 5 0
0
1
2
3
4
5
6
7 8 waktu
9
10 11 12 13 14
Gambar 4.17 Grafik Perubahan Jumlah Pengguna Terhadap Waktu di Persimpangan dengan Dua Jalur Setelah membahas simulasi jumlah pengguna di persimpangan dengan kedatangan pengguna berdistribusi normal selanjutnya digunakan pendekatan kedua yaitu kedatangan pengguna berdistribusi uniform. 4.7.2
Kedatangan Berdistribusi Uniform
Pada bagian ini dibahas simulasi jumlah pengguna di persimpangan dengan kedatangan pengguna berdistribusi uniform diskrit (Allen, 2003). Parameter pada distribusi uniform ada 2 yaitu nilai minimum dan maksimum bilangan yang mungkin terjadi. Distribusi uniform terdiri dari 2 macam yaitu diskrit dan kontinu. Pada simulasi ini digunakan distribusi uniform diskrit karena jumlah pengguna yang datang berupa bilangan bulat. Jumlah pengguna yang datang pada setiap waktu untuk semua jalur tidak pernah bernilai negatif sehingga nilai minimum adalah 0. Nilai maksimum merupakan input algoritma simulasi jumlah pengguna di persimpangan. 158
Pada algoritma simulasi jumlah pengguna di persimpangan nilai maksimum kedatangan pada setiap jalur dinyatakan dengan dmaks. Variabel dmaks merupakan vektor dengan elemen sebanyak jumlah jalur di persimpangan yaitu ℓ. Elemen dari vektor ini merupakan bilangan bulat taknegatif karena menyatakan jumlah maksimum pengguna yang datang. Data mengenai mean dan varian kedatangan tidak dibutuhkan pada algoritma ini sehingga jumlah kolom matriks µ dan σ 2 berkurang menjadi 2. Kolom pertama pada kedua matriks masing-masing menyatakan mean dan varian keberangkatan saat lampu lalulintas hijau menyala dan kolom kedua pada matriks µ dan σ 2 masing-masing menyatakan mean dan varian keberangkatan saat lampu lalulintas kuning menyala. Variabel yang lain mempunyai kegunaan sama dengan variabel pada bagian sebelumnya sehingga tidak dibahas disini secara lengkap. Berikut merupakan variabel-variabel yang digunakan pada algoritma simulasi jumlah pengguna di persimpangan. x(:, t) jumlah pengguna pada waktu ke t µ(:, 1) mean keberangkatan saat lampu lalulintas hijau menyala µ(:, 2) mean keberangkatan saat lampu lalulintas kuning menyala σ 2 (:, 1) varian keberangkatan saat lampu lalulintas hijau menyala σ 2 (:, 2) varian keberangkatan saat lampu lalulintas kuning menyala wkt(:, 1) lama lampu lalulintas hijau menyala wkt(:, 2) lama lampu lalulintas kuning menyala maks(:, 1) maksimum lama lampu lalulintas hijau menyala maks(:, 2) maksimum lama lampu lalulintas kuning menyala dmaks jumlah maksimum pengguna yang datang T
lama simulasi
Proses yang dilakukan oleh algoritma simulasi jumlah pengguna di persimpangan pada bagian ini hampir sama dengan proses yang dilakukan pada algoritma sebelumnya. Hal ini menyebabkan algoritma pada bagian ini mirip dengan algoritma pada bagian sebelumnya. Dengan menggunakan alasan tersebut maka algoritma pada bagian ini diperoleh dari algoritma pada bagian sebelumnya dengan melakukan beberapa perubahan. Perubahan yang pertama dilakukan pada salah satu input algoritma tahap inisialisasi yaitu µ ∈ Rℓ×3 . Ingat jumlah kolom matriks µ adalah 2 sehingga input ini diubah menjadi µ ∈ Rℓ×2 . Data mean kedatangan digantikan dengan jumlah maksimum pengguna yang datang yaitu dmaks. Output algoritma ini sama dengan output Algoritma 4.10 yaitu wkt ∈ (N ∪ {0})ℓ×2 . 159
Ekspresi µ(i, 2) dan µ(i, 3) pada Algoritma 4.10 masing-masing diubah menjadi µ(i, 1) dan µ(i, 2) dengan memperhatikan perubahan variabel µ yang telah dijelaskan sebelumnya. Diasumsikan banyak pengguna yang datang pada setiap saat sebanyak setengah dari jumlah maksimum pengguna. Asumsi ini digunakan untuk memperkirakan jumlah pengguna. Berdasarkan keterangan sebelumnya maka ekspresi µ(i, 1) diganti dmaks(i)/2. Algoritma 4.13 Modifikasi Tahap Inisialisasi Simulasi Jumlah Pengguna Input: µ ∈ Rℓ×2 ; x, dmaks ∈ (N ∪ {0})ℓ ; maks ∈ (N ∪ {0})ℓ×2 ; ℓ ∈ N Output: wkt ∈ (N ∪ {0})ℓ×2 1 for i = 1 to ℓ do P P2 2 xpre ← xi + dmaks(i)/2 i−1 q=1 wkt(j, q) /* hijau */ j=1 3 wkt(i, 1) ← min {max {⌈xpre/µ(i, 1)⌉ , 1} , maks(i, 1)} 4 xpre ← xpre + (dmaks(i)/2 − µ(i, 1)) wkt(i, 1) /* kuning */ 5 wkt(i, 2) ← min {max {⌈xpre/µ(i, 2)⌉ , 1} , maks(i, 2)} 6 end for Berikutnya ditentukan kompleksitas algoritma modifikasi tahap inisialisasi simulasi jumlah pengguna. Kompleksitas algoritma terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai. Jenis operasi yang dihitung adalah perkalian dan operasi yang setara yaitu pembagian. Terlihat pada baris 2 dan 4 di Algoritma 4.13 bahwa terdapat tambahan sebuah operasi pembagian dibandingkan dengan Algoritma 4.10. Pada baris 2 dan 4 masing-masing terdapat operasi perkalian dan pembagian sebanyak satu. Kedua operasi ini dapat dihitung sebagai satu operasi karena dilakukan pada pernyataan (statement) yang sama. Banyak kerja yang dilakukan Algoritma 4.13 sama dengan Algoritma 4.10 yaitu 4ℓ yang dapat ditulis O(ℓ). Variabel tambahan yang digunakan di Algoritma 4.13 sama dengan Algoritma 4.10 yaitu xpre. Jelas bahwa banyak memori yang dipakai variabel ini tidak tergantung input yang diberikan sehingga Algoritma 4.13 bekerja di tempat (work in place). Berikut merupakan ilustrasi proses yang dilakukan oleh Algoritma 4.13. Contoh 4.4. Persimpangan yang dibahas pada contoh ini mempunyai 2 jalur sehingga ℓ = 2. Lama maksimum lampu lalulintas hijau menyala di jalur 1 dan jalur 2 adalah 6 satuan waktu. Lama maksimum lampu lalulintas kuning menyala pada kedua jalur adalah 4 satuan waktu. Maksimum kedatangan pada jalur 1 dan jalur 2 adalah 4. Mean keberangkatan saat lampu lalulintas 160
hijau menyala adalah 5 dan mean keberangkatan saat lampu lalulintas kuning menyala adalah 3. Nilai mean keberangkatan sama untuk kedua jalur di persimpangan. Pada kondisi awal terdapat 15 pengguna pada kedua jalur. Ukuran matriks µ adalah 2 × 2 sedangkan ukuran matriks maks adalah 2 × 2. Ukuran vektor dmaks sama dengan x yaitu 2 × 1. "
5 3 µ= 5 3
#
" # 6 4 maks = 6 4
" # 4 dmaks = 4
" # 15 x= 15
(4.74)
Perulangan di baris 1 dijalankan dengan i = 1. Variabel xpre bernilai sama dengan x1 yaitu 15 setelah menjalankan perintah di baris 2. Ekspresi ⌈xpre/µ(1, 1)⌉ bernilai 3 dan ekspresi maks(1, 1) bernilai 6 sehingga ekspresi min{max{3, 1}, 6} bernilai 3. Selanjutnya menjalankan perintah di baris 4. Ekspresi dmaks(1), µ(1, 1) dan wkt(1, 1) masing-masing bernilai 4, 5 dan 3 sehingga variabel xpre bernilai 6 yang diperoleh dari 15 + (4/2 − 5)3. Variabel wkt(1, 2) bernilai 2 setelah menjalankan perintah di baris 5 karena µ(1, 2) = 3 dan maks(1, 2) = 4. Langkah selanjutnya adalah menjalankan perulangan untuk i = 2. Ekspresi pada baris 2 dapat ditulis x2 + dmaks(2)/2(wkt(1, 1) + wkt(1, 2)). Variabel xpre bernilai 25 karena variabel x2 , dmaks(2), wkt(1, 1) dan wkt(1, 2) masing-masing bernilai 15, 4, 3 dan 2. Variabel wkt(2, 1) bernilai 5 setelah menjalankan perintah pada baris 3 karena µ(2, 1) = 5 dan maks(2, 1) = 6. Perintah pada baris 4 menyebabkan variabel xpre berubah menjadi 10 karena variabel dmaks(2), µ(2, 1) dan wkt(2, 1) masing-masing bernilai 4, 5 dan 5. Variabel wkt(2, 2) bernilai 4 karena µ(2, 2) = 3 dan maks(2, 2) = 4. Matriks wkt berukuran 2 × 2 dan dapat dituliskan sebagai berikut. " # 3 2 wkt = 5 4
(4.75)
Selanjutnya didesain algoritma modifikasi perpindahan jalur simulasi jumlah pengguna. Algoritma ini juga tidak didesain dari awal melainkan diperoleh dari Algoritma 4.11 dengan beberapa penyesuaian. Penyesuaian pertama dilakukan pada parameter µ yang menjadi input algoritma. Ukuran matriks µ diubah menjadi 1 × 2. Selain itu terdapat input tambahan yaitu dmaks. Variabel ini menyatakan maksimum kedatangan pengguna pada suatu jalur dalam 1 satuan waktu. 161
Penyesuaian pada ukuran µ mengakibatkan ekspresi µ(2) dan µ(3) masing-masing diubah menjadi µ(1) dan µ(2). Ekspresi µ(1) yang berada pada Algoritma 4.11 menyatakan perkiraan jumlah pengguna yang datang untuk setiap waktu. Dengan menggunakan kedatangan yang berdistribusi uniform maka perkiraan jumlah pengguna yang datang setiap waktu adalah mean batas atas dan batas bawah yaitu dmaks/2. Jadi ekspresi µ(1) diganti dengan dmaks/2 dengan alasan yang telah dijelaskan sebelumnya. Algoritma 4.14 Modifikasi Perpindahan Jalur Simulasi Jumlah Pengguna Input: µ ∈ R1×2 ; x, dmaks ∈ N ∪ {0}; maks ∈ (N ∪ {0})1×2 ; i ∈ N; wkt ∈ (N ∪ {0})ℓ×2 Output: wkt ∈ (N ∪ {0})ℓ×2 P P2 1 xpre ← x + dmaks/2 j6=i q=1 wkt(j, q) /* hijau */ 2 wkt(i, 1) ← min {max {⌈xpre/µ(1)⌉ , 1} , maks(1)} 3 xpre ← xpre + (dmaks/2 − µ(1)) wkt(i, 1) /* kuning */ 4 wkt(i, 2) ← min {max {⌈xpre/µ(2)⌉ , 1} , maks(2)} Berikutnya ditentukan kompleksitas algoritma perpindahan jalur simulasi jumlah pengguna. Kompleksitas algoritma terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai. Sebelum menghitung banyak kerja, jenis operasi yang dihitung harus ditentukan terlebih dahulu. Jenis operasi yang dihitung adalah perkalian dan operasi yang setara dengan perkalian seperti pembagian. Pada baris 1 dan 3 masing-masing terdapat sebuah operasi perkalian dan pembagian. Jumlah operasi pada kedua baris ini masing-masing dianggap sebanyak satu karena operasi perkalian dan pembagian dilakukan pada sebuah pernyataan (statement). Jadi banyak kerja yang dilakukan Algoritma 4.14 adalah 4. Banyak memori yang dipakai Algoritma 4.14 tergantung variabel tambahan di algoritma tersebut. Pada algoritma modifikasi perpindahan jalur simulasi jumlah pengguna terdapat sebuah variabel tambahan yaitu xpre. Jelas bahwa besar memori yang dipakai variabel ini tidak tergantung input yang diberikan sehingga Algoritma 4.14 bekerja di tempat (work in place). Berikut dijelaskan proses yang dilakukan oleh algoritma modifikasi perpindahan jalur. Contoh 4.5. Misal input Algoritma 4.14 adalah µ = [5, 3], x = 8, dmaks = 4, maks = [6, 4], i = 1 dan variabel wkt yang digunakan sama dengan persamaan (4.75). Perintah pada baris 1 yaitu xpre ← 8 + 4/2(5 + 4) menyebabkan variabel xpre bernilai 26. Variabel wkt(1, 1) = 6 karena variabel µ(1) dan maks(1) masing-masing bernilai 5 dan 6. Perintah pada baris 3 yaitu 162
xpre ← 26 + (4/2 − 5)5 menyebabkan nilai variabel xpre berubah menjadi 11. Variabel wkt(1, 2) bernilai 4 karena variabel µ(2) dan maks(2) masingmasing bernilai 3 dan 4. Elemen pada baris pertama matriks wkt menjadi [6, 4]. Matriks wkt yang lengkap dapat ditulis sebagai berikut. " # 6 4 wkt = 5 4
(4.76)
Selanjutnya dibahas desain algoritma modifikasi simulasi jumlah pengguna di persimpangan. Algoritma ini diperoleh dengan melakukan perubahan pada Algoritma 4.12. Hal pertama yang diubah adalah input algoritma. Ukuran parameter µ dan σ 2 adalah ℓ × 2 karena kedatangan tidak berdistribusi normal. Parameter dmaks yang bertipe vektor dengan elemen sebanyak ℓ digunakan untuk membangkitkan data kedatangan sehingga parameter ini merupakan input algoritma. Perubahan berikutnya dilakukan pada isi algoritma modifikasi perpindahan jalur. Perulangan for pada baris 3 dilakukan untuk q = 1 dan q = 2. Jika lampu lalulintas hijau menyala maka variabel q bernilai 1 dan jika lampu lalulintas kuning menyala maka variabel q bernilai 2. Perubahan ini mengakibatkan ekspresi wkt(r +1, q −1) pada baris 4 disesuaikan menjadi wkt(r +1, q). Ekspresi pada baris 6 yang digunakan untuk membangkitkan jumlah pengguna yang datang diubah menjadi U(0, dmaks(j)). Ekspresi U(0, dmaks(j)) menyatakan bilangan random berdistribusi uniform diskrit dengan batas bawah 0 dan batas atas dmaks(j). Pernyataan pada baris 9 tidak mengalami perubahan karena perintah pada baris ini menyatakan jumlah pengguna yang dilayani berdistribusi normal. Ekspresi r ← (r + 1) mod ℓ pada baris 13 bertujuan mengubah nilai variabel r yang menunjukkan pergantian jalur yang dilayani. Jumlah perulangan pada while menunjukkan lama simulasi dilakukan. Perulangan pada while dilakukan paling tidak sebanyak T . Jika jumlah perulangan pada while lebih dari T maka data pengguna yang diperoleh juga lebih dari T . Perintah pada baris 15 bertujuan untuk menghilangkan data jumlah pengguna yang tidak dibutuhkan yaitu jumlah pengguna setelah simulasi dilakukan selama T satuan waktu. Hal ini harus dilakukan agar jumlah kolom matriks x sesuai dengan output Algoritma 4.15 yaitu sebanyak T + 1. Berikut merupakan algoritma modifikasi simulasi jumlah pengguna di persimpangan yang lengkap. 163
Algoritma 4.15 Modifikasi Simulasi Jumlah Pengguna di Persimpangan Input: µ, σ 2 ∈ Rℓ×2 ; x(:, 1), dmaks ∈ (N ∪ {0})ℓ ; maks ∈ (N ∪ {0})ℓ×2 ; T, ℓ ∈ N Output: x ∈ (N ∪ {0})ℓ×(T +1) 1 t ← 1; r ← 0; wkt ← Algoritma 4.13 (µ, x(:, 1), dmaks, maks, ℓ) 2 while t ≤ T do 3 for q = 1 to 2 do 4 for i = 1 to wkt(r + 1, q) do 5 for j = 1 to ℓ do 6 wd ∼ U(0, dmaks(j)); x(j, t + 1) ← max {x(j, t) + wd, 0} 7 end for 8 wb ∼ N(µ(r + 1, q), σ 2(r + 1, q)) 9 x(r + 1, t + 1) ← max{x(r + 1, t + 1) − ⌊wb⌉ , 0} 10 t ← t + 1 /* hijau (q = 1) dan kuning (q = 2) */ 11 end for 12 end for 13 wkt ← Algoritma 4.14 (µ(r + 1, :), x(r + 1, t), dmaks(r + 1), maks(r + 1, :), r + 1, wkt); r ← (r + 1) mod ℓ 14 end while 15 x ← x(:, 1 : T + 1) Selanjutnya dihitung kompleksitas dari Algoritma 4.15. Kompleksitas algoritma terdiri dari menghitung banyak kerja yang dilakukan dan banyak memori yang dipakai. Jenis operasi yang dihitung harus ditentukan terlebih dahulu sebelum menghitung banyak kerja. Jenis operasi yang dihitung adalah membangkitkan bilangan random. Diasumsikan membangkitkan bilangan random berdistribusi normal setara dengan membangkitkan bilangan random berdistribusi uniform sehingga banyak kerja yang dilakukan Algoritma 4.15 sama dengan Algoritma 4.12. Banyak memori yang dipakai Algoritma 4.15 tergantung variabel tambahan pada algoritma tersebut. Jelas bahwa variabel tambahan pada algoritma ini sama dengan variabel tambahan pada Algoritma 4.12 sehingga kesimpulan yang diperoleh sama yaitu Algoritma 4.15 tidak bekerja di tempat. Contoh 4.6. Persimpangan yang dibahas disini mempunyai 2 jalur sehingga ℓ = 2. Simulasi dilakukan selama 13 satuan waktu sehingga variabel T bernilai 13. Berikut merupakan input lain yang diberikan ke Algoritma 4.15. " # " # " # " # " # 15 5 3 2 1 6 4 4 x= µ= σ2 = maks = dmaks = 15 5 3 2 1 6 4 4 (4.77) 164
Jumlah baris matriks µ, σ 2 dan maks menunjukkan banyak jalur yang ada di persimpangan. Persimpangan disini mempunyai 2 jalur. Matriks µ dan σ 2 mempunyai 2 kolom. Kolom pertama berisi berisi data keberangkatan saat lampu lalulintas hijau menyala dan kolom kedua berisi data keberangkatan saat lampu lalulintas kuning menyala. Matriks maks terdiri dari 2 kolom. Kolom pertama berisi maksimum lama lampu lalulintas hijau menyala dan kolom kedua berisi maksimum lama lampu lalulintas kuning menyala. Pada baris 1, variabel t dan r masing-masing diberikan nilai 1 dan 0. Perhatikan bahwa input yang diberikan ke Algoritma 4.13 disini sama dengan input yang diberikan di Contoh 4.4 sehingga output yang dihasilkan disini sama dengan output yang dihasilkan pada Contoh 4.4. Berikut merupakan matriks wkt yang dihasilkan pada Contoh 4.4. " # 3 2 wkt = 5 4
(4.78)
Kondisi pada while dipenuhi karena 1 = t ≤ T = 13 selanjutnya menuju ke perulangan for di baris 3. Variabel q diinisialisasi dengan 1 sehingga variabel i dijalankan mulai dari 1 hingga wkt(1, 1) = 3. Untuk perulangan pertama, variabel i bernilai 1. Perintah yang berada di baris 6 yaitu ekspresi x(1, 2) ← max{15 + 2, 0} menyebabkan x(1, 2) bernilai 17 dan perintah x(2, 2) ← max{15 + 2, 0} menyebabkan x(2, 2) = 17. Variabel x(1, 2) berubah menjadi 13 setelah menjalankan x(1, 2) ← max{17 − ⌊3.9228655⌉, 0}. Jadi pada saat ini jumlah pengguna pada jalur 1 sebanyak 13 dan jumlah pengguna pada jalur 2 sebanyak 17 yang ditulis x(:, 2) = [13, 17]T . Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 2. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 3) ← max{13 + 4, 0} menyebabkan x(1, 3) = 17 dan perintah x(2, 3) ← max{17 + 0, 0} tidak mengubah nilai variabel x(2, 3) yaitu 17. Perintah x(1, 3) ← max{17 − ⌊5.9553773⌉, 0} mengubah variabel x(1, 3) menjadi 11. Jadi jumlah pengguna pada jalur 1 sebanyak 11 dan jumlah pengguna pada jalur 2 sebanyak 17 yang ditulis x(:, 3) = [11, 17]T . Nilai variabel t berubah menjadi 3 setelah menjalankan perintah pada baris 10. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 4) ← max{11 + 4, 0} menyebabkan x(1, 4) menjadi 15 dan perintah x(2, 4) ← max{17 + 1, 0} menyebabkan x(2, 4) = 18. Perintah x(1, 4) ← max{15 − ⌊7.0845172⌉, 0} mengubah variabel x(1, 4) menjadi 8. 165
Jumlah pengguna pada jalur 1 sebanyak 8 dan jumlah pengguna pada jalur 2 sebanyak 18 yang ditulis x(:, 4) = [8, 18]T . Perintah pada baris 10 menyebabkan nilai variabel t berubah menjadi 4. Perulangan pada baris 3 dijalankan untuk q = 2 yang menyatakan lampu lalulintas kuning menyala pada jalur 1. Perulangan variabel i dimulai dari 1 hingga wkt(1, 2) = 2. Perulangan pada baris 4 dijalankan untuk i = 1. Perintah pada baris 6 yaitu ekspresi x(1, 5) ← max{8 + 4, 0} menyebabkan x(1, 5) = 12 dan perintah x(2, 5) ← max{18 + 0, 0} tidak mengubah nilai dari variabel x(2, 5) yaitu 18. Perintah x(1, 5) ← max{12 − ⌊2.8271631⌉, 0} mengubah variabel x(1, 5) menjadi 9. Jadi pada saat ini terdapat 9 pengguna pada jalur 1 dan 18 pengguna pada jalur 2 yang ditulis x(:, 5) = [9, 18]T . Kemudian menjalankan perintah pada baris 10 sehingga variabel t bernilai 5. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 6) ← max{9 + 3, 0} menyebabkan x(1, 6) menjadi 12 dan perintah x(2, 6) ← max{18 + 3, 0} menyebabkan x(2, 6) = 21. Perintah x(1, 6) ← max{12 − ⌊3.7629083⌉, 0} mengubah variabel x(1, 6) menjadi 8. Saat ini jumlah pengguna pada jalur 1 sebanyak 8 dan jumlah pengguna pada jalur 2 sebanyak 21. Dengan menggunakan notasi vektor, hasil ini dapat ditulis x(:, 6) = [8, 21]T . Selanjutnya menjalankan perintah pada baris 10 yang menyebabkan nilai variabel t berubah menjadi 6. Kemudian proses dilanjutkan dengan menjalankan Algoritma 4.14. Perhatikan bahwa input yang diberikan disini sama dengan input yang diberikan ke Algoritma 4.14 pada Contoh 4.5 sehingga variabel wkt yang dihasilkan disini sama dengan variabel wkt yang ada di persamaan (4.76). " # 6 4 wkt = 5 4
(4.79)
Perintah pada baris 13 menyebabkan nilai variabel r berubah menjadi 1. Perubahan ini menyatakan jalur yang dilayani berikutnya yaitu jalur 2. Kemudian menuju ke kondisi perulangan while pada baris 2. Jelas bahwa kondisi pada while dipenuhi karena 6 = t ≤ T = 13. Variabel q diinisialisasi dengan nilai 1 pada baris 3. Perulangan variabel i pada baris 4 dimulai dari 1 hingga wkt(2, 1) = 5. Pertama variabel i diinisialisasi dengan 1. Ingat bahwa nilai variabel t adalah 6. Seperti yang telah dijelaskan sebelumnya maka perulangan pada baris 4 dijalankan untuk i = 1. Perintah pada baris 6 yaitu ekspresi x(1, 7) ← max{8 + 0, 0} tidak mengubah nilai
166
variabel x(1, 7) yaitu 8 dan perintah x(2, 7) ← max{21 + 0, 0} tidak mengubah nilai variabel x(2, 7) yaitu 21. Perintah x(2, 7) ← max{21 − ⌊6.6182918⌉, 0} mengubah variabel x(2, 7) menjadi 14. Jadi saat t = 7 jumlah pengguna pada jalur 1 dan 2 masing-masing sebanyak 8 dan 14 yang ditulis x(:, 7) = [8, 14]T . Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 7. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 8) ← max{8 + 0, 0} tidak mengubah nilai variabel x(1, 8) yaitu 8 dan perintah x(2, 8) ← max{14 + 1, 0} menyebabkan x(2, 8) = 15. Perintah x(2, 8) ← max{15 − ⌊6.2062924⌉, 0} mengubah variabel x(2, 8) menjadi 9. Jumlah pengguna pada jalur 1 sebanyak 8 dan jumlah pengguna pada jalur 2 sebanyak 9 yang ditulis x(:, 8) = [8, 9]T . Perintah pada baris 10 menyebabkan nilai variabel t berubah menjadi 8. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 9) ← max{8 + 4, 0} menyebabkan x(1, 9) = 12 dan perintah x(2, 9) ← max{9+0, 0} tidak mengubah nilai variabel x(2, 9) yaitu 9. Perintah x(2, 9) ← max{9 − ⌊5.6405975⌉, 0} mengubah variabel x(2, 9) menjadi 3. Jadi jumlah pengguna pada jalur 1 sebanyak 12 dan jumlah pengguna pada jalur 2 sebanyak 3 yang ditulis x(:, 9) = [12, 3]T . Nilai variabel t berubah menjadi 9 setelah menjalankan perintah pada baris 10. Perulangan pada baris 4 dijalankan untuk i = 4. Perintah pada baris 6 yaitu ekspresi x(1, 10) ← max{12 + 4, 0} menyebabkan x(1, 10) = 16 dan perintah x(2, 10) ← max{3 + 4, 0} menyebabkan x(2, 10) = 7. Perintah x(2, 10) ← max{7 − ⌊6.0215311⌉, 0} mengubah variabel x(2, 10) menjadi 1. Jumlah pengguna pada jalur 1 sebanyak 16 dan jumlah pengguna pada jalur 2 sebanyak 1 yang ditulis x(:, 10) = [16, 1]T . Kemudian menjalankan perintah pada baris 10 sehingga nilai variabel t berubah menjadi 10. Perulangan pada baris 4 dijalankan untuk i = 5. Perintah pada baris 6 yaitu ekspresi x(1, 11) ← max{16 + 2, 0} menyebabkan x(1, 11) = 18 dan perintah x(2, 11) ← max{1 + 1, 0} menyebabkan x(2, 11) = 2. Perintah x(2, 11) ← max{2 − ⌊7.7256608⌉, 0} mengubah variabel x(2, 11) menjadi 0. Jadi jumlah pengguna pada jalur 1 menjadi 18 dan tidak ada pengguna pada jalur 2 yang ditulis x(:, 11) = [18, 0]T . Selanjutnya menjalankan perintah pada baris 10 sehingga nilai variabel t berubah menjadi 11. Langkah berikutnya adalah menjalankan perulangan di baris 3 yang menyebabkan nilai variabel q berubah menjadi 2. Proses ini menyatakan lampu lalulintas yang menyala pada jalur 2 berubah dari hijau ke kuning. Perulangan variabel i pada baris 4 dimulai dari 1 hingga wkt(2, 2) = 4. Pertama variabel 167
i diinisialisasi dengan 1. Perintah pada baris 6 yang dapat ditulis dengan ekspresi x(1, 12) ← max{18 + 4, 0} menyebabkan x(1, 12) = 22 dan perintah x(2, 12) ← max{0 + 4, 0} menyebabkan x(2, 12) = 4. Setelah menjalankan x(2, 12) ← max{4 − ⌊2.3980131⌉, 0} variabel x(2, 12) berubah menjadi 2. Jadi jumlah pengguna pada jalur 1 sebanyak 22 dan jumlah pengguna pada jalur 2 sebanyak 2 yang ditulis x(:, 12) = [22, 2]T . Setelah menjalankan perintah pada baris 10 maka nilai variabel t menjadi 12. Perulangan pada baris 4 dijalankan untuk i = 2. Perintah pada baris 6 yaitu ekspresi x(1, 13) ← max{22 + 3, 0} menyebabkan x(1, 13) = 25 dan perintah x(2, 13) ← max{2 + 4, 0} menyebabkan x(2, 13) = 6. Perintah x(2, 13) ← max{6 − ⌊2.9760545⌉, 0} mengubah variabel x(2, 13) menjadi 3. Jumlah pengguna pada jalur 1 sebanyak 25 dan jumlah pengguna pada jalur 2 sebanyak 3 yang ditulis x(:, 13) = [25, 3]T . Kemudian menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 13. Perulangan pada baris 4 dijalankan untuk i = 3. Perintah pada baris 6 yaitu ekspresi x(1, 14) ← max{25 + 1, 0} menyebabkan x(1, 14) = 26 dan perintah x(2, 14) ← max{3 + 1, 0} menyebabkan x(2, 14) = 4. Perintah x(2, 14) ← max{4 − ⌊1.4380479⌉, 0} mengubah variabel x(2, 14) menjadi 3. Jadi saat t = 14 jumlah pengguna pada jalur 1 sebanyak 26 dan jumlah pengguna pada jalur 2 sebanyak 3 yang ditulis x(:, 14) = [26, 3]T . Selanjutnya menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 14. Nilai variabel i berubah menjadi 4 pada perulangan berikutnya. Perintah pada baris 6 yaitu ekspresi x(1, 15) ← max{26 + 1, 0} menyebabkan x(1, 15) = 27 dan perintah x(2, 15) ← max{3+3, 0} menyebabkan x(2, 15) = 6. Perintah x(2, 15) ← max{6 −⌊2.4362835⌉, 0} mengubah variabel x(2, 15) menjadi 4. Jadi saat t = 15 jumlah pengguna pada jalur 1 sebanyak 27 dan jumlah pengguna pada jalur 2 sebanyak 4 yang ditulis x(:, 15) = [27, 4]T . Kemudian menjalankan perintah pada baris 10 sehingga nilai variabel t menjadi 15. Proses dilanjutkan dengan menjalankan Algoritma 4.14 seperti terlihat pada baris 13 yang menyebabkan wkt(2, 2) berubah menjadi 3. Perintah pada baris 13 menyebabkan nilai variabel r berubah menjadi 0. Proses ini menyatakan jalur yang akan dilayani adalah jalur 1. Selanjutnya menuju ke kondisi pada perulangan while di baris 2. Jelas kondisi pada while tidak dipenuhi karena 15 = t T = 13 sehingga menuju ke baris 15. Perintah pada baris ini menghapus kolom ke 15 dari matriks x. 168
Gambar 4.18 merupakan sketsa grafik perubahan jumlah pengguna terhadap waktu yang dibahas pada Contoh 4.6. Grafik dengan warna biru menyatakan jumlah pengguna pada jalur 1 dan grafik dengan warna merah menyatakan jumlah pengguna pada jalur 2.
jumlah pengguna
25 20 15 10 5 0
0
1
2
3
4
5
6
7 8 waktu
9
10 11 12 13 14
Gambar 4.18 Grafik Perubahan Jumlah Pengguna Terhadap Waktu di Persimpangan Dengan Dua Jalur
169
170
BAB 5 IMPLEMENTASI DAN EVALUASI Pada bab ini dibahas implementasi algoritma yang didesain pada bab sebelumnya. Bahasa pemrograman yang digunakan untuk implementasi adalah Scilab karena bahasa pemrograman tersebut mempunyai fungsi matematika yang cukup lengkap. Evaluasi dilakukan terhadap hasil yang diperoleh dari simulasi.
5.1
Pengujian Sifat Pure pada Petri net
Pada bagian ini dibahas implementasi pengujian sifat pure pada Petri net. Berdasarkan keterangan pada bab sebelumnya Petri net dikatakan pure jika tidak ada place yang menjadi input sekaligus output suatu transisi. Secara matematis, pengujian sifat pure pada Petri net dapat dilakukan dengan menggunakan anggota himpunan arc. Jika terdapat place pi dan transisi tj sedemikian hingga (pi , tj ) ∈ A dan (tj , pi ) ∈ A maka Petri net tidak bersifat pure atau impure. function pure = i s p u r e ( forward , backward ) 2 pure = %t ; // i n i s i a l i s a s i
1
3 4
i f sum( f o r wa r d . ∗ backward ) > 0 pure = %f ;
end 6 endfunction 5
Pengujian secara matematis seperti yang telah dibahas sulit diimplementasikan. Untuk itu harus ditentukan bentuk pengujian lain yang ekivalen. Pengujian ini dilakukan terhadap Petri net yang direpresentasikan dalam matriks forward incidence dan backward incidence. Elemen pada baris ke i kolom ke j matriks backward incidence lebih dari nol jika dan hanya jika terdapat arc dari place pi ke transisi tj . Elemen pada baris ke i kolom ke j matriks forward incidence lebih dari nol jika dan hanya jika terdapat arc dari transisi tj ke place pi . Berdasarkan keterangan sebelumnya dapat disimpulkan place pi merupakan place input sekaligus place output dari transisi tj jika dan hanya jika hasil kali elemen pada baris ke i kolom ke j matriks forward incidence dan backward incidence lebih dari nol. Jika hasil kali semua elemen pada posisi yang sama adalah nol maka Petri net bersifat pure. 171
−−>f = [ 0 ; 1 ] ; b = [ 2 ; 0 ] ; // m a t r i k s i n c i d e n c e −−>i s p u r e ( f , b ) // P e t r i n e t b e r s i f a t pure ans = T Perhatikan bahwa f.*b = [0*2;1*0] = [0;0] sehingga hasil dari fungsi ispure adalah true yang menyatakan Petri net bersifat pure. Contoh berikut adalah Petri net yang tidak bersifat pure. −−>f = [ 0 0 ; 1 1 ] ; b = [ 2 0 ; 1 0 ] ; // m a t r i k s i n s i d e n −−>i s p u r e ( f , b ) // P e t r i n e t t i d a k b e r s i f a t pure ans F
=
Selanjutnya dibahas implementasi algoritma menentukan transisi yang enabled. Dalam menentukan transisi yang enabled dibutuhkan matriks backward incidence dan keadaan Petri net. Output algoritma ini adalah himpunan transisi yang enabled. Jika tidak ada transisi yang enabled maka algoritma ini menghasilkan himpunan kosong.
5.2
Menentukan Transisi Enabled
Algoritma menentukan transisi yang enabled diimplementasikan dalam fungsi findenabled. Input dan output fungsi ini mengacu pada input dan output algoritma menentukan transisi yang enabled. Input fungsi ini adalah backward dan mark yang masing-masing menyatakan matriks backward incidence dan keadaan Petri net. Output fungsi ini adalah idenabled yang secara umum berupa vektor baris. Elemen vektor ini adalah bilangan bulat positif yang menyatakan indeks transisi enabled. Jika tidak ada transisi yang enabled maka fungsi ini menghasilkan vektor kosong. function i d e n a b l e d = f i n d e n a b l e d ( backward , mark ) i d e n a b l e d = v e c t o r f i n d ( bool2s ( ones ( 1 , s i z e ( backward , 2 ) ) 2 1
. ∗ . mark >= backward ) , ones ( s i z e ( backward , 1 ) , 1 ) , ’c’ ) ; 4 endfunction
3
Fungsi findenabled membandingkan setiap kolom matriks backward dengan vektor mark. Proses ini dilakukan dengan membentuk matriks yang berukuran sama dengan matriks backward. Misal matriks ini dinotasikan dengan M. Setiap kolom matriks ini berisi vektor mark. Perbandingan dilakukan antara matriks M dengan matriks backward. Langkah selanjutnya adalah 172
mencari kolom dimana semua elemen matriks M lebih dari atau sama dengan matriks backward menggunakan perintah vectorfind. Jika tidak ada kolom yang memenuhi maka perintah vectorfind menghasilkan vektor kosong yang dinotasikan [ ]. Dalam menjalankan fungsi findenabled, matriks backward dan vektor mark harus didefinisikan terlebih dahulu. −−>b = [ 1 0 0 ; 0 1 1 ; 0 0 1 ; 0 0 0 ] ; // backward i n c i d e n c e −−>mark = [ 1 ; 0 ; 0 ; 0 ] ; // marking −−>i d e n = f i n d e n a b l e d ( b , mark ) // t r a n s i s i k e s a t u e n a b l e d iden = 1. Terlihat bahwa transisi yang enabled pada keadaan [1;0;0;0] adalah transisi pertama yang dinotasikan t1 . Jika terdapat banyak transisi enabled maka output dari fungsi findenabled adalah vektor baris yang berisi indeks transisi yang enabled. Jika tidak ada transisi yang enabled maka fungsi ini menghasilkan vektor kosong yang diilustrasikan dalam contoh berikut. −−>b = [ 1 0 1 ; 0 1 0 ; 0 1 1 ; 0 0 1 ] ; // backward i n c i d e n c e −−>mark = [ 0 ; 1 ; 0 ; 0 ] ; // marking −−>i d e n = f i n d e n a b l e d ( b , mark ) iden
= [ ]
Selanjutnya dibahas implementasi dari algoritma berikutnya yaitu pemfirean transisi. Algoritma ini berguna untuk mengetahui keadaan yang terjadi setelah suatu transisi difire. Jelas bahwa transisi yang dapat difire adalah transisi yang enabled.
5.3
Pemfirean Transisi
Perubahan keadaan yang terjadi setelah suatu transisi difire dapat dilihat di bagian sebelumnya pada saat membahas representasi Petri net menggunakan matriks. Pada bagian itu disimpulkan keadaan setelah transisi tj difire diperoleh dari keadaan sebelumnya ditambah kolom ke j matriks combined incidence. Ingat matriks combined incidence diperoleh dari matriks forward incidence dikurangi matriks backward incidence sehingga keadaan setelah transisi tj difire diperoleh dari keadaan sebelumnya ditambah kolom ke j matriks forward incidence dikurangi kolom ke j matriks backward incidence. Proses ini diilustrasikan dalam contoh berikut. 173
Pada contoh berikut digunakan pendekatan yang terakhir yaitu menggunakan matriks forward incidence dan matriks backward incidence. Alasan menggunakan pendekatan ini dapat dijelaskan sebagai berikut. Matriks combined incidence dapat diperoleh dari matriks forward incidence dan matriks backward incidence sedangkan hubungan sebaliknya tidak berlaku. −−>f = [ 0 0 0 ; 1 1 0 ; 1 0 0 ; 0 1 0 ] ; // f o rw a rd i n c i d e n c e −−>b = [ 1 0 1 ; 0 1 0 ; 0 1 1 ; 0 0 1 ] ; // backward i n c i d e n c e −−>x0 = [ 2 ; 0 ; 0 ; 1 ] ; // keadaan awal −−>i d e n = f i n d e n a b l e d ( b , x0 ) iden = 1. −−>x1 = x0 + f ( : , 1 ) − b ( : , 1 ) ; // p e m f i re a n t r a n s i s i t 1 −−>x1 ’ // keadaan s e t e l a h t 1 d i f i r e ans = 1. 1. 1. 1. −−>i d e n = f i n d e n a b l e d ( b , x1 ) iden = 1. 2. 3. −−>x2 = x1 + f ( : , 2 ) − b ( : , 2 ) ; // p e m f i re a n t r a n s i s i t 2 −−>x2 ’ // keadaan s e t e l a h t 1 dan t 2 d i f i r e ans = 1. 1. 0. 2. Perhatikan bahwa transisi yang difire adalah transisi yang enabled. Penentuan transisi yang enabled menggunakan fungsi findenabled. Proses pemfirean transisi di Petri net cukup sederhana sehingga tidak perlu dibuat fungsi untuk melakukan pemfirean transisi.
5.4
Pengujian Dominasi Pada bagian ini dibahas implementasi algoritma pengujian hubungan
dominasi. Input algoritma pengujian dominasi adalah dua keadaan misalnya max dan min. Outputnya adalah himpunan indeks dimana elemen di max lebih besar dari min jika max mendominasi min. Jika tidak terdapat hubungan dominasi antara dua keadaan tersebut maka algoritma ini menghasilkan himpunan kosong. Proses pengujian dominasi ada 2 tahap. Tahap pertama adalah menguji apakah semua elemen di max lebih dari atau sama dengan elemen di min. 174
Jika pengujian tahap pertama dipenuhi maka dilanjutkan dengan pengujian berikutnya. Jika pengujian pertama tidak dipenuhi yaitu terdapat elemen di max yang kurang dari elemen di min maka tidak terdapat hubungan dominasi. Pengujian berikutnya adalah mencari indeks dimana elemen di max lebih besar dari min. Jika ada indeks yang memenuhi maka terdapat hubungan dominasi. Jika semua elemen di max sama dengan min maka tidak terdapat hubungan dominasi. 1 2 3 4
function ind = i s d o m i n a t e ( big , s m a l l ) ind = [ ] ; // i n i s i a l i s a s i i f find ( s m a l l > b i g ) == [ ] // p e n g u j i a n I ind = find ( s m a l l < b i g ) ; // p e n g u j i a n I I
end 6 endfunction
5
Algoritma untuk menguji hubungan dominasi diimplementasikan dalam fungsi isdominate. Input dan output fungsi ini didasarkan pada algoritma pengujian dominasi. Input fungsi isdominate adalah dua vektor kolom yang menyatakan dua keadaan yang diuji. Output fungsi ini adalah vektor baris yang berisi indeks dimana elemen pada kedua vektor tidak sama jika terdapat hubungan dominasi. Jika tidak terdapat hubungan dominasi maka menghasilkan vektor kosong. −−>x1 = [ 1 ; 0 ; 2 ; 0 ] ; x2 = [ 1 ; 0 ; 1 ; 0 ] ; // d e f i n i s i keadaan −−>ind = i s d o m i n a t e ( x1 , x2 ) // x1 mendominasi x2 ind = 3. −−>x1 = [ 0 ; 0 ; 1 ; 1 ] ; x2 = [ 0 ; 1 ; 1 ; 0 ] ; // d e f i n i s i keadaan −−>ind = i s d o m i n a t e ( x1 , x2 ) // x1 t i d a k mendominasi x2 ind
= [ ] Dari contoh sebelumnya dapat disimpulkan keadaan [1;0;2;0] men-
dominasi [1;0;2;0]. Fungsi isdominate menghasilkan 3 karena elemen ketiga pada vektor pertama lebih besar dari elemen ketiga pada vektor kedua. Keadaan [0;0;1;1] tidak mendominasi [0;1;1;0] karena elemen kedua pada vektor pertama kurang dari elemen kedua pada vektor kedua. Terlihat fungsi isdominate menghasilkan vektor kosong yang dinotasikan [ ]. Fungsi ini merupakan salah satu bagian dari metode membangun coverability tree yang dibahas pada bagian berikutnya. 175
5.5
Membangun Coverability Tree
Algoritma membangun coverability tree bersifat rekursif sehingga algoritma ini diimplementasikan dalam fungsi rekursif. Fungsi rekursif adalah fungsi yang menjalankan dirinya sendiri. Langkah pertama yang dilakukan dalam mengimplementasikan algoritma ini adalah menentukan representasi coverability tree. Sebuah coverability tree direpresentasikan dalam dua matriks yaitu node tree dan id parent tran. Matriks node tree berisi keadaan pada setiap node di coverability tree. Elemen pada setiap kolom matriks ini menyatakan keadaan di suatu node. Berdasarkan keterangan sebelumnya dapat disimpulkan jumlah baris matriks node tree sama dengan jumlah place di Petri net dan jumlah kolomnya sama dengan jumlah node di coverability tree. Matriks id parent tran menyimpan informasi mengenai parent dan transisi dari setiap node di coverability tree. Informasi suatu node disimpan pada sebuah kolom sehingga jumlah kolom matriks ini sama dengan jumlah node di coverability tree. Matriks id parent tran mempunyai 2 baris. Baris pertama menyimpan informasi parent dan baris kedua menyimpan informasi transisi. Misal algoritma membangun coverability tree diimplementasikan di fungsi buildtree. Langkah selanjutnya adalah menentukan parameter yang dibutuhkan oleh fungsi buildtree. Parameter yang dibutuhkan oleh fungsi ini mengacu pada representasi coverability tree yaitu keadaan, parent dan transisi. Ketiga parameter tersebut masing-masing dinyatakan dalam variabel new node, id parent, id tran. Selain itu dibutuhkan informasi mengenai Petri net yang direpresentasikan dalam matriks forward incidence dan backward incidence. Perhatikan node root tidak mempunyai parent dan keadaan pada node root tidak diperoleh dengan memfire suatu transisi di Petri net. Untuk itu nilai dari id parent dan id tran untuk node root didefinisikan nol karena indeks parent dan transisi di coverability tree dimulai dari 1. Langkah pertama yang dilakukan dalam membangun coverability tree adalah pengujian hubungan dominasi. Pengujian hubungan dominasi dilakukan untuk semua node yang menjadi parent bertingkat dari new node termasuk node root. Proses ini dilakukan dengan fungsi isdominate yang telah dibahas pada bagian sebelumnya. Jika terdapat hubungan dominasi maka fungsi isdominate menghasilkan posisi dimana elemen tidak sama. Elemen keadaan 176
new node yang berada di posisi ini diberikan nilai %inf yang menyatakan notasi ω pada algoritma membangun coverability tree. id node = id parent ; while i d n o d e ˜= 0 node = n o d e t r e e ( : , i d n o d e ) ; ind = i s d o m i n a t e ( new node , node ) ; new node ( ind ) = %inf ; id node = id parent tran (1 , id node ) ; end Setelah melakukan pengujian dominasi, langkah berikutnya adalah mengupdate variabel id parent tran. Proses ini dilakukan dengan menggunakan parameter id parent dan id tran. Variabel id new node berisi indeks dari node yang baru. new data = [ i d p a r e n t ; i d t r a n ] ; i d p a r e n t t r a n = [ i d p a r e n t t r a n new data ] ; id new no de = s i z e ( i d p a r e n t t r a n , 2 ) ; Mencari keberadaan node duplicate adalah proses yang dilakukan berikutnya. Ingat keadaan dari setiap node di coverability tree disimpan di variabel node tree. Jika variabel node tree masih kosong maka new node bukan node duplicate. Jika new node adalah node duplicate maka proses yang dilakukan adalah mengupdate variabel node tree dan segera keluar dari fungsi dengan perintah return. i f n o d e t r e e ˜= [ ] i f v e c t o r f i n d ( n o d e t r e e , new node , ’c’ ) ˜= [ ] n o d e t r e e = [ n o d e t r e e new node ] ; // up d a te v a r i a b e l return ; // new node a d a l a h node d u p l i c a t e end end Jika new node bukan node duplicate maka variabel node tree juga diupdate. Proses berikutnya adalah menentukan transisi yang enabled pada keadaan new node dengan menggunakan fungsi findenabled yang telah dibahas pada bagian sebelumnya. Variabel child st berisi keadaan setelah transisi enabled yang ke i difire. Fungsi buildtree dijalankan kembali untuk setiap keadaan child st dengan menggunakan parameter new node, id parent dan id tran yang sesuai. 177
n o d e t r e e = [ n o d e t r e e new node ] ; // up d a te v a r i a b e l i d e n a b l e d = f i n d e n a b l e d ( backward , new node ) ; for i = 1 : length ( i d e n a b l e d ) c h i l d s t = new node + f o r wa r d ( : , i d e n a b l e d ( i ) ) − backward ( : , i d e n a b l e d ( i ) ) ; [ n o d e t r e e , i d p a r e n t t r a n ] = b u i l d t r e e ( forward , backward , c h i l d s t , id new no de , i d e n a b l e d ( i ) , node tree , id parent tran ) ; end Variabel yang menyatakan matriks forward incidence, backward incidence dan keadaan awal Petri net harus didefinisikan terlebih dahulu sebelum menjalankan fungsi buildtree. Selain itu variabel node tree dan id parent tran diinisialisasi dengan vektor kosong. Nilai yang diberikan ke parameter new node adalah keadaan awal Petri net sedangkan nilai yang diberikan ke parameter id parent dan id tran adalah 0. Tujuan pemberian nilai awal ini adalah menyatakan keadaan awal sebagai node root. −−>f = [ 0 1 ; 0 1 ; 1 0 ] ; b = [ 1 0 ; 1 0 ; 0 1 ] ; −−>x0 = [ 1 ; 1 ; 0 ] ; nt = [ ] ; −−>i d p t = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) idpt = 0.
1.
2.
0. nt = 1.
1.
2.
0.
1.
1. 0.
0. 1.
1. 0.
Coverability tree yang diperoleh pada contoh sebelumnya mempunyai 3 node. Keadaan yang dinyatakan oleh ketiga node tersebut masing-masing adalah nt(:,1) = [1;1;0], nt(:,2) = [0;0;1] dan nt(:,3) = [1;1;0]. Node pertama adalah node root karena semua elemen pada kolom pertama matriks idpt bernilai nol. Parent dari node kedua adalah node pertama karena elemen pada baris pertama kolom kedua matriks idpt adalah 1. Keadaan pada node kedua diperoleh dengan memfire transisi pertama karena elemen pada baris kedua kolom kedua matriks idpt adalah 1. Dengan menggunakan cara yang sama diperoleh parent dari node ketiga adalah node kedua dan keadaan pada node ketiga diperoleh dengan memfire transisi kedua. 178
−−>f = [ 0 1 0 ; 1 0 0 ; 1 0 1 ; 0 0 1 ] ; x0 = [ 1 ; 0 ; 0 ; 0 ] ; −−>b = [ 1 0 0 ; 0 1 1 ; 0 0 1 ; 0 0 0 ] ; nt = [ ] ; −−>i d p t = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) idpt = 0. 0. nt
1. 1.
2. 2.
3. 1.
4. 2.
4. 3.
2. 3.
= 1. 0.
0. 1.
1. 0.
0. 1.
1. 0.
0. 0.
0. 0.
0. 0.
1. 0.
Inf 0.
Inf 0.
Inf 0.
Inf 1.
1. 1.
Coverability tree yang telah dibahas pada bagian ini digunakan untuk melakukan analisis pada Petri net. Analisis pertama yang dibahas adalah keterbatasan (boundedness). Pada bagian selanjutnya dibahas implementasi penentuan batas atas setiap place di Petri net.
5.6
Menentukan Batas Atas Place di Petri net Operasi yang dilakukan untuk menentukan batas atas setiap place di
Petri net cukup sederhana. Batas atas place diperoleh dari maksimum token yang disimpan oleh place tersebut untuk semua keadaan di coverability tree. Misal prosedur menentukan batas atas place di Petri net diimplementasikan dalam fungsi findbound. Input fungsi ini adalah matriks yang berisi keadaan setiap node di coverability tree. Matriks ini diperoleh dari fungsi buildtree yang telah dibahas pada bagian sebelumnya. function bound = f indbo und ( n o d e t r e e ) bound = max( n o d e t r e e , ’c’ ) ; 2
1
3
endfunction Petri net yang dibahas pada contoh ini adalah Petri net antrian sederhana. Langkah yang dilakukan pertama kali adalah mendefinisikan matriks forward incidence, backward incidence dan keadaan awal Petri net. Ketiga variabel yang didefinisikan digunakan untuk menjalankan fungsi buildtree. Fungsi ini bertujuan membangun coverability tree yang menghasilkan matriks node tree dan id parent tran. Matriks node tree digunakan sebagai input fungsi findbound untuk menentukan batas atas setiap place di Petri net. Output fungsi ini adalah vektor kolom dengan elemen sebanyak jumlah place. 179
−−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; −−>x0 = [ 0 ; 1 ; 0 ] ; nt = [ ] ; −−>i d p t = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) idpt = 0. 0. nt
= 0. 1.
1. 1.
2. 1.
2. 2.
4. 1.
4. 3.
Inf 1.
Inf 1.
Inf 0.
Inf 0.
Inf 1.
0. 0. 0. 1. 1. 0. −−>f indbo und ( nt ) ’ // p l a c e pertama t i d a k t e r b a t a s ans = Inf
1.
1.
Perhatikan bahwa place pertama unbounded sedangkan place kedua dan ketiga terbatas (bounded ) dengan batas atas 1. Pada bagian selanjutnya dibahas implementasi metode menentukan place yang bounded di Petri net.
5.7
Menentukan Place yang terbatas (bounded )
Place yang terbatas adalah place yang mempunyai batas atas berhingga (finite). Penentuan place yang terbatas dapat dilakukan ketika informasi batas atas place telah tersedia. Informasi batas atas place diperoleh dari fungsi findbound yang telah dibahas pada bagian sebelumnya. Jika batas atas place berhingga maka place terbatas dan jika batas atas place tak hingga maka place tak terbatas. function i d p l a c e = boundedplace ( n o d e t r e e ) i d p l a c e = find ( f indbo und ( n o d e t r e e ) < %inf ) ; 2
1
3
endfunction Misal metode menentukan place yang bounded diimplementasikan dalam fungsi boundedplace. Proses yang dilakukan oleh fungsi ini adalah mencari place yang batas atasnya berhingga. Input fungsi findbound menjadi input fungsi boundedplace karena fungsi boundedplace menjalankan fungsi findbound. Jadi input fungsi boundedplace adalah matriks yang berisi keadaan setiap node di coverability tree dan outputnya adalah vektor baris yang berisi indeks place yang bounded. Jika tidak ada place yang bounded maka fungsi ini menghasilkan vektor kosong. 180
−−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; i d p t = [ ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; x0 = [ 0 ; 1 ; 0 ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>boundedplace ( nt ) // p l a c e kedua dan k e t i g a t e r b a t a s ans = 2. 3. Coverability tree harus dibangun terlebih dahulu sebelum menjalankan fungsi boundedplace. Hal ini disebabkan fungsi boundedplace membutuhkan input berupa matriks node tree. Matriks tersebut merupakan output dari fungsi buildtree. Perhatikan bahwa hasil yang diperoleh pada contoh ini konsisten dengan hasil yang diperoleh pada contoh di bagian sebelumnya. Pada bagian berikutnya dibahas pengujian keterbatasan pada Petri net,
5.8
Keterbatasan (boundedness) pada Petri net
Petri net bersifat terbatas (bounded ) ketika semua place pada Petri net tersebut terbatas. Suatu place terbatas jika jumlah token pada place tersebut untuk semua node di coverability tree berhingga. Jika semua node di coverability tree berhingga Petri net terbatas. Pengujian sifat terbatas pada Petri net dapat dilakukan dengan cara mencari notasi ω pada semua keadaan di coverability tree. Jika terdapat notasi ω pada satu atau lebih keadaan maka Petri net tidak terbatas. Jika tidak terdapat notasi ω untuk semua keadaan di coverability tree maka Petri net terbatas. function bounded = i s p e t r i n e t b o u n d e d ( n o d e t r e e ) bounded = %t ; // i n i s i a l i s a s i 2 i f find ( n o d e t r e e == %inf , 1 ) ˜= [ ] 3
1
4 5 6
bounded = %f ; end endfunction Input fungsi ispetrinetbounded adalah matriks yang berisi keadaan semua node di coverability tree. Matriks ini dinyatakan dengan parameter node tree. Output fungsi ini bertipe boolean yaitu true atau false. Proses yang dilakukan fungsi ini adalah mencari %inf pada matriks node tree. Jika terdapat notasi %inf pada matriks node tree maka nilai yang dihasilkan oleh fungsi ispetrinetbounded adalah false yang dinotasikan %f. Jika tidak ada 181
notasi %f pada matriks node tree maka fungsi ini menghasilkan true yang dinotasikan %t. −−>f = [ 0 1 ; 0 1 ; 1 0 ] ; x0 = [ 1 ; 1 ; 0 ] ; −−>b = [ 1 0 ; 1 0 ; 0 1 ] ; i d p t = [ ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>i s p e t r i n e t b o u n d e d ( nt ) // P e t r i n e t t e r b a t a s ans = T Coverability tree harus dibangun terlebih dahulu sebelum menjalankan fungsi ispetrinetbounded. Hal ini disebabkan input fungsi ini adalah matriks yang berisi keadaan pada setiap node di coverability tree. Matriks ini merupakan salah satu output fungsi buildtree. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; x0 = [ 0 ; 1 ; 0 ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; i d p t = [ ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>i s p e t r i n e t b o u n d e d ( nt ) // P e t r i n e t t i d a k t e r b a t a s ans = F Pada bagian selanjutnya dibahas implementasi dari pengujian sifat konservasi pada Petri net. Sifat konservasi berhubungan dengan jumlah token yang konstan pada place yang terbatas untuk semua keadaan yang dapat dicapai dari keadaan awal.
5.9
Pengujian Konservasi (Conservation) Sifat konservasi pada Petri net dapat diuji dengan mencari bobot un-
tuk setiap place yang terbatas (bounded ) di Petri net. Pengujian ini dilakukan dengan membentuk sistem persamaan linier seperti telah dibahas pada bab sebelumnya. Setiap persamaan menyatakan suatu keadaan pada coverability tree. Jika terdapat penyelesaian yang tidak trivial maka Petri net memenuhi sifat konservasi. Jika satu-satunya penyelesaian sistem persamaan linier adalah trivial maka Petri net tidak memenuhi sifat konservasi. Dengan menggunakan keterangan sebelumnya dapat disimpulkan pengujian konservasi dapat dilakukan setelah data keadaaan di coverability tree dan place yang terbatas telah tersedia. Kedua informasi tersebut dapat dicari dengan menggunakan fungsi buildtree dan boundedplace yang dibahas pada bagian sebelumnya. 182
Pengujian sifat konservasi pada Petri net diimplementasikan dalam fungsi isconservation. Fungsi ini mempunyai dua input yaitu node tree dan idbounded. Parameter node tree menyatakan keadaan pada semua node di coverability tree dan parameter idbounded menyatakan indeks place yang terbatas. Output fungsi ini adalah konservasi yang bertipe boolean. Jika konservasi bernilai true maka Petri net memenuhi sifat konservasi. Jika konservasi bernilai false maka Petri net tidak memenuhi sifat konservasi. 1 2 3 4 5 6 7 8 9
function k o n s e r v a s i = i s c o n s e r v a t i o n ( n o d e t r e e , idbounded ) // i n i s i a l i s a s i k o n s e r v a s i = %t ; node tree = node tree ’ ; [ brs , klm ] = s i z e ( n o d e t r e e ) ; n o d e t r e e = [ n o d e t r e e ( : , idbounded ) −ones ( brs , 1 ) ] ; [ x0 , kerA ] = l i n s o l v e ( n o d e t r e e , zeros ( brs , 1 ) ) ; i f kerA == [ ] & x0 == zeros ( klm +1 ,1)
k o n s e r v a s i = %f ; // s o l u s i t r i v i a l end 11 12 endfunction 10
Fungsi buildtree dan boundedplace harus dijalankan terlebih dahulu sebelum fungsi isconservation. Hal ini disebabkan parameter node tree diperoleh dari fungsi buildtree dan parameter idbounded diperoleh dari fungsi boundedplace. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; x0 = [ 0 ; 1 ; 0 ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; i d p t = [ ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>idb = boundedplace ( nt ) // i d b o un d e d idb = 2. 3. −−>i s c o n s e r v a t i o n ( nt , idb ) // s i f a t k o n s e r v a s i d i p e n u h i ans = T Pada contoh ini sifat konservasi dipenuhi oleh Petri net karena fungsi isconservation menghasilkan true. Jadi terdapat suatu bobot sehingga jumlah token pada place selalu konstan untuk setiap keadaan yang mungkin dicapai dari keadaan awal. Place yang diperhitungkan adalah place yang terbatas. 183
Berdasarkan hasil yang diperoleh di contoh sebelumnya dapat disimpulkan terdapat bobot untuk place kedua dan ketiga sehingga jumlah token pada kedua place tersebut selalu konstan untuk semua keadaan yang dapat dicapai dari keadaan awal. Analisis yang dibahas berikutnya adalah coverability keadaan. Di dalam analisis coverability keadaan terdapat pengujian untuk menentukan apakah suatu keadaan mengcover keadaan yang lain. Pada bagian selanjutnya dibahas implementasi pengujian cover antara dua keadaan.
5.10
Pengujian Cover Dua Keadaan
Pengujian cover dua keadaan diimplementasikan di fungsi iscovers. Fungsi ini bertujuan menguji dua keadaan sehingga input fungsi ini adalah dua keadaan yang dinotasikan big dan small. Output fungsi iscovers bertipe boolean. Jika keadaan big mengcover small maka fungsi ini menghasilkan true. Jika keadaan big tidak mengcover small maka fungsi iscovers menghasilkan false. 1 2 3 4
function b = i s c o v e r s ( big , s m a l l ) b = %t ; // i n i s i a l i s a s i i f find ( s m a l l > b i g ) ˜= [ ] b = %f ;
end 6 endfunction
5
Proses yang dilakukan di fungsi iscovers adalah mencari elemen pada keadaan small yang lebih dari keadaan big. Jika terdapat elemen yang memenuhi kondisi itu maka keadaan big tidak mengcover keadaan small. Jika tidak ada elemen yang memenuhi kondisi tersebut maka keadaan big mengcover keadaan small. −−>x1 = [ %inf ; 1 ; 0 ] ; x2 = [ 3 ; 1 ; 0 ] ; −−>i s c o v e r s ( x1 , x2 ) // keadaan x1 mengcover x2 ans = T −−>x1 = [ %inf ; 0 ; 1 ] ; x2 = [ %inf ; 1 ; 0 ] ; −−>i s c o v e r s ( x1 , x2 ) // keadaan x1 t i d a k mengcover x2 ans F
=
184
Pada ilustrasi yang pertama keadaan x1 mengcover x2 karena elemen di keadaan x1 lebih besar atau sama dengan x2 di semua posisi. Keadaan x1 tidak mengcover x2 pada ilustrasi berikutnya karena elemen kedua dari keadaan x1 lebih kecil dari x2 di posisi yang sama. Selanjutnya dibahas implementasi dari coverability keadaan. Analisis coverability keadaan digunakan untuk menentukan apakah suatu keadaan coverable dengan menggunakan coverability tree. Jadi sebelum melakukan analisis ini coverability tree harus dibangun terlebih dahulu.
5.11
Pengujian Coverable
Pengujian coverable digunakan untuk menentukan suatu keadaan coverable atau tidak. Misal keadaan yang diuji dinyatakan dengan mark. Keadaan mark coverable jika dan hanya jika terdapat keadaan di coverability tree yang mengcover mark. Jika tidak ada keadaan di coverability tree yang mengcover mark maka keadaan mark tidak coverable. Pengujian coverable diimplementasikan ke dalam fungsi iscoverable. Berdasarkan keterangan sebelumnya dapat disimpulkan input dari fungsi ini ada dua yaitu keadaan yang diuji dan semua keadaan pada coverability tree. 1 2 3
function ind = i s c o v e r a b l e ( n o d e t r e e , mark ) [ n , r ] = size ( node tree ) ; ind = v e c t o r f i n d ( bool2s ( n o d e t r e e >= ones ( 1 , r ) . ∗ .
mark ) , ones ( n , 1 ) , ’c’ ) ; 5 endfunction 4
Parameter node tree merupakan hasil dari fungsi buildtree. Fungsi buildtree harus dijalankan terlebih dahulu sebelum fungsi iscoverable seperti telah dibahas pada bagian sebelumnya. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; x0 = [ 0 ; 1 ; 0 ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; i d p t = [ ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>mark = [ 3 ; 0 ; 1 ] ; // keadaan yang d i u j i −−>i s c o v e r a b l e ( nt , mark ) // keadaan c o v e r a b l e ans = 4.
5.
Jika keadaan yang diuji coverable maka fungsi iscoverable menghasilkan vektor baris yang berisi indeks node di coverability tree yang mengcover 185
keadaan yang diuji. Pada contoh ini keadaan [3;1;0] coverable karena terdapat tiga keadaan di coverability tree yang mengcover keadaan tersebut. Jika keadaan yang diuji tidak coverable maka fungsi iscoverable menghasilkan vektor kosong. Suatu keadaan coverable jika dan hanya jika terdapat keadaan di coverability tree yang mengcover keadaan tersebut. Keadaan di coverability tree menyatakan keadaan yang dapat dicapai dari keadaan awal Petri net. Ketika suatu keadaan coverable maka dapat ditentukan urutan pemfirean transisi sehingga diperoleh keadaan yang mengcover keadaan tersebut. Permasalahan ini dibahas pada bagian berikutnya.
5.12
Keadaan Setelah Pemfirean Transisi yang Enabled
Misal keadaan yang diuji dinyatakan dengan mark. Proses ini dimulai dengan menguji apakah keadaan awal mengcover mark. Jika ya maka tidak ada transisi yang harus difire. Jika tidak maka dicari transisi yang enabled pada keadaan awal kemudian transisi tersebut difire. Selain keadaan setelah transisi difire, transisi yang difire juga harus disimpan. Proses ini dilakukan berulangulang hingga diperoleh keadaan yang mengcover mark kemudian menghasilkan urutan transisi yang difire untuk mencapai keadaan tersebut. Pada bagian ini dibahas bagaimana memperoleh keadaan berikutnya dan menyimpan transisi yang difire untuk mencapai keadaan tersebut. Proses ini diimplementasikan ke fungsi findchild. Input fungsi ini adalah Petri net yang dinyatakan dengan matriks forward incidence dan backward incidence. Selain itu, fungsi ini membutuhkan keadaan dan urutan transisi yang difire untuk memperoleh keadaan tersebut. Keadaan yang diinputkan boleh berjumlah lebih dari satu yang dilakukan dengan menginputkan matriks. Setiap kolom dari matriks tersebut menyatakan keadaan Petri net. Jelas bahwa jumlah baris sama dengan jumlah place di Petri net dan jumlah kolom menyatakan jumlah keadaan yang diinputkan. Jika keadaan yang diinputkan berjumlah satu maka tran merupakan vektor kolom. Jika keadaan yang diinputkan lebih dari satu maka tran merupakan matriks. Jumlah kolom matriks tran sama dengan jumlah keadaan yang diinputkan. Jumlah baris matriks tran menunjukkan banyaknya transisi yang difire untuk mencapai keadaan di mark dari keadaan awal Petri net. Fungsi ini menghasilkan dua variabel yaitu anakmark dan anaktran. Variabel anakmark merupakan keadaan yang diperoleh setelah pemfirean tran186
sisi yang enabled pada keadaan mark. Variabel anaktran berisi urutan transisi yang difire untuk mencapai keadaan anakmark dari keadaan awal Petri net. Dapat disimpulkan jumlah baris anaktran satu lebih banyak daripada jumlah baris tran. function [ anakmark , a na kt r a n ] = f i n d c h i l d ( forward , backward , mark , t r a n ) // l a n j u t a n d e k l a r a s i f u n g s i 2 3 // i n i s i a l i s a s i , program 1
4 5 6 7 8 9 10 11 12 13 14 15
anakmark = [ ] ; a na kt r a n = [ ] ; [pm, tn ] = s i z e ( f o r wa r d ) ; // jumlah t r a n s i s i nmark = s i z e ( mark , 2 ) ; // jumlah keadaan for i = 1 : tn i d e n a b l e d = v e c t o r f i n d ( bool2s ( ones ( 1 , nmark ) . ∗ . backward ( : , i ) <= mark ) , ones (pm, 1 ) , ’c’ ) ; nena bled = length ( i d e n a b l e d ) ; anakmark = [ anakmark ones ( 1 , nena bled ) . ∗ . ( f o r wa r d ( : , i )−backward ( : , i ))+mark ( : , i d e n a b l e d ) ] ; a na kt r a n = [ a na kt r a n [ t r a n ( : , i d e n a b l e d ) ; ones ( 1 , nena bled ) . ∗ . [ i ] ] ] ;
end 17 endfunction
16
Proses yang dilakukan fungsi ini dapat dijelaskan sebagai berikut. Untuk setiap transisi di Petri net, dicari keadaan di mark yang menyebabkan transisi tersebut enabled. Jika ada keadaan di mark yang menyebabkan transisi ini enabled maka pemfirean dilakukan terhadap keadaan tersebut. Keadaan setelah transisi difire disimpan di variabel anakmark dan transisi yang difire ditambahkan ke variabel anaktran. Petri net harus didefinisikan terlebih dahulu sebelum menjalankan fungsi ini. Pendefinisian Petri net dilakukan dengan membuat matriks forward incidence, backward incidence dan keadaan awal. Selain itu variabel tran juga harus didefinisikan. Variabel ini digunakan untuk menyimpan urutan transisi yang difire. Pada keadaan awal tidak ada transisi yang difire sehingga tran diinisialisasi dengan vektor kosong. Keadaan awal Petri net pada permasalahan ini adalah [0;1;0]. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; mark = [ 0 ; 1 ; 0 ] ; 187
−−>t r a n = [ ] ; [ mark , t r a n ] = f i n d c h i l d ( f , b , mark , t r a n ) tran = 1. mark = 1. 1. 0. Transisi yang enabled pada keadaan awal adalah transisi pertama. Pemfirean transisi ini menyebabkan keadaan Petri net menjadi [1;1;0]. Jika fungsi findchild dijalankan dengan input variabel f dan b yang sama dengan sebelumnya maka diperoleh hasil berikut. −−>mark = [ 1 ; 1 ; 0 ] ; −−>t r a n = 1 ; [ mark , t r a n ] = f i n d c h i l d ( f , b , mark , t r a n ) tran = 1. 1.
1. 2.
mark = 2.
0.
1. 0.
0. 1. Pada bagian berikutnya dibahas penentuan urutan pemfirean transisi.
Dalam menentukan urutan pemfirean transisi dibutuhkan penentuan transisi yang enabled pada suatu keadaan dan keadaan setelah transisi tersebut difire. Kedua hal tersebut telah dibahas pada bagian ini dan sebelumnya.
5.13
Penentuan Urutan Pemfirean Transisi
Proses menentukan urutan pemfirean transisi diimplementasikan dalam fungsi firingorder. Informasi yang dibutuhkan oleh fungsi ini adalah Petri net dan keadaan yang diuji. Petri net direpresentasikan dalam matriks forward incidence, backward incidence dan keadaan awal. Misal keadaan yang diuji dinyatakan dalam variabel mark. Jadi input fungsi firingorder adalah matriks forward incidence, matriks backward incidence, vektor keadaan awal Petri net dan vektor keadaan yang diuji. Output fungsi ini adalah matriks tran. Setiap kolom dari matriks ini menyatakan suatu urutan pemfirean transisi. Jumlah kolom matriks tran 188
menyatakan banyak urutan pemfirean transisi yang berbeda. Jumlah baris matriks ini menunjukkan banyak transisi yang harus difire. Perhatikan bahwa fungsi firingorder dapat menghasilkan urutan transisi ketika keadaan mark yang diinputkan adalah coverable. Di dalam fungsi firingorder, tidak ada proses untuk menyeleksi keadaan mark coverable atau tidak. Jika keadaan mark yang diinputkan tidak coverable maka perulangan di dalam fungsi ini dilakukan terus-menerus sehingga fungsi ini tidak menghasilkan apa-apa. Jadi sebelum menjalankan fungsi ini, keadaan mark yang diinputkan harus diuji terlebih dahulu dengan fungsi iscoverable yang telah dibahas pada bagian sebelumnya. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; −−>x0 = [ 0 ; 1 ; 0 ] ; mark = [ 3 ; 0 ; 1 ] ; −−>f i r i n g o r d e r ( f , b , x0 , mark ) ans = 1. 2. 1.
1. 1. 2.
1. 1. 1.
1. 1. 1.
1. 1.
1. 1.
2. 1.
1. 2.
Urutan pemfirean transisi yang dihasilkan oleh fungsi firingorder adalah minimum karena fungsi ini mempertimbangkan semua kemungkinan. Banyak memori yang dibutuhkan oleh fungsi ini cukup besar karena semua kemungkinan keadaan beserta urutan transisinya disimpan di memori. Pada Scilab ada batasan memori paling banyak yang dapat digunakan. Jika banyak memori yang digunakan suatu fungsi melebihi banyak memori maksimum yang diperbolehkan di Scilab maka muncul keterangan bahwa jumlah memori telah melebihi batas maksimum. Batas memori yang diperbolehkan bisa diubah dengan menggunakan fungsi stacksize. Berikut diberikan contoh input fungsi firingorder yang membutuhkan memori lebih banyak dari batas maksimum yang diperbolehkan di Scilab. Petri net dan keadaan yang diuji didefinisikan terlebih dahulu sebelum menjalankan fungsi firingorder. Keadaan yang diuji disimpan dalam variabel mark dan keadaan awal Petri net disimpan dalam variabel x0. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; −−>b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; −−>x0 = [ 0 ; 1 ; 0 ] ; mark = [ 1 6 ; 0 ; 1 ] ; 189
−−>f i r i n g o r d e r ( f , b , x0 , mark ) ; !−−error 17 s t a c k s i z e exceeded ! ( Use st ac ksiz e function t o i n c r e a s e i t ) Memory used for v a r i a b l e s : 2789508 I n t e r m e d i a t e memory needed : 2308962 To t a l memory a v a i l a b l e : 5000001 at l i n e 20 o f function f i n d c h i l d c a l l e d by : line 20 o f function f i r i n g o r d e r c a l l e d by : f i r i n g o r d e r ( f , b , x0 , mark ) ; Fungsi firingorderbig akan disusun untuk mengatasi permasalahan ini. Proses yang dilakukan oleh fungsi firingorderbig berbeda dengan fungsi firingorder. Fungsi firingorderbig tidak mempertimbangkan semua kemungkinan yang terjadi sehingga tidak ada jaminan bahwa urutan transisi yang diperoleh minimum. Keuntungan menggunakan fungsi firingorderbig adalah kebutuhan memori yang lebih kecil daripada fungsi firingorder. Ada beberapa informasi yang dibutuhkan oleh fungsi firingorderbig yaitu coverability tree, Petri net, keadaan yang diuji dan indeks node di coverability tree yang mengcover keadaan yang diuji. Urutan transisi yang difire mengacu pada lintasan dari node root ke node yang mengcover keadaan yang diuji. Coverability tree dinyatakan dalam variabel node tree dan variabel id parent tran. Petri net dinyatakan dengan matriks forward incidence dan backward incidence yang masing-masing disimpan dalam variabel f dan b. Keadaan awal dan keadaan yang diuji masing-masing disimpan di variabel x0 dan mark. Variabel idnode merupakan vektor yang berisi indeks node di coverability tree yang mengcover mark. Output yang dihasilkan fungsi firingorderbig adalah vektor baris. Vektor ini berisi indeks transisi yang menyatakan urutan transisi yang difire. Indeks transisi merupakan bilangan bulat positif berurutan yang dimulai dari 1. Berikut diberikan contoh penggunaan fungsi firingorderbig untuk menyelesaikan permasalahan sebelumnya. −−>f = [ 1 0 0 ; 0 0 1 ; 0 1 0 ] ; b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; −−>x0 = [ 0 ; 1 ; 0 ] ; i d p t = [ ] ; mark = [ 1 6 ; 0 ; 1 ] ; −−>nt = [ ] ; [ nt , i d p t ] = b u i l d t r e e ( f , b , x0 , 0 , 0 , nt , i d p t ) ; −−>i d c o v e r s = i s c o v e r a b l e ( nt , mark ) // mark c o v e r a b l e idcovers = 4. 5. 190
−−>f i r i n g o r d e r b i g ( nt , idpt , f , b , mark , i d c o v e r s ( 1 ) ) ans
= column 1. 1.
1 to 9
1. 1. 1. column 10 t o 18 1. 1. 1.
1.
1.
1.
1.
1.
1.
1.
1.
1.
2.
Perhatikan bahwa fungsi firingorderbig mampu menyelesaikan permasalahan yang tidak bisa diselesaikan dengan fungsi firingorder.
5.14
Petri net Lampu Lalulintas Implementasi Petri net lampu lalulintas dibahas pada bagian ini. Pem-
bahasan dimulai dari Petri net lampu lalulintas sederhana hingga Petri net lampu lalulintas di persimpangan yang telah direduksi. Pada setiap bagian dikaji bagaimana mengimplementasikan algoritma membangun Petri net yang direpresentasikan dalam matriks forward incidence, backward incidence dan keadaan awal. Implementasi ini juga menghasilkan vektor kolom yang menyatakan nama setiap place dan transisi Petri net. Nama place menggunakan huruf kapital untuk membedakan dengan nama transisi. 5.14.1
Lampu Lalulintas Sederhana Petri net yang dibahas pertama adalah Petri net lampu lalulintas se-
derhana. Matriks incidence Petri net ini selalu berukuran 3 × 3 seperti telah dibahas pada bab sebelumnya. Implementasi matriks forward incidence dan backward incidence mudah karena elemen kedua matriks adalah konstan. Elemen vektor yang menyatakan keadaan awal Petri net juga konstan. −−>f = [ 0 0 1 ; 1 0 0 ; 0 1 0 ] // f o rw a rd i n c i d e n c e f = 0. 0. 1. 1. 0.
0. 1.
0. 0.
−−>b = eye ( 3 , 3 ) // backward i n c i d e n c e b = 1. 0. 0. 0. 0.
1. 0.
0. 1. 191
−−>x0 = [ 0 ; 1 ; 0 ] ; x0 ’ // keadaan awal ans
= 0.
1.
0.
−−>np = [ ’M’ ; ’H’ ; ’K’ ] ; nt = [ ’mh’ ; ’hk’ ; ’km’ ] ; −−>np ’ , nt ’ // nama p l a c e dan nama t r a n s i s i ans = !M H K ! ans = !mh hk km
!
Perintah eye(3,3) menyatakan matriks identitas berukuran 3 × 3 seperti terlihat pada contoh sebelumnya. Variabel np dan nt masing-masing menyatakan nama place dan nama transisi di Petri net. Kedua variabel tersebut merupakan vektor kolom dengan elemen berupa string. 5.14.2
Lampu Lalulintas dengan Waktu Tunggu Matriks forward incidence dan backward incidence untuk Petri net
lampu lalulintas dengan waktu tunggu selalu berukuran 6 × 6. Elemen kedua matriks tergantung lama masing-masing lampu lalulintas menyala. Hal ini menyebabkan implementasi Petri net pada bagian ini lebih sulit dibandingkan sebelumnya. Langkah pertama yang dilakukan dalam mengimplementasikan permasalahan ini adalah mendefinisikan lama masing-masing lampu lalulintas menyala. Lama lampu lalulintas merah, kuning dan hijau menyala masingmasing disimpan dalam variabel tm, tk dan th. Pada contoh berikut lampu lalulintas merah, kuning dan hijau masing-masing menyala selama 8, 4 dan 6 satuan waktu. Ada beberapa cara yang dapat dilakukan untuk mengakses elemen matriks pada Scilab. Cara pertama dengan menggunakan letak elemen tersebut yang dinyatakan dengan posisi baris dan posisi kolom. Cara kedua dengan menganggap matriks sebagai vektor sehingga letak elemen dinyatakan dengan sebuah bilangan. Elemen yang mempunyai indeks 1 adalah elemen baris pertama kolom pertama. Elemen baris kedua kolom pertama mempunyai indeks 2. Semakin ke bawah indeks elemen semakin besar hingga diperoleh indeks dari elemen baris terakhir kolom pertama. Indeks berikutnya adalah elemen baris pertama kolom kedua dan semakin ke bawah indeks elemen semakin besar. Indeks elemen yang paling besar adalah adalah elemen yang berada pada baris terakhir kolom terakhir. 192
−−>tm = 8 ; tk = 4 ; th = 6 ; f = zeros ( 6 , 6 ) ; −−>f ( 2 : 1 4 : 3 0 ) = 1 ; f ( [ 9 23 3 1 ] ) = [ th ; tk ; tm ] f = 0. 1. 0.
0. 0. 6.
0. 0. 0.
0. 0. 0.
0. 0. 0.
8. 0. 0.
0. 0. 0.
0. 0. 0.
1. 0. 0.
0. 4. 0.
0. 0. 1.
0. 0. 0.
−−>b = zeros ( 6 , 6 ) ; b ( 1 : 1 4 : 2 9 ) = 1 ; −−>b ( 8 : 1 4 : 3 6 ) = [ tm ; th ; tk ] b
= 1. 0.
0. 8.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
1. 0.
0. 6.
0. 0.
0. 0.
0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 4. −−>x0 = zeros ( 6 , 1 ) ; x0 ( 3 ) = th ; x0 ’ // keadaan awal ans
= 0.
0.
6.
0.
0.
0.
−−>np = [ ’M’ ; ’BM’ ; ’H’ ; ’BH’ ; ’K’ ; ’BK’ ] ; // nama p l a c e −−>nt = [ ’mn’ ; ’mh’ ; ’hn’ ; ’hk’ ; ’kn’ ; ’km’ ] ; np ’ , nt ’ ans = !M BM H ans = !mn
mh
BH K BK
hn
hk
kn
! km
!
Ekspresi f(2:14:30) = 1 mempunyai makna yang sama dengan ekspresi f([2 16 30]) = 1. Ekspresi sebelumnya dapat dijabarkan menjadi 3 ekspresi yaitu f(2) = 1, f(16) = 1 dan f(30) = 1. Berdasarkan keterangan sebelumnya maka ketiga ekspresi sebelumnya masing-masing dapat ditulis sebagai f(2,1) = 1, f(4,3) = 1 dan f(6,5) = 1. Ekspresi yang lain misalnya f([9 23 31]) = [th;tk;tm] ekivalen dengan f(9) = th, f(23) = tk dan f(31) = tm. Variabel f dan b pada contoh tersebut masing-masing menyatakan matriks forward incidence dan backward incidence. Pernyataan zeros(6,6) 193
digunakan untuk membangun matriks nol berukuran 6×6. Variabel x0 adalah vektor kolom dengan 6 elemen yang menyatakan keadaan awal Petri net. Pernyataan x0’ digunakan untuk menampilkan transpos dari x0 yang berbentuk vektor baris. Cara yang sama digunakan untuk menampilkan nama place dan nama transisi. Selanjutnya dibahas implementasi Petri net lampu lalulintas tanpa waktu idle. 5.14.3
Lampu Lalulintas Tanpa Waktu Idle
Implementasi Petri net pada bagian ini serupa dengan sebelumnya. Hal ini disebabkan ukuran matriks forward incidence dan backward incidence selalu 6 × 6 dan elemen pada kedua matriks tergantung lama masing-masing lampu lalulintas menyala. Jadi urutan langkah yang dilakukan pada bagian ini hampir sama dengan sebelumnya. Langkah pertama yang dilakukan adalah menetapkan lama lampu lalulintas merah, kuning dan hijau menyala dengan memberikan nilai ke variabel tm, tk dan th. Kemudian dilanjutkan dengan mendefinisikan matriks forward incidence, backward incidence, keadaan awal, nama place dan nama transisi seperti terlihat pada contoh berikut. −−>tm = 8 ; tk = 4 ; th = 6 ; −−>f = zeros ( 6 , 6 ) ; f ( 1 : 1 4 : 2 9 ) = 1 ; f ( 2 : 1 4 : 3 0 ) = 1 ; −−>f ( [ 9 23 3 1 ] ) = [ th ; tk ; tm ] // f o rw a rd i n c i d e n c e f = 1. 1. 0.
0. 0. 6.
0. 0. 1.
0. 0. 0.
0. 0. 0.
8. 0. 0.
0. 0.
0. 0.
1. 0.
0. 4.
0. 1.
0. 0.
0. 0. 0. 0. 1. 0. −−>b = zeros ( 6 , 6 ) ; b ( 1 : 1 4 : 2 9 ) = 2 ; b ( 7 : 1 4 : 3 5 ) = 1 ; −−>b ( 8 : 1 4 : 3 6 ) = [ tm ; th ; tk ] − 1 // backward i n c i d e n c e b
= 2.
1.
0.
0.
0.
0.
0. 0. 0.
7. 0. 0.
0. 2. 0.
0. 1. 5.
0. 0. 0.
0. 0. 0.
0. 0.
0. 0.
0. 0.
0. 0.
2. 0.
1. 3.
194
−−>x0 = zeros ( 6 , 1 ) ; x0 ( 3 ) = th ; x0 ’ ans
= 0.
0.
6.
0.
0.
0.
−−>np = [ ’M’ ; ’BM’ ; ’H’ ; ’BH’ ; ’K’ ; ’BK’ ] ; // nama p l a c e −−>nt = [ ’mn’ ; ’mh’ ; ’hn’ ; ’hk’ ; ’kn’ ; ’km’ ] ; −−>np ’ , nt ’ // menampilkan nama p l a c e dan t r a n s i s i ans = !M BM H ans = !mn
mh
BH K BK
hn
hk
kn
! km
!
Ketiga Petri net yang telah dibahas tidak diimplementasikan dalam fungsi tertentu karena proses yang dilakukan tidak rumit. Pada bagian selanjutnya dibahas implementasi Petri net untuk lampu lalulintas di persimpangan. Perbedaan Petri net yang dibahas berikutnya dengan ketiga Petri net sebelumnya terletak pada ukuran matriks forward incidence dan backward incidence. Ukuran kedua matriks incidence pada bagian selanjutnya tergantung jumlah jalur di persimpangan. 5.14.4
Lampu Lalulintas di Persimpangan
Ukuran matriks incidence untuk Petri net pada bagian ini tergantung jumlah jalur di persimpangan seperti telah disinggung pada bagian sebelumnya. Matriks forward incidence dan backward incidence berukuran 5ℓ × 4ℓ. Vektor kolom yang menyatakan keadaan awal Petri net mempunyai 5ℓ elemen dengan ℓ menyatakan jumlah jalur di persimpangan. Algoritma membangun matriks forward incidence, backward incidence dan keadaan awal Petri net diimplementasikan dalam fungsi tlintersection karena proses yang dilakukan lebih rumit daripada sebelumnya. Selain itu fungsi tlintersection juga menghasilkan nama setiap place dan transisi di Petri net. Fungsi ini merupakan implementasi dari Algoritma 4.5 dan Algoritma 4.6. Langkah pertama yang dilakukan dalam mengimplementasikan kedua algoritma adalah menentukan input dan output fungsi tlintersection. Input fungsi ini adalah th dan tk yang merupakan vektor kolom dengan elemen sebanyak jumlah jalur di persimpangan. Output fungsi ini adalah matriks forward incidence, backward incidence, keadaan awal, nama place dan nama transisi yang masing-masing dinyatakan dengan variabel forward, backward, x0, np dan nt. Selanjutnya dibahas proses yang dilakukan oleh 195
fungsi tlintersection. Hal pertama yang dilakukan adalah menentukan jumlah jalur di persimpangan dengan menghitung banyak elemen pada variabel th. Proses ini juga bisa dilakukan dengan menghitung banyak elemen pada variabel tk karena banyak elemen yang disimpan variabel th dan tk sama. Matriks forward incidence yang dinyatakan dengan variabel forward diinisialisasi dengan matriks nol menggunakan perintah zeros. Pengisian elemen tidak nol pada matriks ini dilakukan dengan menggunakan sebuah indeks untuk mengakses elemen pada matriks seperti dibahas pada bagian sebelumnya. Indeks elemen dapat ditentukan dengan menggunakan ekspresi pada Algoritma 4.5 dan 4.6 kemudian menentukan pola indeks yang telah diperoleh. Sebagai contoh dipilih ekspresi Af (ℓ + 4i − 3, 4i − 3) ← 1 yang berada pada baris 6 di Algoritma 4.5. Pada saat i = 1 elemen yang diganti berada pada baris ℓ+1 kolom 1 yang mempunyai indeks ℓ+1. Ketika variabel i bernilai 2, elemen yang diganti berada pada baris ℓ + 5 kolom 5 yang mempunyai indeks (5 − 1)5ℓ + ℓ + 5 = 21ℓ + 5. Selisih indeks pada iterasi kedua dan pertama adalah 21ℓ + 5 − (ℓ + 1) = 20ℓ + 4. Selanjutnya ditunjukkan selisih indeks dua iterasi yang berurutan adalah 20ℓ + 4. Pada saat iterasi ke k yaitu i = k maka elemen yang diganti berada pada baris ℓ + 4k − 3 kolom 4k − 3 yang mempunyai indeks (4k − 4)5ℓ + ℓ + 4k − 3. Elemen yang diganti pada iterasi ke k + 1 berada pada baris ℓ + 4k + 1 kolom 4k + 1 yang mempunyai indeks (4k)5ℓ + ℓ + 4k + 1. Selisih indeks pada saat iterasi ke k + 1 dan iterasi ke k adalah 20ℓ + 4. Jadi terbukti bahwa selisih indeks dua iterasi yang berurutan adalah 20ℓ + 4. Dengan menggunakan hasil sebelumnya dapat ditentukan indeks elemen yang diganti pada saat iterasi terakhir yaitu indeks pada iterasi pertama ditambah 20ℓ+4 dikalikan dengan ℓ−1 yang dapat ditulis ℓ+1+(20ℓ+4)(ℓ−1) = 20ℓ2 −15ℓ−3. Perintah di Scilab untuk permasalahan ini ditulis forward(l+1:20*l+4:20*l^2-15*l-3) = 1. Penentuan perintah di Scilab untuk ekspresi yang lain bisa dilakukan dengan cara yang sama dengan sebelumnya. Dalam menjalankan fungsi tlintersection, variabel th dan tk sebaiknya didefinisikan terlebih dahulu. Kedua variabel ini merupakan vektor kolom dengan anggota sebanyak jumlah jalur di persimpangan. Elemen dari variabel th dan tk adalah bilangan bulat positif yang menyatakan lama lampu lalulintas hijau dan kuning menyala pada setiap jalur di persimpangan. Berikut diberikan contoh menjalankan fungsi tlintersection beserta hasil yang diperoleh setelah menjalankan fungsi tersebut. Pada contoh berikut persimpangan terdiri dari 2 jalur. 196
−−>th = [ 6 ; 6 ] ; −−>tk = [ 4 ; 4 ] ; [ f , b , x0 , np , nt ] = t l i n t e r s e c t i o n ( th , tk ) ; −−>f , b , x0 ’ , np ’ , nt ’ // menampilkan h a s i l f
b
= 0. 0.
0. 0.
0. 0.
10. 0.
0. 0.
0. 0.
0. 0.
0. 10.
1. 1. 0.
0. 0. 4.
0. 0. 1.
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
6. 0. 0.
0. 0.
0. 0.
1. 0.
0. 6.
0. 1.
0. 0.
0. 0.
0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
1. 0. 0.
0. 4. 0.
0. 1. 1.
0. 0. 0.
= 0.
0.
0.
0.
1.
1.
1.
1.
1. 2. 0.
1. 1. 5.
1. 0. 0.
1. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0.
0. 0.
2. 0.
1. 3.
0. 0.
0. 0.
0. 0.
0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
2. 0. 0.
1. 5. 0.
0. 0. 2.
0. 0. 1.
0.
0.
0.
0.
0.
0.
0.
3.
ans
=
0. 10. ans = !M1 M2 H1 ans ! hn1
= hk1
6.
0.
BH1 kn1
K1
km1
0. BK1 hn2
0.
0.
0.
H2
BH2
K2
hk2
kn2
km2
0.
BK2
0.
!
!
Pada masing-masing jalur, lampu lalulintas hijau menyala selama 6 satuan waktu dan lampu lalulintas kuning menyala selama 4 satuan waktu. Matriks incidence yang terbentuk berukuran 10 × 8. Selanjutnya dibahas Petri net lampu lalulintas di persimpangan setelah dilakukan proses reduksi keadaan sehingga jumlah place menjadi lebih kecil. 197
5.14.5
Lampu Lalulintas Tereduksi
Matriks incidence pada Petri net lampu lalulintas tereduksi berukuran lebih kecil dibandingkan bagian sebelumnya yaitu (ℓ + 4) × 4ℓ dengan ℓ menyatakan jumlah jalur di persimpangan. Proses membangun matriks forward incidence, backward incidence dan keadaan awal Petri net lampu lalulintas tereduksi diimplementasikan ke dalam fungsi tlreduced. Pembuatan fungsi ini mengacu pada Algoritma 4.8 dan Algoritma 4.9. Input dan output fungsi tlreduced sama dengan fungsi tlintersection. Faktor yang membedakan kedua fungsi tersebut adalah ukuran masing-masing variabel yang dihasilkan. Proses yang dilakukan untuk menyusun perintah pada fungsi ini serupa dengan fungsi tlintersection sehingga tidak dibahas lagi pada bagian ini. Urutan langkah yang dilakukan dalam menjalankan fungsi ini hampir sama dengan sebelumnya. −−>th = [ 6 ; 6 ] ; −−>tk = [ 4 ; 4 ] ; [ f , b , x0 , np , nt ] = t l r e d u c e d ( th , tk ) ; −−>f , b , x0 ’ , np ’ , nt ’ // menampilkan h a s i l f
b
= 0. 0.
0. 0.
0. 0.
10. 0.
0. 0.
0. 0.
0. 0.
0. 10.
1. 1.
0. 0.
0. 0.
6. 0.
1. 1.
0. 0.
0. 0.
6. 0.
0. 0. =
4. 0.
1. 1.
0. 0.
0. 0.
4. 0.
1. 1.
0. 0.
0. 1.
0. 1.
0. 1.
0. 1.
1. 0.
1. 0.
1. 0.
1. 0.
2. 0. 0.
1. 5. 0.
0. 0. 2.
0. 0. 1.
2. 0. 0.
1. 5. 0.
0. 0. 2.
0. 0. 1.
0.
0.
0.
3.
0.
0.
0.
3.
ans
= 0.
10.
ans = !M1 M2 ans ! hn1
H
= hk1
6.
BH K kn1
0. BK
km1
0.
0.
!
hn2
hk2 198
kn2
km2
!
Perhatikan bahwa dengan menggunakan input yang sama, ukuran matriks forward incidence dan backward incidence yang diperoleh lebih kecil yaitu 6 × 8. Hal ini mengakibatkan banyak elemen pada vektor keadaan menjadi 6. Pada bagian selanjutnya dibahas simulasi jumlah pengguna di persimpangan dengan menggunakan kedatangan berdistribusi normal dan kedatangan berdistribusi uniform diskrit.
5.15
Simulasi Jumlah Pengguna di Persimpangan
Pada bagian ini dibahas implementasi simulasi jumlah pengguna di persimpangan dengan menggunakan dua pendekatan yang berbeda. Pendekatan yang pertama menggunakan kedatangan berdistribusi normal dan pendekatan yang kedua menggunakan kedatangan berdistribusi uniform diskrit. Pendekatan pertama diimplementasikan pada fungsi intersection. Langkah yang dilakukan berikutnya adalah menentukan input yang dibutuhkan dan output yang dihasilkan oleh fungsi tersebut. Input yang dibutuhkan mengacu pada Algoritma 4.12 yaitu data yang bertipe matriks dan wsim yang menyatakan waktu simulasi. Matriks data berisi informasi mengenai keadaan awal, mean, varian dan maksimum lama lampu lalulintas menyala. Informasi ini masing-masing disimpan pada variabel x, µ, σ 2 dan maks di Algoritma 4.12. Keempat variabel tersebut mempunyai jumlah baris yang sama sehingga bisa digabung untuk membentuk matriks data. Jadi jumlah baris matriks data menunjukkan jumlah jalur yang ada di persimpangan. Jumlah kolom matriks data merupakan jumlah kolom dari variabel x, µ, σ 2 dan maks yaitu 9. Output yang dihasilkan oleh fungsi intersection adalah pgn yang bertipe matriks. Jumlah baris matriks pgn sama dengan jumlah jalur di persimpangan dan jumlah kolomnya sama dengan waktu simulasi. Elemen matriks ini merupakan bilangan bulat taknegatif yang menunjukkan jumlah pengguna di semua jalur untuk setiap waktu. Dalam menjalankan fungsi intersection, matriks x0, mu, sigma2 dan maks didefinisikan terlebih dahulu. Setelah itu keempat matriks digabungkan dalam variabel data. Jumlah jalur di persimpangan tidak perlu didefinisikan karena jumlah baris matriks data menyatakan jumlah jalur. Output fungsi intersection disimpan dalam variabel pgn yang bertipe matriks. Jumlah baris matriks ini menyatakan jumlah jalur di persimpangan yaitu 2. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 2 5 3 ; 2 5 3 ] ; maks = [ 6 4 ; 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; data = [ x0 mu sigma2 maks ] ; 199
−−>wsim = 1 3 ; pgn = i n t e r s e c t i o n ( data , wsim ) pgn
= 15. 15. 8. 16.
column
1 to 8
9. 18. column
6. 3. 21. 25. 9 t o 13
8. 14.
7. 9.
9. 10.
3. 27.
4. 22.
6. 18.
7. 15.
11. 8.
Selanjutnya dibahas pendekatan yang kedua yaitu menggunakan kedatangan berdistribusi uniform diskrit. Simulasi jumlah pengguna di persimpangan dengan kedatangan berdistribusi uniform diimplementasikan dalam fungsi intersectionext. Input fungsi ini hampir sama dengan intersection yang telah dibahas yaitu data dan wsim. Perbedaan input kedua fungsi terletak pada jumlah kolom matriks data. Matriks data yang diinputkan pada fungsi intersection mempunyai 9 kolom sedangkan matriks data yang diinputkan pada fungsi intersectionext mempunyai 8 kolom. Ada dua hal yang menyebabkan perbedaan jumlah kolom pada matriks data yaitu jumlah kolom matriks µ dan σ 2 serta terdapat input tambahan pada fungsi intersectionext yaitu vektor dmaks. Output yang dihasilkan oleh fungsi intersectionext sama dengan output yang dihasilkan oleh fungsi intersection yaitu pgn yang bertipe matriks. Jumlah baris matriks pgn menunjukkan jumlah jalur di persimpangan dan jumlah kolomnya menyatakan lama simulasi dilakukan yang masing-masing bernilai 2 dan 13. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 5 3 ; 5 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 4 ; 4 ] ; −−>data = [ x0 mu sigma2 maks dmaks ] ; wsim = 1 3 ; −−>pgn = i n t e r s e c t i o n e x t ( data , wsim ) pgn = column 1 t o 8 15. 15. 8. 8.
13. 17. column 12. 6.
11. 17.
8. 18.
9 t o 13 14. 18. 3. 2.
8. 18.
7. 21.
4. 21.
4. 16.
21. 5.
Pada contoh sebelumnya fungsi intersectionext digunakan untuk mengetahui hasil simulasi jumlah pengguna pada persimpangan dengan 2 jalur 200
selama 13 satuan waktu. Input pada contoh ini sama dengan input yang digunakan pada contoh penggunaan fungsi intersection. Pada contoh ini jumlah maksimum pengguna yang datang pada masing-masing jalur adalah 4. Output yang dihasilkan adalah matriks berukuran 2 × 13 dengan elemen berupa bilangan bulat taknegatif.
5.16
Identifikasi Petri net yang dibuat dengan PIPE Cara pembuatan Petri net di Scilab cukup rumit karena harus menge-
tahui representasi Petri net dalam matriks dan mengetahui pembuatan matriks di Scilab. Dengan menggunakan representasi grafik maka pembuatan Petri net menjadi lebih mudah. Salah satu perangkat lunak yang menggunakan representasi grafik untuk membangun Petri net adalah Platform Independent Petri net Editor yang disingkat dengan PIPE. Perangkat lunak ini menyimpan Petri net dalam file teks dengan ekstensi xml. Pada bagian ini dibahas bagaimana mengidentifikasi Petri net yang dibuat di PIPE. Salah satu tujuan dari identifikasi adalah membangun matriks incidence dan menentukan keadaan awal. Hal ini dilakukan dengan tujuan memudahkan dalam membuat Petri net dan Petri net yang dibuat dapat dianalisis dan disimulasikan dengan menggunakan fungsi-fungsi yang telah dibuat di Scilab. Proses identifikasi Petri net di PIPE diimplementasikan dalam fungsi readpipe. Input fungsi ini adalah file xml yang dihasilkan oleh PIPE. Output fungsi ini adalah matriks forward incidence, backward incidence, keadaan awal serta nama setiap place dan transisi di Petri net. Nama setiap place dan transisi masing-masing dinyatakan dengan vektor kolom yang mempunyai elemen sebanyak jumlah place dan transisi di Petri net. Elemen dari kedua vektor ini merupakan string. Berikut dituliskan contoh penggunaan fungsi readpipe untuk mengidentifikasi file queue.xml yang dibuat di PIPE. File ini berisi Petri net antrian sederhana yang telah dibahas pada bab sebelumnya. −−>s t r = ’.\ queue .xml ’ ; [ f , b , x0 , np , nt ] = r e a d p i p e ( s t r ) ; −−>f , b , x0 ’ , np ’ , nt ’ // menampilkan h a s i l f = 0. 0. 1. 1. 0.
0. 1.
0. 0. 201
b
= 0. 0.
1. 1.
0. 0.
0.
0.
1.
0.
0.
ans
= 1.
ans = !I Q B ans =
!
!a
!
s
c
Dari hasil yang diperoleh pada contoh sebelumnya dapat disimpulkan place pertama adalah I, place kedua adalah Q dan place ketiga adalah B. Urutan transisi dimulai dari yang pertama hingga ketiga adalah a, s dan c. Pada keadaan awal Petri net terdapat sebuah token pada place I sedangkan kedua place yang lain tidak mempunyai token.
5.17
Simulasi Petri net berbasis GUI Pada bagian ini dibahas implementasi dari simulasi Petri net dengan
menggunakan fasilitas Graphical User Interface (GUI) yang ada di Scilab. Tujuan implementasi dalam bentuk GUI adalah memudahkan pengguna (user ) dalam menjalankan program. Simulasi Petri net berbasis GUI diimplementasikan dalam fungsi petrinetsimulation. Dalam melakukan simulasi dibutuhkan informasi mengenai Petri net dengan keadaan awal sehingga input fungsi ini adalah matriks forward incidence, backward incidence dan keadaan awal. Pengguna lebih mudah melihat nama place atau nama transisi daripada indeks place dan indeks transisi yang berupa angka-angka. Nama setiap place dan transisi di Petri net dijadikan input fungsi petrinetsimulation agar pengguna dapat melihat nama place dan transisi. Output fungsi ini adalah keadaan Petri net yang terakhir yaitu saat keluar dari program. −−>f = [ 0 0 1 ; 1 0 0 ; 0 1 0 ] ; b = eye ( 3 , 3 ) ; m = [ 0 ; 1 ; 0 ] ; −−>np = [ ’M’ ; ’H’ ; ’K’ ] ; nt = [ ’mh’ ; ’hk’ ; ’km’ ] ; −−>m = p e t r i n e t s i m u l a t i o n ( f , b ,m, np , nt ) ; Matriks forward incidence, backward incidence, keadaan awal, nama setiap place dan transisi harus didefinisikan terlebih dahulu sebelum menja202
lankan fungsi petrinetsimulation. Nama setiap place dan transisi masingmasing berbentuk vektor kolom dengan elemen berupa string. Setelah menjalankan fungsi petrinetsimulation seperti pada contoh maka akan muncul tampilan seperti pada Gambar 5.1.
Gambar 5.1 Bobot Arc dari Transisi ke Place yaitu Elemen Tidak Nol pada Matriks Forward Incidence Pada Gambar 5.1 terlihat arc Petri net yang berasal dari transisi menuju ke place. Bilangan yang terletak di sebelah kanan merupakan bobot arc. Berdasarkan keterangan pada bab sebelumnya dapat disimpulkan bahwa bobot arc ini merupakan elemen tidak nol pada matriks forward incidence. Matriks forward incidence tidak ditampilkan seluruhnya agar tidak membingungkan pengguna dengan deretan angka-angka. Bobot arc pada Gambar 5.1 dapat diubah. Ingat bobot arc pada Petri net menunjukkan jumlah arc yang menghubungkan place dan transisi sehingga bobot arc merupakan bilangan bulat taknegatif. Jika ingin menghapus arc tertentu maka bobot arc tersebut diubah menjadi nol. Program ini dapat diakhiri dengan menekan tombol cancel. Dengan menekan tombol finish maka informasi bobot arc pada matriks forward incidence disimpan dan proses dilanjutkan ke bagian selanjutnya yaitu matriks backward incidence. Tampilan seperti pada Gambar 5.2 akan muncul setelah tombol finish ditekan. Informasi yang ditampilkan pada matriks backward incidence pada dasarnya hampir sama dengan informasi yang ditampilkan pada matriks forward incidence. Perbedaan keduanya terletak pada jenis arc yang ditampilkan. Matriks forward incidence menampilkan arc yang berasal dari transisi menuju place sedangkan matriks backward incidence menampilkan arc yang berasal dari place menuju transisi. 203
Perhatikan keterangan arc yang dituliskan di sebelah kiri bobotnya pada Gambar 5.2. Penulisan M => mh menyatakan arc yang menghubungkan place M ke transisi mh.
Gambar 5.2 Bobot Arc dari Place ke Transisi yaitu Elemen Tidak Nol pada Matriks Backward Incidence Tampilan pada Gambar 5.2 hampir sama dengan Gambar 5.1. Perbedaan kedua gambar tersebut terletak pada arah arc seperti telah dibahas sebelumnya. Jika tombol finish ditekan maka informasi bobot arc yang telah dituliskan akan disimpan dan dilanjutkan dengan menentukan keadaan awal Petri net. Keadaan awal Petri net merupakan jumlah token pada setiap place saat inisialisasi. Keadaan pada Petri net juga disebut marking. Tampilan pada Gambar 5.3 menginformasikan keadaan awal Petri net yaitu jumlah token pada setiap place saat inisialisasi. Keadaan awal Petri net dapat diubah dengan menginputkan jumlah token awal pada place yang diinginkan. Ingat jumlah token pada Petri net merupakan bilangan bulat taknegatif. Keadaan awal yang ada di Gambar 5.3 merupakan keadaan awal yang diinputkan sebagai parameter x0 pada fungsi petrinetsimulation. Dengan menekan tombol finish maka informasi keadaan awal Petri net telah diperoleh. Hingga saat ini informasi yang telah diperoleh adalah matriks forward incidence, backward incidence dan keadaan awal Petri net. Simulasi Petri net sudah dapat dilakukan dengan menggunakan ketiga informasi yang telah diperoleh. Langkah pertama yang dilakukan dalam melakukan simulasi Petri net adalah menentukan transisi yang enabled. Jika terdapat transisi yang enabled maka simulasi dapat dilakukan dengan memfire transisi yang enabled. Jika semua transisi tidak enabled maka simulasi tidak bisa dilakukan karena 204
tidak ada transisi yang enabled. Pada keadaan ini Petri net mengalami deadlock seperti telah dibahas pada bab sebelumnya.
Gambar 5.3 Jumlah Token Awal pada Setiap Place di Petri net Dengan keadaan awal yang telah ditentukan pada langkah sebelumnya dapat ditentukan transisi yang enabled dengan fungsi findenabled. Fungsi ini menghasilkan indeks transisi yang enabled di Petri net. Pada Gambar 5.4 ditampilkan nama transisi yang enabled untuk memudahkan pengguna dalam memilih transisi yang akan difire.
Gambar 5.4 Nama Transisi yang Enabled Pada Gambar 5.4 terdapat nama transisi yang enabled, pada kasus ini satu-satunya transisi yang enabled adalah hk. Ketika salah satu transisi yang enabled dipilih kemudian tombol ok ditekan maka akan muncul tampilan keadaan Petri net setelah transisi difire seperti pada Gambar 5.3. 205
Tampilan berikutnya adalah urutan pemfirean transisi yang pernah dilakukan sebelumnya seperti terlihat pada Gambar 5.5. Selain menampilkan nama transisi, informasi lain yang diperlihatkan adalah perubahan keadaan yang terjadi pada Petri net. Pada bagian atas terdapat urutan place yang digunakan untuk menyatakan vektor keadaan Petri net. Urutan ke nol menyatakan keadaan awal Petri net dan pada saat ini tidak ada transisi yang difire. Transisi yang difire pertama kali adalah hk yang menyebabkan keadaan berubah menjadi [0;0;1].
Gambar 5.5 Urutan Transisi yang Difire Sebelumnya Jika tidak ada transisi yang enabled maka tidak ada transisi yang bisa difire dan Petri net mengalami deadlock. Tampilan yang muncul bukan seperti Gambar 5.4 yang menginformasikan daftar transisi yang enabled melainkan Gambar 5.6 yang menginformasikan bahwa tidak ada transisi yang enabled. Proses dilanjutkan dengan menampilkan matriks forward incidence seperti pada Gambar 5.1 setelah menekan tombol ok.
Gambar 5.6 Petri net Mengalami Deadlock Proses ini dilakukan berulang-ulang hingga pengguna menekan cancel atau Petri net dalam kondisi deadlock. Proses mensimulasikan Petri net men206
jadi permasalahan mudah dengan menggunakan fungsi petrinetsimulation. Ada satu hal yang sulit yaitu membentuk input dari fungsi ini yang terdiri dari matriks forward incidence, backward incidence, keadaan awal, nama place dan nama transisi. Salah satu cara yang mudah dalam membuat Petri net adalah menggunakan PIPE. Pada bagian selanjutnya dibahas simulasi Petri net yang dibuat dari PIPE. Simulasi ini diimplementasikan dengan menggunakan GUI yang disediakan di Scilab.
5.18
Simulasi Petri net yang dibuat dari PIPE
Pada bagian ini dibahas implementasi dari simulasi Petri net yang dibuat di PIPE. Proses ini diimplementasikan dalam fungsi pipesimulation. Salah satu tujuan dari implementasi fungsi ini adalah mempermudah pembuatan Petri net. Proses yang dilakukan oleh fungsi ini terdiri dari tiga tahap. Tahap yang pertama adalah meminta pengguna menginputkan file xml berisi Petri net yang dibuat di PIPE. Tahap yang kedua adalah mengidentifikasi file xml yang telah diinputkan dengan menjalankan fungsi readpipe. Tahap yang terakhir adalah mensimulasikan Petri net dengan fungsi petrinetsimulation. Fungsi pipesimulation tidak membutuhkan input dan tidak menghasilkan output sehingga cara menjalankan fungsi ini relatif mudah. Cara menjalankan fungsi ini adalah mengetikkan pipesimulation pada command window di Scilab seperti contoh berikut. −−>p i p e s i m u l a t i o n ; // menjalankan f u n g s i p i p e s i m u l a t i o n Langkah pertama yang dilakukan adalah menginputkan file xml berisi Petri net yang dibuat dengan PIPE. Tampilan ini mirip dengan tampilan yang muncul ketika memilih suatu file yang akan dibuka menggunakan perangkat lunak tertentu. Proses dilanjutkan dengan menjalankan fungsi petrinetsimulation setelah memilih file xml yang akan disimulasikan. Input fungsi tersebut diperoleh dari identifikasi file xml dengan menggunakan fungsi readpipe yang telah dibahas sebelumnya. Tampilan yang pertama adalah arc yang menghubungkan transisi ke place beserta bobotnya seperti pada Gambar 5.1. Kemudian diteruskan dengan menampilkan arc yang menghubungkan place ke transisi beserta bobotnya. Langkah berikutnya adalah menentukan keadaan awal Petri net yaitu jumlah token pada setiap place saat inisialisasi yang terlihat seperti Gambar 5.3. 207
Fungsi findenabled dijalankan untuk mengetahui transisi yang enabled pada keadaan awal. Jika tidak ada transisi yang enabled maka kembali ke matriks forward incidence. Jika terdapat satu atau lebih transisi yang enabled maka dilanjutkan dengan menampilkan nama transisi yang enabled seperti pada Gambar 5.4. Pengguna dapat memilih salah satu transisi enabled yang akan difire. Tampilan berikutnya adalah keadaan Petri net setelah transisi telah difire. Rangkaian langkah ini dilakukan terus-menerus hingga pengguna menekan cancel. Proses ini tidak bisa diteruskan ketika Petri net mengalami deadlock.
Gambar 5.7 Memilih File xml yang Dibuat dengan PIPE Pada bagian berikutnya dibahas implementasi membangun coverability tree dari Petri net yang berbasis GUI. Salah satu tujuan implementasi ini adalah pengguna dapat mengetahui bentuk coverability tree dengan mudah dan cepat.
5.19
Representasi Grafik dari Coverability Tree
Metode membangun coverability tree telah diimplementasikan dalam fungsi buildtree yang telah dibahas pada bagian sebelumnya. Output yang dihasilkan oleh fungsi tersebut adalah coverability tree yang dinyatakan dengan matriks node tree dan id parent tran. Representasi dalam matriks tidak bisa dipahami dengan mudah dan cepat sehingga pada bagian ini dibahas representasi grafik dari coverability tree. Permasalahan ini diimplementasikan dalam fungsi covtree. Input fungsi ini adalah matriks forward incidence, 208
backward incidence, keadaan awal dan nama transisi. Nama transisi dijadikan input karena setiap edge pada coverability tree mempunyai bobot sebuah transisi. Langkah pertama yang dilakukan ketika fungsi covtree dijalankan adalah membangun coverability tree dengan menggunakan fungsi buildtree. Fungsi make graph yang sudah disediakan oleh Scilab digunakan untuk membuat representasi grafik dari coverability tree. Matriks forward incidence, backward incidence, keadaan awal dan nama transisi didefinisikan terlebih dahulu sebelum menjalankan fungsi covtree. −−>f = [ 0 0 1 ; 1 0 0 ; 0 1 0 ] ; b = [ 0 1 0 ; 0 1 0 ; 0 0 1 ] ; −−>x0 = [ 1 ; 0 ; 0 ] ; nt = [ ’a’ ; ’s’ ; ’c’ ] ; −−>c o v t r e e ( f , b , x0 , nt ) ; Variabel f dan b masing-masing menyatakan matriks forward incidence dan backward incidence. Vektor kolom yang berisi keadaan awal Petri net dinyatakan dalam variabel x0. Variabel nt merupakan vektor kolom yang berisi nama setiap transisi di Petri net.
Gambar 5.8 Coverability Tree Petri net Antrian Sederhana Gambar 5.8 yaitu representasi grafik dari coverability tree untuk Petri net antrian sederhana akan muncul setelah fungsi covtree dijalankan. Notasi Inf pada Scilab menyatakan takhingga. Pada coverability tree notasi yang 209
digunakan untuk menyatakan takhingga adalah ω sehingga notasi ω pada coverability tree dinyatakan dengan Inf pada Scilab. Perhatikan bahwa coverability tree pada Gambar 5.8 sama dengan coverability tree pada Gambar 2.26. Node yang terletak di paling atas merupakan node root. Di bawah setiap node terdapat keadaan yang dinyatakan oleh node tersebut dan pada setiap edge terdapat nama transisi yang menjadi bobot dari edge tersebut. Dalam menjalankan fungsi covtree, matriks forward incidence, backward incidence, keadaan awal dan nama transisi didefinisikan terlebih dahulu. Pendefinisian empat hal tersebut di Scilab dapat digantikan dengan mengidentifikasi Petri net yang dibuat di PIPE. Hal ini dilakukan agar pengguna lebih mudah dalam membangun coverability tree dari Petri net. Proses membangun coverability tree dari Petri net yang dibuat di PIPE diimplementasikan dalam fungsi covpipe. Fungsi ini tidak membutuhkan input dan tidak menghasilkan output sehingga fungsi covpipe dapat dijalankan dengan mengetikkan nama fungsi di Scilab. −−>c o v p i p e ; Langkah pertama yang dilakukan di fungsi covpipe adalah menentukan file xml berisi Petri net yang dibuat di PIPE. File xml yang dipilih kemudian diidentifikasi menggunakan fungsi readpipe. Output yang diperoleh dari fungsi readpipe digunakan sebagai input untuk fungsi covtree. Pada bagian selanjutnya dibahas implementasi simulasi jumlah pengguna di persimpangan berbasis GUI. Implementasi ini merupakan pengembangan dari fungsi intersection dan intersectionext yang telah dibahas pada bagian sebelumnya.
5.20
Simulasi Jumlah Pengguna Berbasis GUI
Matriks input yang dibutuhkan seperti mean, varian dan kondisi awal didefinisikan terlebih dahulu sebelum menjalankan fungsi intersection dan intersectionext. Latar belakang pembuatan fungsi di bagian ini adalah pendefinisian matriks input dengan ukuran yang sesuai cukup menyulitkan dan menyita waktu. Pada bagian ini pendefinisian matriks input yang berbasis GUI untuk fungsi intersection dan intersectionext masing-masing diimplementasikan dalam fungsi intersectiongui dan intersectionguiext. Diharapkan dengan menggunakan fungsi yang berbasis GUI, pengguna menjadi lebih mudah dalam menjalankan kedua fungsi tersebut. 210
Cara menjalankan fungsi intersectiongui dan intersectionguiext cukup mudah yaitu menuliskan nama fungsi pada command window. Hal ini dapat dilakukan karena kedua fungsi tersebut tidak membutuhkan input dan tidak menghasilkan output. −−>i n t e r s e c t i o n g u i ; // k e d a ta n g a n d i s t r i b u s i normal −−>i n t e r s e c t i o n g u i e x t ; // k e d a ta n g a n d i s t r i b u s i uniform Langkah pertama yang dilakukan oleh fungsi intersectiongui dan intersectionguiext adalah menentukan jumlah jalur di persimpangan dan waktu simulasi dilakukan. Tampilan yang muncul di layar seperti yang terlihat di Gambar 5.9.
Gambar 5.9 Menginputkan Jumlah Jalur dan Waktu Simulasi Waktu simulasi bisa diinputkan bersama-sama dengan jumlah jalur karena nilai dan ukuran waktu simulasi tidak tergantung jumlah jalur. Matriks input tidak bisa diinputkan bersama-sama dengan jumlah jalur karena ukuran matriks input tergantung jumlah jalur di persimpangan. Proses selanjutnya adalah menginputkan matriks input dengan ukuran yang sesuai dengan jumlah jalur di persimpangan. Jumlah data yang harus diinputkan pada fungsi intersectiongui sebanyak 9 yaitu kondisi awal, mean kedatangan, varian kedatangan, mean keberangkatan ketika lampu lalulintas hijau menyala, varian keberangkatan ketika lampu lalulintas hijau menyala, maksimum lama lampu lalulintas hijau menyala, mean keberangkatan ketika lampu lalulintas kuning menyala, varian keberangkatan ketika lampu lalulintas kuning menyala dan maksimum lama lampu lalulintas kuning menyala. Jumlah nilai yang diinputkan untuk masingmasing data sebanyak jumlah jalur di persimpangan. Gambar 5.10 digunakan 211
untuk menginputkan data keadaan awal, mean kedatangan dan varian kedatangan. Jumlah nilai yang diinputkan untuk masing-masing data sebanyak 2 karena persimpangan mempunyai 2 jalur. Nilai untuk masing-masing jalur dipisahkan dengan tanda titik koma karena variabel yang digunakan untuk menyimpan setiap data merupakan vektor kolom. Jumlah data yang harus diinputkan pada fungsi intersectionguiext sebanyak 8. Data mean kedatangan dan varian kedatangan dihapus dan diganti dengan data maksimum kedatangan.
Gambar 5.10 Menginputkan Data Kondisi Awal, Mean Kedatangan dan Varian Kedatangan pada Masing-Masing Jalur Nilai yang diinputkan untuk fungsi intersectiongui secara lengkap sebagai berikut. Pada kondisi awal terdapat 15 pengguna pada masing-masing jalur. Mean kedatangan dan varian kedatangan untuk jalur 1 masing-masing adalah 2 dan 1. Nilai mean kedatangan dan varian kedatangan pada jalur 2 sama dengan jalur 1. Pada saat lampu lalulintas hijau menyala pada jalur 1 atau jalur 2 maka mean keberangkatan pengguna pada masing-masing jalur sebesar 5 dengan varian 2. Ketika lampu lalulintas kuning menyala pada jalur 1 maka mean keberangkatan pengguna sebesar 3 dengan varian 1. Nilai mean keberangkatan dan variannya saat lampu lalulintas kuning menyala di jalur 2 sama dengan jalur 1. Lama maksimum lampu lalulintas hijau menyala pada jalur 1 dan jalur 2 masing-masing adalah 6 satuan waktu. Lama lampu lalulintas kuning menyala pada jalur 1 dan jalur 2 masing-masing adalah 4 satuan waktu. Fungsi intersectiongui menghasilkan grafik perubahan pengguna pada setiap jalur untuk waktu tertentu seperti terlihat pada Gambar 5.11. Sumbu x menyatakan waktu dan sumbu y menyatakan jumlah pengguna. Gra212
fik yang berwarna biru merupakan jumlah pengguna pada jalur 1 dan grafik yang berwarna hijau merupakan jumlah pengguna pada jalur 2.
Gambar 5.11 Simulasi Jumlah Pengguna dengan Kedatangan Berdistribusi Normal Grafik yang dihasilkan oleh fungsi intersectionguiext hampir sama dengan Gambar 5.11 sehingga tidak ditampilkan disini. Jumlah pengguna di setiap jalur pada setiap waktu dapat diketahui dengan menggunakan kedua fungsi yang telah dibahas. Lama masing-masing lampu lalulintas menyala di setiap jalur tidak bisa diperoleh dengan menggunakan kedua fungsi tersebut.
5.21
Simulasi Lampu Lalulintas di Persimpangan
Pada bagian ini dibahas simulasi lampu lalulintas di persimpangan. Hal ini bertujuan mengetahui jumlah pengguna pada masing-masing jalur dan lama masing-masing lampu lalulintas menyala pada setiap jalur di persimpangan. Ada dua macam implementasi yang dibahas pada bagian ini yaitu kedatangan berdistribusi normal dan kedatangan berdistribusi uniform. Kedatangan berdistribusi normal diimplementasikan dalam fungsi lightsgui. Input fungsi ini hampir sama dengan input fungsi intersection yaitu data, wsim dan indlampu. Parameter input data dan wsim yang digunakan disini sama dengan parameter input yang digunakan pada fungsi intersection. 213
Jumlah maksimum lampu lalulintas yang ditampilkan sebanyak 42. Persimpangan yang disimulasi boleh mempunyai lebih dari 42 jalur sehingga tidak semua lampu lalulintas dapat ditampilkan. Parameter input indlampu digunakan untuk mengatur lampu lalulintas di jalur mana yang ditampilkan. Variabel indlampu merupakan vektor yang berisi indeks jalur pada persimpangan. Ingat indeks jalur pada persimpangan dimulai dari 1. Ketiga input didefinisikan terlebih dahulu sebelum menjalankan fungsi lightsgui. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 2 5 3 ; 2 5 3 ] ; maks = [ 6 4 ; 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; data = [ x0 mu sigma2 maks ] ; −−>wsim = 1 3 ; l i g h t s g u i ( data , wsim , 1 : 2 ) ; Ekspresi 1:2 digunakan untuk membentuk vektor baris dengan elemen 1 hingga 2 yang dapat diganti dengan [1 2]. Gambar 5.12 merupakan keadaan lampu lalulintas dan jumlah pengguna setelah simulasi selesai dilakukan. Bilangan di atas lampu lalulintas menunjukkan indeks jalur di persimpangan. Bilangan yang terletak pada lampu lalulintas yang menyala menyatakan sisa waktu lampu lalulintas tersebut menyala. Jumlah pengguna di setiap jalur dinyatakan dalam bilangan di bawah lampu lalulintas.
Gambar 5.12 Simulasi Lampu Lalulintas di Persimpangan dengan Kedatangan Berdistribusi Normal Gambar 5.12 menyatakan setelah 13 satuan waktu terdapat 10 pengguna pada jalur 1 dan 9 pengguna pada jalur 2. Lampu lalulintas hijau di jalur 1 akan menyala selama 4 satuan waktu dan lampu lalulintas merah di jalur 2 akan menyala selama 6 satuan waktu. Berdasarkan keterangan sebelumnya dapat disimpulkan lampu lalulintas kuning di jalur 1 akan menyala selama 2 satuan waktu. Simulasi lampu lalulintas dengan kedatangan berdistribusi uniform diimplementasikan dalam fungsi lightsguiext. Input fungsi ini sama dengan 214
fungsi lightsgui yaitu data, wsim dan indlampu. Perbedaan terletak pada ukuran matriks data yang diinputkan. Matriks data yang diinputkan pada fungsi ini sama dengan matriks yang menjadi input fungsi intersectionext. Variabel data, wsim dan indlampu didefinisikan terlebih dahulu sebelum menjalankan fungsi ini. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 5 3 ; 5 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 4 ; 4 ] ; −−>data = [ x0 mu sigma2 maks dmaks ] ; wsim = 1 3 ; −−>l i g h t s g u i e x t ( data , wsim , 1 : 2 ) ; Pada contoh sebelumnya variabel indlampu bernilai [1 2] yaitu vektor baris dengan dua elemen. Gambar 5.13 menyatakan keadaan persimpangan setelah simulasi dilakukan selama 13 satuan waktu. Makna setiap bilangan pada gambar tersebut sama dengan makna bilangan pada Gambar 5.12 sehingga tidak dibahas lagi pada bagian ini.
Gambar 5.13 Simulasi Lampu Lalulintas di Persimpangan dengan Kedatangan Berdistribusi Uniform Dengan menggunakan kedua fungsi yang telah dibahas pada bagian ini, informasi mengenai lama lampu lalulintas menyala dapat dilihat. Hal yang merepotkan adalah mendefinisikan matriks yang menjadi input dari fungsi lightsgui atau lightsguiext. Pada bagian berikutnya dibahas bagaimana implementasi pembuatan fungsi yang berbasis GUI untuk mendefinisikan input dari kedua fungsi tersebut. Diharapkan dengan menggunakan implementasi ini maka proses yang dilakukan untuk mensimulasikan lampu lalulintas di persimpangan menjadi lebih sederhana dan lebih mudah. Pendefinisian input untuk fungsi lightsgui diimplementasikan dalam fungsi lightsimulation dan pendefinisian input untuk fungsi lightsguiext diimplementasikan dalam fungsi lightsimulationext. 215
5.22
Simulasi Lampu Lalulintas Berbasis GUI Fungsi lightsimulation dan lightsimulationext tidak membutuh-
kan input dan tidak menghasilkan output sehingga cara menjalankan kedua fungsi tersebut cukup mudah. Kedua fungsi tersebut dapat dijalankan dengan mengetikkan nama kedua fungsi tersebut pada command window. −−>l i g h t s i m u l a t i o n ; // k e d a ta n g a n d i s t r i b u s i normal −−>l i g h t s i m u l a t i o n e x t ; // k e d a ta n g a n d i s t r i b u s i uniform Proses yang dilakukan oleh kedua fungsi tersebut hampir sama sehingga pada bagian ini dibahas fungsi lightsimulation saja. Perbedaan fungsi lightsimulation dan lightsimulationext terletak pada pembuatan matriks data. Hal ini pernah terjadi sebelumnya yaitu saat mengimplementasikan fungsi intersectiongui dan intersectionguiext. Cara yang digunakan pada bagian ini sama dengan cara yang digunakan pada saat mengimplementasikan kedua fungsi tersebut.
Gambar 5.14 Menginputkan Jumlah Lampu Lalulintas yang Ditampilkan Urutan langkah yang dilakukan oleh fungsi lightsimulation hampir sama dengan fungsi intersectiongui dan urutan langkah yang dilakukan oleh fungsi lightsimulationext hampir sama dengan intersectionguiext. Langkah yang pertama adalah menginputkan jumlah jalur di persimpangan dan lama simulasi dilakukan. Selanjutnya memasukkan informasi yang diperlukan misalnya keadaan awal, mean kedatangan, varian kedatangan dan lain lain. Tampilan yang digunakan pada kedua langkah ini sama dengan tampilan yang digunakan oleh fungsi intersectiongui dan intersectionguiext. Langkah berikutnya adalah menentukan jumlah lampu lalulintas yang ditampilkan di layar seperti terlihat pada Gambar 5.14. Jumlah lampu lalu216
lintas yang ditampilkan harus kurang dari atau sama dengan 42 buah. Ingat jumlah lampu lalulintas yang ditampilkan tidak harus sama dengan jumlah jalur di persimpangan. Jumlah jalur di persimpangan boleh lebih dari 42 dengan resiko tidak semua lampu lalulintas bisa ditampilkan.
Gambar 5.15 Memilih Lampu Lalulintas yang Ditampilkan Proses selanjutnya adalah menentukan lampu lalulintas pada jalur mana yang ditampilkan. Tampilan yang muncul di layar untuk proses ini terlihat pada Gambar 5.15. Ingat indeks jalur pada persimpangan dimulai dari 1. Gambar 5.15 menyatakan lampu lalulintas yang ditampilkan adalah lampu lalulintas pada jalur 1 dan jalur 2. Tampilan yang muncul di layar terlihat seperti Gambar 5.12 dan Gambar 5.13. Selanjutnya dilakukan evaluasi terhadap hasil simulasi jumlah pengguna pada persimpangan dengan menggunakan kedatangan berdistribusi normal dan uniform diskrit.
5.23
Evaluasi Hasil Simulasi
Pada bagian ini dibahas evaluasi dari hasil simulasi jumlah pengguna di persimpangan yang telah diimplementasikan sebelumnya. Evaluasi ini meliputi waktu komputasi, jumlah maksimum pengguna dan mean pengguna pada setiap jalur di persimpangan. Data mean pengguna dan jumlah maksimum pengguna yang diperoleh dari simulasi dapat digunakan untuk menentukan kestabilan sistem. Simulasi dilakukan sebanyak 32 kali dengan input yang sama agar hasil yang diperoleh mendekati kebenaran. Simulasi yang pertama dilakukan adalah simulasi jumlah pengguna di persimpangan dengan kedatangan berdistribusi normal. 217
5.23.1
Kedatangan Berdistribusi Normal Pada simulasi yang pertama input yang diberikan sama dengan in-
put yang diberikan pada saat contoh penggunaan fungsi intersection pada bagian sebelumnya. Persimpangan terdiri dari 2 jalur dengan mean dan varian kedatangan pada masing-masing 2 dan 1. Mean dan varian pelayanan saat lampu lalulintas hijau menyala masing-masing bernilai 5 dan 2. Mean dan varian saat lampu lalulintas kuning menyala masing-masing bernilai 3 dan 1. Maksimum lama lampu lalulintas hijau dan kuning menyala selama 6 dan 4 satuan waktu. Pada keadaan awal terdapat 15 pengguna pada setiap jalur. Langkah pertama yang dilakukan adalah mendefinisikan variabel yang digunakan sebagai input. Variabel ini terdiri dari x0, mu, sigma2, maks dan wsim. Variabel wsim pada simulasi ini menyatakan jumlah iterasi waktu. Variabel maks berisi maksimum lama lampu lalulintas menyala. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 2 5 3 ; 2 5 3 ] ; maks = [ 6 4 ; 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Variabel yang telah didefinisikan kemudian digunakan sebagai input untuk fungsi intersection. Input fungsi intersection adalah data dan wsim. Variabel data dapat didefinisikan dengan menggunakan variabel yang telah didefinisikan sebelumnya yaitu x0, mu, sigma2 dan maks. −−>data = [ x0 mu sigma2 maks ] ; −−>pgn = i n t e r s e c t i o n ( data , wsim ) ; Hasil yang ingin diperoleh adalah mean jumlah pengguna dan maksimum jumlah pengguna. Fungsi untuk menghitung mean dan maksimum sudah tersedia di Scilab sehingga tidak perlu membuat program terlebih dahulu. Fungsi mean digunakan untuk mencari mean dan fungsi max digunakan untuk mencari maksimum. −−>meanpgn = mean( pgn ( : , 1 : 3 0 0 0 0 0 ) , ’c’ ) ; −−>maxpgn = max( pgn , ’c’ ) ; Contoh sebelumnya bertujuan mencari mean jumlah pengguna untuk lama simulasi 3 × 105 satuan waktu dan menghitung maksimum jumlah pengguna untuk lama simulasi 5 × 105 satuan waktu. Variabel meanpgn dan maxpgn merupakan vektor kolom dengan elemen sebanyak 2. Elemen pertama menyatakan informasi untuk jalur pertama dan elemen kedua menyatakan informasi untuk jalur kedua. Pada simulasi ini nilai mean jumlah pengguna dan maksimum jumlah pengguna dihitung setiap kelipatan 105 satuan waktu. 218
Urutan langkah yang digunakan untuk melakukan simulasi sama dengan sebelumnya sehingga pada bagian berikutnya urutan langkah tidak dibahas secara lengkap. Hal yang dibahas adalah input yang diberikan dan evaluasi hasil yang diperoleh dari simulasi. Tabel 5.1
Mean Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Normal Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
7.299 7.300
7.310 7.298
7.303 7.297
7.279 7.280
7.264 7.264
Nilai yang terdapat pada Tabel 5.1 merupakan mean dari hasil simulasi sebanyak 32 kali. Diharapkan dengan simulasi dilakukan sebanyak 32 kali maka hasil yang diperoleh cukup akurat sehingga kesimpulan yang diperoleh mendekati kebenaran. Terlihat pada Tabel 5.1 bahwa nilai mean jumlah pengguna tidak mengalami banyak perubahan. Kenyataan ini dapat digunakan sebagai dasar untuk menyimpulkan bahwa sistem stabil. Jika nilai mean semakin lama semakin besar maka dapat disimpulkan sistem tidak stabil. Nilai mean saat lama simulasi 5 × 105 satuan waktu merupakan perkiraan mean jumlah pengguna pada setiap waktu. Selanjutnya dihitung maksimum jumlah pengguna pada setiap jalur untuk lama simulasi yang berbeda-beda berdasarkan simulasi yang telah dilakukan sebelumnya. Tujuan dilakukan hal ini adalah menentukan perkiraan maksimum jumlah pengguna pada setiap jalur. Tabel 5.2
Maksimum Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Normal 105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
58.844
64.563
67.594
68.625
69.625
Jalur 2
59.031
63.000
65.906
66.969
68.563
Lama Sim
Tabel 5.2 merupakan maksimum jumlah pengguna yang diperoleh dari simulasi yang pertama. Jelas bahwa nilai maksimum dari jumlah pengguna untuk waktu simulasi yang lama selalu lebih dari atau sama dengan nilai maksimum dari jumlah pengguna untuk waktu simulasi yang sebentar. Perhatikan bahwa penambahan nilai maksimum jumlah pengguna secara umum semakin kecil untuk waktu yang semakin lama. Fakta ini menunjukkan bahwa nilai maksimum jumlah pengguna konvergen. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 21.091 detik. 219
5.23.1.1
Mean Keberangkatan Ketika Lampu Hijau Menyala
Simulasi yang kedua bertujuan mengetahui pengaruh mean keberangkatan saat lampu lalulintas hijau menyala terhadap mean jumlah pengguna dan maksimum jumlah pengguna. Input untuk simulasi yang kedua sama dengan simulasi yang pertama kecuali mean keberangkatan saat lampu lalulintas hijau menyala pada kedua jalur yang bernilai 8. Hasil simulasi yang kedua akan dibandingkan dengan hasil simulasi pertama. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 2 8 3 ; 2 8 3 ] ; maks = [ 6 4 ; 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Perintah di atas digunakan untuk mendefinisikan variabel input untuk fungsi intersection. Perhatikan variabel input yang digunakan pada simulasi ini sama dengan sebelumnya. Langkah berikutnya sama dengan bagian sebelumnya sehingga tidak dibahas di bagian ini. Tabel 5.3 berisi informasi mean jumlah pengguna dari hasil simulasi. Tabel 5.3
Mean Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Normal 105
2 × 105
3 × 105
4 × 105
5 × 105
1.918 1.915
1.916 1.916
1.917 1.916
1.916 1.916
1.916 1.915
Lama Sim Jalur 1 Jalur 2
Nilai pada Tabel 5.3 lebih kecil daripada nilai di Tabel 5.1 sehingga dapat disimpulkan peningkatan nilai mean keberangkatan saat lampu lalulintas hijau menyala menyebabkan nilai mean jumlah pengguna berkurang. Mean pengguna pada Tabel 5.3 tidak mengalami banyak perubahan sehingga sistem stabil. Berikutnya diteliti pengaruh peningkatan nilai mean keberangkatan saat lampu lalulintas hijau menyala terhadap maksimum jumlah pengguna pada jalur 1 dan jalur 2. Tabel 5.4
Maksimum Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Normal Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
16.156 22.156
16.906 22.156
17.188 22.156
17.344 22.156
18.000 22.156
Berdasarkan nilai yang terdapat pada Tabel 5.4 maka diperoleh kesimpulan peningkatan mean keberangkatan saat lampu lalulintas hijau menyala menyebabkan maksimum jumlah pengguna pada jalur 1 dan jalur 2 220
mengalami penurunan. Jadi dari simulasi yang kedua diperoleh kesimpulan bahwa peningkatan mean keberangkatan saat lampu lalulintas hijau menyala menyebabkan mean jumlah pengguna dan maksimum jumlah pengguna berkurang. Waktu yang dibutuhkan untuk melaksanakan simulasi selama 5 × 105 satuan waktu adalah 27.882 detik. Perbandingan simulasi pertama dan simulasi kedua dapat dilakukan menggunakan grafik selain menggunakan tabel seperti sebelumnya. Jumlah grafik yang diperoleh sebanyak 2 yaitu grafik jumlah pengguna pada jalur pertama dan grafik jumlah pengguna pada jalur kedua. Pada Gambar 5.16 grafik jumlah pengguna pada jalur pertama terletak di atas dan grafik jumlah pengguna pada jalur kedua terletak di bawah. Grafik yang berwarna biru menyatakan jumlah pengguna pada simulasi yang pertama dan grafik yang berwarna hijau menyatakan jumlah pengguna pada simulasi yang kedua. Simulasi jumlah pengguna dilakukan selama 100 satuan waktu.
Gambar 5.16 Perbandingan Jumlah Pengguna Simulasi yang Pertama dan Kedua Terlihat pada Gambar 5.16 bahwa jumlah pengguna pada simulasi yang kedua hampir selalu kurang dari jumlah pengguna pada simulasi yang pertama. Kenyataan ini dapat digunakan sebagai dasar untuk menyimpulkan mean jumlah pengguna pada simulasi yang kedua kurang dari mean jumlah pengguna pada simulasi yang pertama. 221
5.23.1.2
Jumlah Jalur di Persimpangan
Pada bagian ini diteliti pengaruh penambahan jalur pada mean jumlah pengguna dan maksimum jumlah pengguna. Dengan mengetahui kedua informasi tersebut diharapkan kestabilan sistem dapat diketahui. Simulasi jumlah pengguna dilakukan pada persimpangan yang mempunyai 3 jalur. −−>x0 = [ 1 5 ; 1 5 ; 1 5 ] ; mu = [ 2 5 3 ; 2 5 3 ; 2 5 3 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ; 1 2 1 ] ; maks = [ 6 4 ; 6 4 ; 6 4 ] ; −−>wsim = 5 ∗ 1 0 ˆ 5 ; Jumlah jalur di persimpangan sebanyak 3 sehingga matriks yang diinputkan mempunyai 3 baris. Berikut merupakan mean jumlah pengguna yang diperoleh dari simulasi dengan input yang telah didefinisikan sebelumnya. Tabel 5.5
Mean Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Normal Lama Sim
Jalur 1
Jalur 2
Jalur 3
5
30, 022.672 60, 026.714
30, 020.465 60, 013.782
30, 001.535 60, 017.769
10 2 × 105 3 × 105 4 × 105
89, 989.483 90, 033.198 90, 011.522 119, 961.720 120, 040.480 119, 994.600
5 × 105
149, 936.340 150, 057.930 149, 987.220
Dari Tabel 5.5 terlihat mean jumlah pengguna pada setiap jalur semakin lama semakin besar sehingga mean tidak menuju ke nilai tertentu atau tidak konvergen. Jadi sistem tidak stabil. Tabel 5.6
Maksimum Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Normal Lama Sim
Jalur 1
Jalur 2
Jalur 3
105 2 × 105
60, 059.406 60, 032.500 60, 001.500 120, 021.750 120, 066.560 120, 032.280
3 × 105 4 × 105
179, 850.190 180, 071.880 179, 948.690 239, 841.620 240, 025.530 239, 945.030
5 × 105
299, 772.500 300, 190.560 300, 001.500
Nilai maksimum jumlah pengguna pada masing-masing jalur semakin lama semakin besar seperti terlihat pada Tabel 5.6. Kenyataan ini menunjukkan maksimum jumlah pengguna tidak konvergen ke suatu nilai. Hasil ini 222
sesuai dengan kesimpulan bahwa sistem tidak stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 16.941 detik. Kesimpulan yang diperoleh pada bagian ini adalah penambahan jalur pada persimpangan dapat menyebabkan sistem menjadi tidak stabil. Tidak dapat disimpulkan setiap penambahan jalur menyebabkan sistem menjadi tidak stabil. Hal ini disebabkan kestabilan sistem dipengaruhi oleh nilai parameternya. Parameter pada sistem ini merupakan data pada setiap jalur di persimpangan. Hasil simulasi dapat direpresentasikan dalam grafik dengan menggunakan fungsi intersectiongui yang telah dibahas pada bagian sebelumnya. Terlihat dari Gambar 5.17 bahwa pada setiap periode tidak semua pengguna bisa terlayani dan semakin lama jumlah pengguna yang tidak terlayani semakin besar. Kenyataan ini dapat digunakan sebagai dasar untuk menentukan bahwa sistem tidak stabil. Gambar 5.17 mempunyai tiga grafik yang masingmasing menyatakan jumlah pengguna pada setiap jalur di persimpangan.
Gambar 5.17 Simulasi Jumlah Pengguna dengan Kedatangan Berdistribusi Normal Pada bagian berikutnya dibahas cara menstabilkan sistem dengan mengubah parameternya. Parameter yang diubah adalah mean keberangkatan saat lampu lalulintas hijau menyala pada setiap jalur. 223
5.23.1.3
Mean Keberangkatan Ketika Lampu Hijau Menyala
Pada bagian ini disimulasikan pengaruh mean keberangkatan saat lampu lalulintas hijau menyala terhadap kestabilan sistem. Secara lebih spesifik pada bagian ini diteliti apakah peningkatan mean keberangkatan bisa menyebabkan sistem menjadi stabil. Sistem yang digunakan sebagai pembanding adalah sistem pada bagian sebelumnya. −−>x0 = [ 1 5 ; 1 5 ; 1 5 ] ; mu = [ 2 8 3 ; 2 8 3 ; 2 8 3 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ; 1 2 1 ] ; maks = [ 6 4 ; 6 4 ; 6 4 ] ; −−>wsim = 5 ∗ 1 0 ˆ 5 ; Input yang digunakan untuk simulasi yang keempat sama dengan simulasi yang ketiga kecuali mean keberangkatan saat lampu lalulintas hijau menyala. Mean keberangkatan pada simulasi ini bernilai 8 sedangkan mean keberangkatan pada simulasi sebelumnya bernilai 5. Tabel 5.7
Mean Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Normal Lama Sim Jalur 1 Jalur 2 Jalur 3
105
2 × 105
3 × 105
4 × 105
5 × 105
47.632 34.794 26.325
47.212 44.877 33.089
37.461 37.271 29.189
36.750 36.494 30.617
38.628 39.939 30.983
Berdasarkan nilai mean pengguna yang tidak mengalami banyak perubahan seperti terlihat pada Tabel 5.7 maka dapat disimpulkan sistem stabil. Jadi dengan menggunakan mean keberangkatan saat lampu lalulintas hijau menyala 8 pada setiap jalur menyebabkan sistem menjadi stabil. Selanjutnya dihitung maksimum jumlah pengguna pada setiap jalur di persimpangan. Tabel 5.8
Maksimum Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Normal
Lama Sim
105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
174.219 228.313 239.938 282.625 314.031
Jalur 2 Jalur 3
174.875 241.656 256.875 288.188 332.750 149.344 218.594 240.156 268.969 280.531
Maksimum jumlah pengguna pada simulasi keempat yang tertulis pada Tabel 5.8 lebih tinggi jika dibandingkan dengan maksimum jumlah pengguna pada simulasi pertama dan simulasi kedua. Hal ini disebabkan jumlah jalur pada simulasi pertama dan kedua sebanyak 2 sedangkan jumlah jalur 224
pada simulasi keempat sebanyak 3. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 20.029 detik. Parameter yang diteliti berikutnya adalah mean kedatangan. 5.23.1.4
Mean Kedatangan
Pada simulasi yang kelima diteliti pengaruh peningkatan mean kedatangan terhadap mean jumlah pengguna dan maksimum jumlah pengguna. Mean jumlah pengguna dan maksimum jumlah pengguna dapat digunakan untuk menentukan kestabilan sistem. Input yang digunakan pada simulasi ini sama dengan simulasi yang kedua kecuali mean kedatangan pada kedua jalur. Pada simulasi yang kedua mean kedatangan pada kedua jalur bernilai 2 sedangkan pada simulasi ini mean kedatangan pada kedua jalur bernilai 3. Berikut merupakan perintah di Scilab yang digunakan untuk mendefinisikan input dari fungsi intersection. Input fungsi intersection adalah data dan wsim. Variabel data dapat didefinisikan dengan menggunakan x0, mu, sigma2 dan maks. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 3 8 3 ; 3 8 3 ] ; maks = [ 6 4 ; 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Simulasi dilakukan selama 5 × 105 satuan waktu. Diharapkan dengan waktu simulasi yang cukup lama hasil yang diperoleh mendekati kebenaran. Data yang diperoleh merupakan mean dari hasil simulasi dengan input yang sama sebanyak 32 kali. Selanjutnya dihitung mean jumlah pengguna dengan lama simulasi kelipatan dari 105 satuan waktu. Tabel 5.9
Mean Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Normal
Lama Sim
105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
196.332 275.282 292.392 331.960 365.558
Jalur 2
187.744 279.837 339.054 380.025 430.435
Nilai mean jumlah pengguna pada masing-masing jalur semakin tinggi untuk waktu simulasi yang lebih lama seperti terlihat pada Tabel 5.9. Kenyataan ini menunjukkan mean jumlah pengguna tidak menuju ke nilai tertentu sehingga kesimpulan yang diperoleh adalah sistem tidak stabil. Ketidakstabilan suatu sistem juga dapat dilihat dari maksimum jumlah pengguna selain menggunakan mean jumlah pengguna. Karakteristik maksimum jumlah 225
pengguna untuk sistem yang tidak stabil hampir sama dengan mean jumlah pengguna untuk sistem yang tidak stabil. Ciri-ciri yang mudah dilihat adalah nilai yang semakin besar sehingga tidak konvergen. Berikut merupakan data maksimum jumlah pengguna pada setiap jalur untuk lama simulasi yang berbeda-beda. Tabel 5.10
Maksimum Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Normal
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
490.531 693.281 767.906 919.500 1, 039.969 493.063 727.500 892.813 968.125 1, 161.719
Nilai maksimum jumlah pengguna semakin lama semakin besar seperti terlihat pada Tabel 5.10. Kenyataan ini mendukung kesimpulan sebelumnya bahwa sistem tidak stabil. Jadi dengan mean kedatangan yang meningkat bisa menyebabkan sistem menjadi tidak stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 5×105 satuan waktu adalah 16.804 detik. Selanjutnya dibahas cara menstabilkan sistem dengan mengurangi maksimum lama lampu lalulintas kuning menyala. 5.23.1.5
Lama Lampu Kuning Menyala
Simulasi yang keenam merupakan kelanjutan dari simulasi yang kelima. Disini nilai maksimum lama lampu lalulintas kuning menyala dikurangi dengan tujuan menstabilkan sistem. Jika sistem stabil maka dapat ditentukan mean jumlah pengguna dan maksimum jumlah pengguna. Pada simulasi ini maksimum lama lampu lalulintas kuning menyala pada kedua jalur bernilai 3 sedangkan pada simulasi sebelumnya maksimum lama lampu lalulintas kuning menyala pada kedua jalur bernilai 4. Input yang lain sama dengan input yang diberikan pada simulasi sebelumnya. Berikut merupakan perintah di Scilab yang digunakan untuk mendefinisikan input dari fungsi intersection. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 3 8 3 ; 3 8 3 ] ; maks = [ 6 3 ; 6 3 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Urutan langkah yang dilakukan untuk mendapatkan mean jumlah pengguna dan maksimum jumlah pengguna sama dengan sebelumnya sehingga tidak dibahas disini. Ide yang mendasari simulasi ini adalah kenyataan bahwa mean keberangkatan saat lampu lalulintas kuning menyala selalu kurang dari atau sama dengan mean keberangkatan saat lampu lalulintas hijau menyala. 226
Dengan mengurangi nilai maksimum lama lampu lalulintas kuning menyala diharapkan jumlah pengguna yang terlayani bertambah sehingga sistem menjadi stabil. Berikut merupakan mean jumlah pengguna yang diperoleh dari simulasi dengan input yang telah didefinisikan sebelumnya. Tabel 5.11
Mean Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Normal
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
15.931 15.917
15.977 15.974
15.981 15.979
15.991 15.988
16.001 16.001
Dari Tabel 5.11 terlihat bahwa nilai mean jumlah pengguna pada kedua jalur tidak banyak mengalami perubahan meskipun simulasi dilakukan dalam waktu yang cukup lama sehingga dapat disimpulkan sistem stabil. Selanjutnya dievaluasi maksimum jumlah pengguna pada jalur 1 dan jalur 2 dengan lama simulasi 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 satuan waktu. Tabel 5.12
Maksimum Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Normal 105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
67.688
71.875
73.219
75.031
76.344
Jalur 2
65.906
70.250
71.594
72.625
74.031
Lama Sim
Nilai maksimum jumlah pengguna menuju ke nilai tertentu seperti terlihat pada Tabel 5.12. Hasil ini sesuai dengan kesimpulan sebelumnya bahwa sistem stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 5×105 satuan waktu adalah 19.058 detik. Selanjutnya dibahas pengaruh nilai maksimum lama lampu lalulintas hijau menyala terhadap mean jumlah pengguna, maksimum jumlah pengguna dan kestabilan sistem. 5.23.1.6
Lama Lampu Hijau Menyala
Simulasi yang dibahas pada bagian ini merupakan pengembangan dari simulasi yang pertama. Input yang diubah adalah maksimum lama lampu lalulintas hijau menyala. Pada simulasi yang pertama input yang diberikan adalah 6 sedangkan pada simulasi yang ketujuh input yang diberikan adalah 16. Tujuan simulasi ini adalah mengetahui pengaruh peningkatan maksimum lama lampu lalulintas hijau menyala terhadap mean jumlah pengguna dan maksimum jumlah pengguna. Dengan mengetahui kedua informasi tersebut maka kestabilan sistem dapat ditentukan. 227
−−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 2 5 3 ; 2 5 3 ] ; maks = [ 1 6 4 ; 1 6 4 ] ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Hasil yang diperoleh dari simulasi pada bagian ini kemudian dibandingkan dengan hasil yang diperoleh dari simulasi yang pertama. Diharapkan mean jumlah pengguna dan maksimum jumlah pengguna yang diperoleh pada simulasi ketujuh lebih kecil dibandingkan dengan hasil simulasi yang pertama. Mean jumlah pengguna yang diperoleh dari simulasi yang ketujuh dapat dilihat pada Tabel 5.13. Tabel 5.13
Mean Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Normal Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
6.999 7.006
6.993 6.995
6.995 6.997
6.997 6.996
6.999 6.999
Terlihat pada Tabel 5.13 bahwa mean jumlah pengguna pada simulasi ketujuh lebih kecil daripada mean jumlah pengguna pada simulasi yang pertama. Mean jumlah pengguna pada simulasi yang pertama adalah 7.264 dan mean jumlah pengguna pada simulasi ketujuh adalah 6.999. Mean jumlah pengguna menuju ke nilai tertentu sehingga sistem stabil. Selanjutnya dihitung maksimum jumlah pengguna yang diperoleh dari simulasi ketujuh. Data maksimum jumlah pengguna dihitung dengan lama simulasi yang berbedabeda dimulai dari 105 hingga 5 × 105 dengan selisih 105 . Tabel 5.14 berisi maksimum jumlah pengguna pada setiap jalur di persimpangan. Tabel 5.14
Maksimum Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Normal 105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
49.969
53.031
54.281
54.969
55.594
Jalur 2
50.125
51.875
53.313
54.719
55.219
Lama Sim
Maksimum jumlah pengguna yang diperoleh dari simulasi yang ketujuh juga lebih kecil daripada maksimum jumlah pengguna yang diperoleh dari simulasi yang pertama. Maksimum jumlah pengguna pada simulasi pertama adalah 69 dan maksimum jumlah pengguna pada simulasi ketujuh adalah 55. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 21.181 detik. Kesimpulan yang diperoleh dari simulasi di bagian ini adalah peningkatan maksimum lama lampu lalulintas hijau menyala dapat mengurangi mean dan maksimum jumlah pengguna. 228
5.23.1.7
Keadaan Awal
Simulasi ini dilatarbelakangi fenomena kemacetan di beberapa ruas jalan pada jam sibuk. Pada saat itu terjadi kemacetan yang panjang sehingga jumlah pengguna yang terjebak kemacetan juga sangat besar. Meskipun pada saat itu jumlah pengguna sangat besar tetapi lama kelamaan arus kendaraan di tempat tersebut semakin lancar dan jumlah pengguna semakin menurun. Tujuan dari simulasi ini adalah mengetahui respon sistem terhadap jumlah pengguna yang besar. Pada bagian ini disimulasikan pengaruh peningkatan keadaan awal terhadap kestabilan sistem. Mean jumlah pengguna dan maksimum jumlah pengguna digunakan untuk menentukan kestabilan sistem. Simulasi yang digunakan sebagai pembanding adalah simulasi yang pertama. Ingat simulasi yang pertama termasuk sistem yang stabil. Input yang digunakan pada simulasi di bagian ini sama dengan simulasi yang pertama kecuali keadaan awal. Pada simulasi yang pertama terdapat 15 pengguna pada setiap jalur sedangkan pada simulasi yang kedelapan terdapat 1000 pengguna pada setiap jalur. −−>x0 = [ 1 0 0 0 ; 1 0 0 0 ] ; mu = [ 2 5 3 ; 2 5 3 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; −−>sigma2 = [ 1 2 1 ; 1 2 1 ] ; maks = [ 6 4 ; 6 4 ] ; Hasil yang ingin diketahui adalah mean dan maksimum jumlah pengguna. Pada simulasi ini terdapat perbedaan pada cara memperoleh maksimum jumlah pengguna dengan simulasi sebelumnya. Nilai maksimum jumlah pengguna pada simulasi sebelumnya diperoleh dari maksimum jumlah pengguna dengan lama simulasi yang berbeda-beda. Pada simulasi ini nilai maksimum jumlah pengguna diperoleh dari maksimum jumlah pengguna dengan selang waktu yang berbeda-beda tetapi lama simulasi yang hampir sama. Tabel 5.15
Mean Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Normal
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
56.828 55.063
32.081 31.186
23.821 23.226
19.677 19.233
17.182 16.826
Terlihat pada Tabel 5.15 bahwa mean jumlah pengguna pada kedua jalur semakin lama semakin kecil. Hal ini menunjukkan bahwa mean pengguna pada kedua jalur menuju ke nilai tertentu. Selanjutnya dihitung maksimum jumlah pengguna pada jalur 1 dan jalur 2. Maksimum jumlah pengguna dapat digunakan untuk menentukan kestabilan sistem. 229
Tabel 5.16
Maksimum Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Normal Selang Waktu Sim 1 − 1 × 105 1 × 105 − 2 × 105 2 × 105 − 3 × 105
Jalur 1
Jalur 2
1, 005.125 1, 025.594 58.000 58.125 60.344 59.313
3 × 105 − 4 × 105 4 × 105 − 5 × 105
57.906 57.344
59.219 56.063
Maksimum jumlah pengguna pada kedua jalur semakin lama semakin kecil seperti terlihat pada Tabel 5.16 sehingga dapat disimpulkan sistem stabil. Jadi sistem yang stabil akan tetap stabil ketika keadaan awal diubah menjadi lebih besar. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 20.997 detik. 5.23.2
Kedatangan Berdistribusi Uniform
Pada bagian ini dibahas beberapa simulasi dengan menggunakan kedatangan berdistribusi uniform diskrit. Variasi input yang diberikan untuk simulasi di bagian ini hampir sama dengan simulasi sebelumnya. Input yang diberikan untuk simulasi yang pertama diambil dari contoh penggunaan fungsi intersectionext. Persimpangan terdiri dari 2 jalur dengan maksimum kedatangan pada setiap jalur bernilai 4. Mean dan varian keberangkatan saat lampu lalulintas hijau menyala masing-masing bernilai 5 dan 2. Mean dan varian keberangkatan saat lampu lalulintas kuning menyala masing-masing bernilai 3 dan 1. Maksimum lama lampu lalulintas hijau dan kuning menyala adalah 6 dan 4 satuan waktu. Pada keadaan awal terdapat 15 pengguna pada setiap jalur. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 5 3 ; 5 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Perintah tersebut mendefinisikan variabel x0, mu, sigma2, maks, dmaks dan wsim. Keempat variabel yang pertama digunakan untuk mendefinisikan variabel data. Variabel data dan wsim adalah input fungsi intersectionext. −−>data = [ x0 mu sigma2 maks dmaks ] ; −−>pgn = i n t e r s e c t i o n e x t ( data , wsim ) ; Langkah berikutnya adalah menghitung mean dan maksimum jumlah pengguna. Cara yang digunakan sama dengan sebelumnya sehingga tidak di230
bahas disini. Berikut merupakan mean jumlah pengguna dengan lama simulasi kelipatan 105 satuan waktu. Tabel 5.17
Mean Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Uniform Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
9.480 9.505
9.535 9.527
9.505 9.501
9.511 9.513
9.519 9.520
Terlihat pada Tabel 5.17 bahwa nilai mean jumlah pengguna tidak mengalami banyak perubahan dan menuju ke nilai tertentu sehingga sistem stabil. Jika sistem stabil maka maksimum jumlah pengguna pada setiap jalur juga menuju ke nilai tertentu atau konvergen. Sistem yang tidak stabil merupakan kebalikan dari sistem yang stabil yaitu mean dan maksimum jumlah pengguna semakin lama semakin besar sehingga tidak menuju nilai tertentu. Selanjutnya dihitung maksimum jumlah pengguna pada jalur 1 dan jalur 2 untuk lama simulasi 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 satuan waktu. Tabel 5.18
Maksimum Jumlah Pengguna pada Simulasi Pertama dengan Kedatangan Berdistribusi Uniform 105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
78.344
85.906
90.219
92.719
94.719
Jalur 2
79.438
84.563
87.156
91.000
92.594
Lama Sim
Nilai maksimum jumlah pengguna untuk lama simulasi yang berbedabeda dapat dilihat di Tabel 5.18. Penambahan maksimum jumlah pengguna untuk waktu simulasi yang lebih lama semakin kecil sehingga maksimum jumlah pengguna menuju ke nilai tertentu. Kenyataan ini mendukung kesimpulan sebelumnya bahwa sistem stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 5 × 105 satuan waktu adalah 27.129 detik. 5.23.2.1
Mean Keberangkatan Ketika Lampu Hijau Menyala
Simulasi kedua bertujuan mengetahui pengaruh mean keberangkatan ketika lampu lalulintas hijau menyala terhadap mean dan maksimum jumlah pengguna. Pada bagian ini nilai mean keberangkatan akan ditingkatkan kemudian dilihat hasilnya. Mean keberangkatan pada simulasi kedua bernilai 9 sedangkan mean keberangkatan pada simulasi pertama bernilai 5. Seharusnya perubahan ini menyebabkan turunnya mean dan maksimum jumlah pengguna. 231
−−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 9 3 ; 9 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Perintah tersebut digunakan untuk mendefinisikan input dari fungsi intersectionext yang telah dibahas pada bagian sebelumnya. Berikut merupakan mean jumlah pengguna yang diperoleh dari simulasi kedua. Tabel 5.19
Mean Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Uniform Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
1.975 1.971
1.972 1.972
1.972 1.972
1.973 1.972
1.972 1.972
Mean jumlah pengguna yang terdapat pada Tabel 5.19 hampir tidak mengalami perubahan yaitu selalu berada di sekitar 1.97 pengguna. Kenyataan ini dapat digunakan sebagai dasar untuk menentukan sistem ini stabil. Mean jumlah pengguna pada simulasi kedua lebih kecil daripada mean jumlah pengguna simulasi pertama. Hal ini disebabkan jumlah pengguna yang dilayani pada setiap waktu hampir selalu lebih besar daripada pengguna yang datang. Selanjutnya dihitung maksimum jumlah pengguna untuk lama simulasi 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 satuan waktu. Tabel 5.20
Maksimum Jumlah Pengguna pada Simulasi Kedua dengan Kedatangan Berdistribusi Uniform
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
17.594 21.781
18.563 21.906
18.875 21.938
19.000 21.938
19.219 22.094
Terlihat pada Tabel 5.20 bahwa nilai maksimum jumlah pengguna konvergen. Kenyataan ini dilihat dari perubahan maksimum jumlah pengguna yang semakin kecil untuk lama simulasi semakin besar. Hasil ini sesuai dengan kesimpulan sebelumnya bahwa sistem stabil. Mean jumlah pengguna pada simulasi kedua lebih kecil daripada mean jumlah pengguna pada simulasi pertama. Jadi peningkatan mean keberangkatan saat lampu lalulintas hijau menyala mengakibatkan mean dan maksimum jumlah pengguna berkurang. Waktu yang dibutuhkan untuk melakukan simulasi selama 5×105 satuan waktu adalah 34.593 detik. Pada bagian selanjutnya dibahas pengaruh penambahan jalur di persimpangan terhadap mean jumlah pengguna dan maksimum jumlah pengguna sehingga dapat ditentukan kestabilan dari sistem. 232
5.23.2.2
Jumlah Jalur di Persimpangan
Simulasi yang dilakukan pada bagian ini bertujuan mengetahui pengaruh penambahan jalur pada kestabilan sistem. Kestabilan sistem dapat dilihat dari mean dan maksimum jumlah pengguna. Input yang diberikan pada simulasi ini sama dengan simulasi pertama kecuali jumlah jalur. Pada simulasi ini jumlah jalur di persimpangan sebanyak 3. Setiap jalur di persimpangan mempunyai data yang sama. Data meliputi maksimum kedatangan, maksimum lama lampu lalulintas hijau dan kuning menyala, mean dan varian keberangkatan dan keadaan awal. −−>x0 = [ 1 5 ; 1 5 ; 1 5 ] ; mu = [ 5 3 ; 5 3 ; 5 3 ] ; −−>sigma2 = [ 2 1 ; 2 1 ; 2 1 ] ; maks = [ 6 4 ; 6 4 ; 6 4 ] ; −−>dmaks = [ 4 ; 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Perintah tersebut digunakan di Scilab untuk mendefinisikan input dari fungsi intersectionext. Perhatikan bahwa setiap matriks yang didefinisikan mempunyai 3 baris. Ingat bahwa jumlah baris menyatakan jumlah jalur di persimpangan. Tabel 5.21 berisi mean jumlah pengguna pada setiap jalur untuk lama simulasi masing-masing 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 satuan waktu. Data yang berada pada tabel tersebut merupakan mean dari simulasi sebanyak 32 kali. Diharapkan dengan 32 kali simulasi maka data yang diperoleh mendekati kebenaran. Tabel 5.21
Mean Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Uniform Lama Sim
Jalur 1
Jalur 2
Jalur 3
5
30, 078.190 60, 161.928
29, 961.150 59, 958.479
29, 944.971 59, 971.679
10 2 × 105 3 × 105 4 × 105
90, 201.064 89, 956.229 89, 983.450 120, 237.110 119, 951.550 119, 987.390
5 × 105
150, 266.460 149, 950.330 149, 969.800
Mean jumlah pengguna semakin lama semakin besar sehingga tidak menuju nilai tertentu seperti terlihat pada Tabel 5.21. Hal ini dapat disimpulkan dari penambahan mean yang hampir sama untuk lama simulasi yang semakin besar. Kenyataan ini merupakan ciri sistem yang tidak stabil. Selanjutnya dihitung maksimum jumlah pengguna pada setiap jalur di persimpangan. Maksimum jumlah pengguna digunakan untuk menentukan kestabilan sistem. 233
Tabel 5.22
Maksimum Jumlah Pengguna pada Simulasi Ketiga dengan Kedatangan Berdistribusi Uniform Lama Sim
Jalur 1
Jalur 2
Jalur 3
105 2 × 105 3 × 105
60, 172.719 60, 010.938 59, 949.656 120, 358.470 119, 951.160 120, 041.590 180, 391.160 179, 988.880 179, 994.970
4 × 105 5 × 105
240, 369.120 239, 922.720 240, 030.380 300, 513.880 299, 941.380 299, 875.250
Terlihat pada Tabel 5.22 bahwa maksimum jumlah pengguna semakin lama semakin besar sehingga tidak menuju nilai tertentu. Kenyataan ini mendukung kesimpulan sebelumnya bahwa sistem tidak stabil. Jadi penambahan jumlah jalur dapat mengakibatkan sistem menjadi tidak stabil. Waktu yang dibutuhkan untuk melakukan simulasi adalah 29.568 detik. Perhatikan bahwa hasil yang diperoleh di bagian ini sama dengan hasil yang diperoleh ketika simulasi pengguna dilakukan dengan kedatangan berdistribusi normal. Pada bagian selanjutnya dibahas cara menstabilkan sistem di bagian ini dengan mengubah parameter sistem. Parameter yang diubah adalah mean keberangkatan saat lampu lalulintas hijau menyala. Parameter tersebut bernilai lebih besar daripada sebelumnya. Pengubahan ini bertujuan meningkatkan jumlah pengguna yang terlayani setiap waktu. 5.23.2.3
Mean Keberangkatan Ketika Lampu Hijau Menyala
Simulasi yang dilakukan pada bagian ini mempunyai input sama dengan simulasi sebelumnya kecuali mean keberangkatan saat lampu lalulintas hijau menyala. Mean keberangkatan setiap jalur pada simulasi ini bernilai 9 sedangkan mean keberangkatan setiap jalur di simulasi sebelumnya bernilai 5. Berikut dituliskan perintah yang digunakan di Scilab untuk mendefinisikan input simulasi ini. −−>x0 = [ 1 5 ; 1 5 ; 1 5 ] ; mu = [ 9 3 ; 9 3 ; 9 3 ] ; −−>sigma2 = [ 2 1 ; 2 1 ; 2 1 ] ; maks = [ 6 4 ; 6 4 ; 6 4 ] ; −−>dmaks = [ 4 ; 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Diharapkan dengan mengubah mean keberangkatan saat lampu lalulintas hijau menyala menjadi 9 dapat membuat sistem menjadi stabil. Selanjutnya dihitung mean jumlah pengguna pada setiap jalur untuk lama simulasi kelipatan 105 satuan waktu. 234
Tabel 5.23
Mean Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Uniform Lama Sim Jalur 1 Jalur 2 Jalur 3 105 2 × 105 3 × 105
7.232 7.236 7.240
7.226 7.235 7.238
7.234 7.238 7.239
4 × 105 5 × 105
7.237 7.238
7.234 7.236
7.237 7.237
Mean jumlah pengguna tidak mengalami banyak perubahan seperti terlihat pada Tabel 5.23. Kenyataan ini dapat digunakan sebagai dasar untuk menentukan bahwa sistem stabil. Tabel 5.24 berisi informasi maksimum jumlah pengguna pada setiap jalur di persimpangan. Tabel 5.24
Maksimum Jumlah Pengguna pada Simulasi Keempat dengan Kedatangan Berdistribusi Uniform Lama Sim Jalur 1 Jalur 2 Jalur 3 105 2 × 105
49.750 53.781
49.219 51.688
49.500 52.813
3 × 105 4 × 105
54.406 55.188
53.250 54.563
53.625 54.156
5 × 105
55.688
55.250
55.125
Terlihat pada Tabel 5.24 bahwa maksimum jumlah pengguna menuju nilai tertentu atau konvergen. Kenyataan ini mendukung kesimpulan sebelumnya bahwa sistem stabil. Waktu yang dibutuhkan untuk melakukan simulasi adalah 35.603 detik. Jadi perubahan pada mean keberangkatan menyebabkan sistem menjadi stabil. 5.23.2.4
Maksimum Kedatangan
Input yang diberikan pada simulasi di bagian ini sama dengan simulasi kedua kecuali maksimum kedatangan pada setiap jalur. Maksimum kedatangan pada simulasi ini bernilai 7. Pada simulasi kedua maksimum kedatangan bernilai 4. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 9 3 ; 9 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 7 ; 7 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Perintah tersebut digunakan untuk mendefinisikan input dari fungsi intersectionext. Selanjutnya dihitung mean jumlah pengguna pada setiap 235
jalur di persimpangan dengan lama simulasi 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 . Nilai mean jumlah pengguna dapat digunakan untuk menentukan kestabilan sistem. Mean Jumlah Pengguna pada Simulasi Kelima dengan KedaTabel 5.25 tangan Berdistribusi Uniform Lama Sim
Jalur 1
Jalur 2
5
10 2 × 105 3 × 105
10, 029.635 10, 097.153 19, 976.983 19, 994.199 29, 946.179 29, 958.720
4 × 105 5 × 105
39, 964.566 39, 922.362 49, 975.338 49, 921.662
Mean jumlah pengguna semakin lama semakin besar sehingga tidak menuju nilai tertentu seperti terlihat pada Tabel 5.25. Jadi sistem tidak stabil. Berikut merupakan maksimum jumlah pengguna pada setiap jalur di persimpangan yang diperoleh dari simulasi kelima. Tabel 5.26
Maksimum Jumlah Pengguna pada Simulasi Kelima dengan Kedatangan Berdistribusi Uniform Lama Sim
Jalur 1
Jalur 2
5
20016.344 19966.906
2 × 105 3 × 105
39919.938 39938.344 59991.125 59831.188
4 × 105 5 × 105
80085.875 79834.406 100146.31 99970.906
10
Terlihat pada Tabel 5.26 bahwa maksimum jumlah pengguna semakin lama semakin besar sehingga tidak konvergen. Kenyataan ini mendukung kesimpulan sebelumnya bahwa sistem tidak stabil. Waktu yang dibutuhkan untuk melakukan simulasi adalah 23.899 detik. Jadi peningkatan maksimum kedatangan dapat mengakibatkan sistem menjadi tidak stabil. 5.23.2.5
Lama Lampu Kuning Menyala
Simulasi yang dilakukan pada bagian ini berhubungan dengan maksimum lama lampu lalulintas kuning menyala. Input yang diberikan untuk simulasi ini sama dengan simulasi kelima kecuali maksimum lama lampu lalulintas kuning menyala. Pada simulasi ini parameter tersebut bernilai 2 sedangkan pada simulasi kelima parameter tersebut bernilai 4. 236
−−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 9 3 ; 9 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 2 ; 6 2 ] ; dmaks = [ 7 ; 7 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Tujuan pengubahan parameter adalah membuat sistem sebelumnya menjadi stabil. Kestabilan sistem dapat dilihat dari mean jumlah pengguna. Selanjutnya dihitung mean jumlah pengguna di setiap jalur untuk simulasi keenam. Tabel 5.27
Mean Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Uniform 105
2 × 105
3 × 105
4 × 105
5 × 105
Jalur 1
20.912
20.858
20.879
20.880
20.872
Jalur 2
20.926
20.861
20.878
20.885
20.876
Lama Sim
Mean jumlah pengguna tidak mengalami banyak perubahan seperti terlihat pada Tabel 5.27. Kenyataan ini menunjukkan bahwa sistem stabil. Maksimum jumlah pengguna dapat dijadikan pertimbangan dalam menentukan kestabilan sistem selain menggunakan mean jumlah pengguna. Nilai pada Tabel 5.28 merupakan maksimum jumlah pengguna pada setiap jalur untuk lama simulasi 105 , 2 × 105 , 3 × 105 , 4 × 105 dan 5 × 105 satuan waktu. Tabel 5.28
Maksimum Jumlah Pengguna pada Simulasi Keenam dengan Kedatangan Berdistribusi Uniform
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
104.688 108.719 113.313 115.094 116.625 102.469 106.344 109.781 115.125 116.813
Terlihat pada Tabel 5.28 bahwa maksimum jumlah pengguna menuju nilai tertentu. Hal ini mendukung kesimpulan sebelumnya bahwa sistem stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 5×105 satuan waktu adalah 26.081 detik. Jadi pengurangan terhadap maksimum lama lampu lalulintas kuning menyala dapat menyebabkan sistem menjadi stabil. Selanjutnya dibahas pengaruh maksimum lama lampu lalulintas hijau menyala terhadap mean dan maksimum jumlah pengguna. 5.23.2.6
Lama Lampu Hijau Menyala
Simulasi yang dilakukan pada bagian ini bertujuan mengetahui pengaruh peningkatan maksimum lama lampu lalulintas hijau menyala terhadap mean dan maksimum jumlah pengguna. Input yang diberikan pada simulasi 237
ini sama dengan simulasi pertama kecuali maksimum lama lampu lalulintas hijau menyala. Pada simulasi ini parameter tersebut bernilai 16 sedangkan pada simulasi pertama parameter tersebut bernilai 6. Berikut merupakan perintah di Scilab yang bertujuan mendefinisikan input fungsi intersectionext untuk simulasi pada bagian ini. −−>x0 = [ 1 5 ; 1 5 ] ; mu = [ 5 3 ; 5 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 1 6 4 ; 1 6 4 ] ; dmaks = [ 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Selanjutnya menentukan mean jumlah pengguna pada setiap jalur untuk lama simulasi berbeda-beda. Proses ini dapat dilakukan di Scilab dengan menggunakan fungsi mean yang telah dibahas pada bagian sebelumnya. Tabel 5.29
Mean Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Uniform Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
8.674 8.665
8.649 8.641
8.645 8.634
8.652 8.645
8.633 8.630
Terlihat pada Tabel 5.29 bahwa mean jumlah pengguna pada simulasi ketujuh lebih kecil daripada mean jumlah pengguna pada simulasi pertama. Langkah berikutnya adalah menghitung maksimum jumlah pengguna setiap jalur di persimpangan. Tabel 5.30
Maksimum Jumlah Pengguna pada Simulasi Ketujuh dengan Kedatangan Berdistribusi Uniform
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
60.281 59.313
62.438 62.688
64.250 65.531
65.625 67.156
66.250 67.969
Maksimum jumlah pengguna pada simulasi ketujuh lebih kecil daripada maksimum jumlah pengguna pada simulasi pertama seperti terlihat pada Tabel 5.30. Jadi peningkatan maksimum lama lampu lalulintas hijau menyala dapat menyebabkan mean dan maksimum jumlah pengguna berkurang. Waktu yang dibutuhkan untuk melakukan simulasi selama 5×105 satuan waktu adalah 27.286 detik. Pada bagian selanjutnya dibahas pengaruh keadaan awal terhadap mean jumlah pengguna dan maksimum jumlah pengguna. Kedua data tersebut dapat digunakan untuk menentukan kestabilan sistem. Tujuan dari simulasi ini adalah mengetahui bagaimana respon sistem ketika terdapat pengguna dalam jumlah besar. 238
5.23.2.7
Keadaan Awal
Pada bagian ini dilakukan simulasi yang berhubungan dengan keadaan awal. Tujuan simulasi ini adalah menjawab pertanyaan apakah kestabilan sistem tergantung keadaan awal. Simulasi yang digunakan sebagai pembanding adalah simulasi pertama. Input yang diberikan untuk simulasi ini sama dengan simulasi pertama kecuali keadaan awal. Keadaan awal pada simulasi ini adalah 1000 sedangkan keadaan awal pada simulasi pertama adalah 15. −−>x0 = [ 1 0 0 0 ; 1 0 0 0 ] ; mu = [ 5 3 ; 5 3 ] ; sigma2 = [ 2 1 ; 2 1 ] ; −−>maks = [ 6 4 ; 6 4 ] ; dmaks = [ 4 ; 4 ] ; wsim = 5 ∗ 1 0 ˆ 5 ; Kestabilan sistem dapat ditentukan dari mean jumlah pengguna dan maksimum jumlah pengguna untuk waktu simulasi yang cukup lama. Pertama dihitung mean jumlah pengguna pada setiap jalur di persimpangan untuk lama simulasi kelipatan dari 105 satuan waktu. Tabel 5.31
Mean Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Uniform
Lama Sim Jalur 1 Jalur 2
105
2 × 105
3 × 105
4 × 105
5 × 105
59.077 62.694
34.282 36.080
26.017 27.225
21.932 22.842
19.456 20.194
Mean jumlah pengguna semakin lama semakin kecil seperti terlihat pada Tabel 5.31. Hal ini menyatakan jumlah pengguna yang menunggu dilayani semakin lama semakin sedikit. Dari keterangan sebelumnya dapat disimpulkan sistem stabil. Tabel 5.32
Maksimum Jumlah Pengguna pada Simulasi Kedelapan dengan Kedatangan Berdistribusi Uniform Selang Waktu Sim 1 − 1 × 10
5
Jalur 1
Jalur 2
1, 009.313 1, 035.656
1 × 105 − 2 × 105 2 × 105 − 3 × 105
79.594 78.375
77.938 76.969
3 × 105 − 4 × 105 4 × 105 − 5 × 105
83.563 75.344
85.000 81.906
Terlihat pada Tabel 5.32 bahwa maksimum jumlah pengguna tidak mengalami kenaikan terus-menerus. Hal ini merupakan indikasi bahwa sistem stabil. Waktu yang dibutuhkan untuk melakukan simulasi selama 105 satuan waktu adalah 26.966 detik. 239
240
BAB 6 PENUTUP Pada bab ini dituliskan kesimpulan yang diperoleh dari hasil analisis dan simulasi yang telah dilakukan sebelumnya. Selain itu disini juga dituliskan saran untuk penelitian berikutnya.
6.1
Kesimpulan Berikut merupakan kesimpulan yang didapatkan secara analitis mau-
pun secara empiris selama melakukan penelitian. 1. Petri net lampu lalulintas di persimpangan mempunyai 5ℓ place dengan ℓ menyatakan jumlah jalur di persimpangan. 2. Jumlah place menjadi ℓ + 4 setelah dilakukan reduksi pada Petri net lampu lalulintas di persimpangan yang mempunyai jalur sebanyak ℓ. 3. Jumlah pengguna pada setiap jalur dapat disimulasikan menggunakan kedatangan pengguna dan jumlah pengguna yang dilayani berdistribusi normal. Selain itu jumlah pengguna di setiap jalur dapat disimulasikan menggunakan kedatangan pengguna berdistribusi uniform dan jumlah pengguna yang dilayani berdistribusi normal. 4. Kestabilan model dapat ditentukan dengan memperhatikan nilai mean dan maksimum jumlah pengguna di setiap jalur untuk waktu simulasi yang cukup lama.
6.2
Saran
Pada penelitian ini jumlah pengguna yang dilayani ketika lampu lalulintas hijau menyala berdistribusi normal dengan mean dan varian yang sama. Kenyataannya jumlah pengguna yang dilayani ketika lampu lalulintas hijau baru menyala relatif kecil karena sebelumnya pengguna dalam keadaan berhenti. Semakin lama jumlah pengguna yang dilayani semakin banyak hingga mencapai batas tertentu. Lampu lalulintas kuning digunakan untuk memberikan tanda kepada pengguna bahwa lampu lalulintas merah segera menyala. Hal ini disebabkan pengguna tidak mengetahui dengan pasti kapan lampu lalulintas merah akan 241
menyala. Petri net yang dibahas pada penelitian ini mencantumkan lama setiap lampu lalulintas menyala kepada pengguna. Pengguna bisa mengetahui kapan lampu lalulintas merah menyala. Jadi manfaat lampu lalulintas kuning menjadi berkurang. Pada penelitian selanjutnya dapat dikaji bagaimana membangun model Petri net lampu lalulintas yang terdiri dari merah dan hijau saja. Diharapkan dengan menggunakan 2 lampu, jumlah pengguna yang dilayani semakin bertambah.
242
LAMPIRAN A SOURCE CODE Pada lampiran ini dituliskan source code Scilab secara lengkap. Source code ini terdiri dari beberapa jenis file yang dibedakan dengan ekstensi. Ekstensi yang digunakan adalah sci dan sce. File yang berekstensi sci berisi kode program. File-file tersebut dapat digabungkan menjadi paket program dengan menggunakan file yang berekstensi sce.
A.1
File ispure.sci
function pure = i s p u r e ( forward , backward ) 2 // f u n g s i i n i d i g un a k a n p e n g u j i a n
1
3
// s i f a t pure pada P e t r i n e t
4 5 6
// i n i s i a l i s a s i pure = %t ;
7 8 9 10 11 12 13
// j i k a t e r d a p a t p l a c e yang menjadi i n p u t s e k a l i g u s // o u t p u t s u a t u t r a n s i s i maka P e t r i n e t impure i f sum( f o r wa r d . ∗ backward ) > 0 pure = %f ; end endfunction
A.2
File findenabled.sci
function i d e n a b l e d = f i n d e n a b l e d ( backward , mark ) 2 // f u n g s i i n i mencari i n d e k s t r a n s i s i yang e n a b l e d 3 // i n p u t n y a a d a l a h : 1
4 5
// 1 . backward => m a t r i k s backward i n c i d e n c e // 2 . mark => jumlah t o k e n pada t i a p p l a c e
6 7 8
i d e n a b l e d = v e c t o r f i n d ( bool2s ( ones ( . . . 1 , s i z e ( backward , 2 ) ) . ∗ . mark >= backward ) , . . .
ones ( s i z e ( backward , 1 ) , 1 ) , ’c’ ) ; 10 endfunction 9
243
A.3
File isdominate.sci
function ind = i s d o m i n a t e ( big , s m a l l ) 2 // f u n g s i i n i menguji adanya hubungan dominasi a n ta ra 3 // dua node . Outputnya a d a l a h i n d e k s dominasi j i k a ada
1
4
// hubungan dominasi dan v e k t o r k o s o n g j i k a t i d a k
5 6 7
// i n i s i a l i s a s i ind = [ ] ;
8 9 10
// p r o s e s i n t i i f find ( s m a l l > b i g ) == [ ]
ind = find ( s m a l l < b i g ) ; end 12 13 endfunction
11
A.4
File buildtree.sci
function [ n o d e t r e e , i d p a r e n t t r a n ] = b u i l d t r e e ( . . . forward , backward , new node , i d p a r e n t , i d t r a n , . . . 2 node tree , id parent tran ) 3
1
4 5
// f u n g s i r e k u r s i f i n i d i g un a k a n untuk membangun // c o v e r a b i l i t y t r e e yang d i r e p r e s e n t a s i k a n dalam
8
// 2 v a r i a b e l , y a i t u : // n o d e t r e e : m a t r i k s yang kolomnya menyatakan node // i d p a r e n t t r a n : m a t r i k s dengan 2 b a r i s
9
// b a r i s 1 => i d p a r e n t dan b a r i s 2 => i d t r a n s i s i
6 7
10 11 12 13 14 15 16 17 18 19 20
// b a g i a n i n i d i g un a k a n untuk menentukan node yang // d i d o m i n a s i dan memberikan n i l a i omega pada i n d e k s // yang d i d o m i n a s i id node = id parent ; while i d n o d e ˜= 0 node = n o d e t r e e ( : , i d n o d e ) ; ind = i s d o m i n a t e ( new node , node ) ; new node ( ind ) = %inf ; id node = id parent tran (1 , id node ) ; end 244
21
// up d a te t r e e k e c u a l i s t a t e
22 23
new data = [ i d p a r e n t ; i d t r a n ] ; i d p a r e n t t r a n = [ i d p a r e n t t r a n new data ] ;
24
id new no de = s i z e ( i d p a r e n t t r a n , 2 ) ;
25 26
// d u p l i c a t e node
27
i f n o d e t r e e ˜= [ ] i f v e c t o r f i n d ( n o d e t r e e , new node , ’c’ ) ˜= [ ] // node i n i a d a l a h d u p l i c a t e
28 29
n o d e t r e e = [ n o d e t r e e new node ] ; return ;
30 31 32 33
end end
34 35 36
// up d a te s t a t e t r e e n o d e t r e e = [ n o d e t r e e new node ] ;
37 38 39
// c a r i e n a b l e d i d e n a b l e d = f i n d e n a b l e d ( backward , new node ) ;
40 41
// f u n g s i i n i d i j a l a n k a n untuk s e t i a p t r a n s i s i e n a b l e d
42
for i = 1 : length ( i d e n a b l e d ) c h i l d s t = new node + f o r wa r d ( : , i d e n a b l e d ( i ) ) − . . . backward ( : , i d e n a b l e d ( i ) ) ;
43 44
[ n o d e t r e e , i d p a r e n t t r a n ] = b u i l d t r e e ( forward , . . . backward , c h i l d s t , id new no de , i d e n a b l e d ( i ) , . . .
45 46
node tree , id parent tran ) ;
47
end 49 endfunction 48
A.5 1 2 3
File findbound.sci
function bound = f indbo und ( n o d e t r e e ) // mencari b a t a s a t a s s e t i a p p l a c e bound = max( n o d e t r e e , ’c’ ) ;
// o u t p u t d a r i f u n g s i i n i a d a l a h v e k t o r kolom 5 endfunction 4
245
A.6 1 2 3 4 5
function i d p l a c e = boundedplace ( n o d e t r e e ) // f u n g s i i n i b e rg un a untuk mencari i d p l a c e bounded // d i p e t r i n e t dengan keadaan awal yang d i b e r i k a n i d p l a c e = find ( f indbo und ( n o d e t r e e ) < %inf ) ; endfunction
A.7 1 2 3 4
File boundedplace.sci
File ispetrinetbounded.sci
function bounded = i s p e t r i n e t b o u n d e d ( n o d e t r e e ) // f u n g s i i n i untuk mengetahui apakah p e t r i n e t // bounded dengan keadaan awal yang d i b e r i k a n // o u t p u t d a r i f u n g s i i n i a d a l a h b o o l e a n
5 6
// i n i s i a l i s a s i
7
bounded = %t ;
8 9 10 11
// j i k a t e r d a p a t %inf maka p e t r i n e t unbounded i f find ( n o d e t r e e == %inf , 1 ) ˜= [ ] bounded = %f ;
end 13 endfunction 12
A.8 1 2
File isconservation.sci
function k o n s e r v a s i = i s c o n s e r v a t i o n ( n o d e t r e e , . . . idbounded ) // p e n g u j i a n s i f a t k o n s e r v a s i d i P e t r i n e t
3 4 5
// i n i s i a l i s a s i k o n s e r v a s i = %t ;
6 7 8 9 10
// membangun m a t r i k s A untuk s i s t e m persamaan l i n i e r node tree = node tree ’ ; [ brs , klm ] = s i z e ( n o d e t r e e ) ; n o d e t r e e = [ n o d e t r e e ( : , idbounded ) −ones ( brs , 1 ) ] ;
11 12 13
// m e n y e l e s a i k a n s i s t e m persamaan l i n i e r [ x0 , kerA ] = l i n s o l v e ( n o d e t r e e , zeros ( brs , 1 ) ) ; 246
14
// apakah s o l u s i t r i v i a l ?
15
i f kerA == [ ] & x0 == zeros ( klm +1 ,1) k o n s e r v a s i = %f ; // s o l u s i t r i v i a l
16
end 18 endfunction 17
A.9
File iscovers.sci
function b = i s c o v e r s ( big , s m a l l ) 2 // f u n g s i i n i menguji apakah b i g mengcover s m a l l 1
3
// o u t p u t n y a a d a l a h b o o l e a n
4 5 6
// i n i s i a l i s a s i b = %t ;
7 8 9
i f find ( s m a l l > b i g ) ˜= [ ] b = %f ;
end 11 endfunction 10
A.10 1 2 3 4
File iscoverable.sci
function ind = i s c o v e r a b l e ( n o d e t r e e , mark ) // f u n g s i i n i menguji apakah t e r d a p a t node // d i c o v e r a b i l i t y t r e e yang mengcover mark // Output a d a l a h i n d e k s node yang mengcover
5 6
[ n , r ] = size ( node tree ) ;
ind = v e c t o r f i n d ( bool2s ( n o d e t r e e >= . . . ones ( 1 , r ) . ∗ . mark ) , ones ( n , 1 ) , ’c’ ) ; 8 9 endfunction 7
A.11
File findchild.sci
function [ anakmark , a na kt r a n ] = f i n d c h i l d ( forward , . . . backward , mark , t r a n ) 2 3 // f u n g s i i n i b e r t u j u a n untuk mencari semua keadaan 1
4 5
// yang d a p a t d i c a p a i d a r i himpunan keadaan // dengan memfire semua t r a n s i s i yang e n a b l e d 247
6
// marking
7 8
anakmark = [ ] ; // t r a n s i s i
9
a na kt r a n = [ ] ;
10 11
// jumlah t r a n s i s i
12
[ pm, tn ] = s i z e ( f o r wa r d ) ;
13 14
// jumlah keadaan d i v a r i a b e l mark
15
nmark = s i z e ( mark , 2 ) ;
16 17 18 19 20 21 22 23 24
// p r o s e s p e r u l a n g a n ( i n t i ) for i = 1 : tn i d e n a b l e d = v e c t o r f i n d ( bool2s ( ones ( 1 , nmark ) . ∗ . backward ( : , i ) <= mark ) , ones (pm, 1 ) , ’c’ ) ; nena bled = length ( i d e n a b l e d ) ;
anakmark = [ anakmark ones ( 1 , nena bled ) . ∗ . . . . ( f o r wa r d ( : , i )−backward ( : , i ))+mark ( : , i d e n a b l e d ) ] ; a na kt r a n = [ a na kt r a n [ t r a n ( : , i d e n a b l e d ) ; . . . ones ( 1 , nena bled ) . ∗ . [ i ] ] ] ;
25 26 27
...
end endfunction
A.12
File firingorder.sci
function t r a n = f i r i n g o r d e r ( forward , backward , . . . init ma r k , mark ) 2 1
3 4
// f u n g s i i n i b e r t u j u a n untuk mencari uruta n p e m f i re a n // s e h i n g g a d i p e r o l e h node yang mengcover keadaan
5 6 7
// i n i s i a l i s a s i tran = [ ] ;
8 9 10 11 12
// apakah r o o t mengcover mark ? i f i s c o v e r s ( init ma r k , mark ) return ; end 248
13
// i n i s i a l i s a s i p r o s e s
14
[ init ma r k , t r a n ] = f i n d c h i l d ( forward , backward , . . . init ma r k , t r a n ) ;
15 16 17 18
i d c o v e r = v e c t o r f i n d ( bool2s ( . . . ones ( 1 , s i z e ( init ma r k , 2 ) ) . ∗ . mark <= i n i t m a r k ) , . . . ones ( length ( mark ) , 1 ) , ’c’ ) ;
19 20 21 22 23 24 25 26 27
// p e r u l a n g a n ( i n t i ) while i d c o v e r == [ ] [ init ma r k , t r a n ] = f i n d c h i l d ( forward , backward , . . . init ma r k , t r a n ) ; i d c o v e r = v e c t o r f i n d ( bool2s ( . . . ones ( 1 , s i z e ( init ma r k , 2 ) ) . ∗ . mark <= i n i t m a r k ) , . . . ones ( length ( mark ) , 1 ) , ’c’ ) ; end
28
// m e m f i l t e r uruta n t r a n s i s i yang memenuhi tran = tran ( : , idcover ) ; 30 31 endfunction 29
A.13
File firingorderbig.sci
function t r a n = f i r i n g o r d e r b i g ( n o d e t r e e , . . . 2 i d p a r e n t r a n , forward , backward , mark , idno de ) 3 // f u n g s i i n i menentukan uruta n p e m f i re a n t r a n s i s i 1
5
// n o d e t r e e dan i d p a r e n t d i p e r o l e h d a r i b u i l d t r e e // i d p a r e n t merupakan v e k t o r b a r i s dan i d n o d e a d a l a h
6
// i n d e k s node yang mengcover mark
4
7 8
// i n i s i a l i s a s i
9
tran = [ ] ;
10 11 12 13 14 15
// m e m f i l t e r node ke r o o t i d p a t h = idno de ; while i d p a r e n t r a n ( 1 , i d p a t h ( 1 ) ) ˜= 0 idpath = [ idparentran (1 , idpath ( 1 ) ) idpath ] ; end 249
16
node tree = node tree ( : , idpath ) ;
17
idno de = length ( i d p a t h ) ;
18 19 20
// i d p a r e n t r a n hanya memuat t r a n s i s i , p a r e n t d i h a p u s idparentran = idparentran (2 , idpath ) ;
21 22 23
// mencari p l a c e yang unbounded idunbounded = find ( n o d e t r e e ( : , idno de ) == %inf ) ;
24 25 26 27 28 29 30 31
// j i k a p l a c e bounded maka l a n g s u n g ditemukan i f idunbounded == [ ] tran = idparentran ; return ; end // v a r i a b e l n o d e t r e e memuat keadaan yang d i p e r l u k a n // i d p a r e n t r a n a d a l a h v e k t o r b a r i s b e r i s i t r a n s i s i
32 33 34 35 36 37 38 39
// mencari i n d e k s omega yang pertama k a l i idomega = zeros ( idunbounded ) ; for i = 1 : length ( idunbounded ) idomega ( i ) = find ( . . . n o d e t r e e ( idunbounded ( i ) , : ) == %inf , 1 ) ; end idomegaunik = unique ( idomega ) ;
40 41
// menyimpan jumlah omega yang b e r b e d a dan
42
44
// jumlah node pada p a th nomegaunik = length ( idomegaunik ) ; npath = length ( i d p a r e n t r a n ) ;
45
n = length ( mark ) ;
43
46 47 48 49 50 51
// p e m f i re a n t e r b a l i k i d f i r e = i d p a r e n t r a n ( idomegaunik ( nomegaunik )+1: npath ) ; mark = mark − sum( f o r wa r d ( : , i d f i r e ) , ’c’ ) + . . . sum( backward ( : , i d f i r e ) , ’c’ ) ; tran = [ i d f i r e tran ] ;
250
52
// p e r u l a n g a n utama
53
for i = nomegaunik : −1:2 // memfire t r a n s i s i sebelumnya
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
// keadaan s e b e l um => n o d e t r e e ( : , idomegaunik ( i )−1) // t r a n s i s i yg d i f i r e => idomegaunik ( i ) s t a w a l = n o d e t r e e ( : , idomegaunik ( i ) −1) + . . . f o r wa r d ( : , i d p a r e n t r a n ( idomegaunik ( i ) ) ) − . . . backward ( : , i d p a r e n t r a n ( idomegaunik ( i ) ) ) ; // d i b a n d i n g k a n dengan mark i d p l a c e = find ( s t a w a l ˜= mark ) ; // mencari node yang d i d o m i n a s i idno de = v e c t o r f i n d ( bool2s ( ones ( . . . 1 , idomegaunik ( i )−idomegaunik ( i − 1 ) ) . ∗ . . . . s t a w a l >= n o d e t r e e ( : , idomegaunik ( i −1): . . . idomegaunik ( i ) −1)) , ones ( n , 1 ) , ’c’ ) ; idno de = v e c t o r f i n d ( bool2s ( ones ( . . . 1 , length ( idno de ) ) . ∗ . s t a w a l ( i d p l a c e ) > . . . n o d e t r e e ( i d p l a c e , idomegaunik ( i −1)−1+idno de ) ) , . . . ones ( i d p l a c e , 1 ) , ’c’ ) ; idno de = idomegaunik ( i −1) − 1 + idno de ; // menentukan jumlah p e r u l a n g a n s e l i s i h = st awal ( idplace ) − . . . n o d e t r e e ( i d p l a c e , idno de ) ; j m l i t e r a s i = max( 0 ,max( c e i l ( ( mark ( i d p l a c e ) − . . . st awal ( idplace ) ) . / ( s e l i s i h ) ) ) ) ; // p e m f i re a n s e b a n ya k j m l i t e r a s i mark ( i d p l a c e ) = mark ( i d p l a c e ) − j m l i t e r a s i ∗ s e l i s i h ; t r a n = [ ones ( 1 , j m l i t e r a s i ) . ∗ . i d p a r e n t r a n ( . . . idno de +1: idomegaunik ( i ) ) t r a n ] ; // p e m f i re a n t e r b a l i k i d f i r e = i d p a r e n t r a n ( idomegaunik ( i −1)+1: . . . idomegaunik ( i ) ) ; mark = mark − sum( f o r wa r d ( : , i d f i r e ) , ’c’ ) + . . . sum( backward ( : , i d f i r e ) , ’c’ ) ; tran = [ i d f i r e tran ] ; end
251
88
// memfire t r a n s i s i sebelumnya
89
s t a w a l = n o d e t r e e ( : , idomegaunik (1) −1) + . . . f o r wa r d ( : , i d p a r e n t r a n ( idomegaunik ( 1 ) ) ) − . . .
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
backward ( : , i d p a r e n t r a n ( idomegaunik ( 1 ) ) ) ; // d i b a n d i n g k a n dengan mark i d p l a c e = find ( s t a w a l ˜= mark ) ; // mencari node yang d i d o m i n a s i idno de = v e c t o r f i n d ( bool2s ( ones ( . . . 1 , idomegaunik ( 1 ) − 1 ) . ∗ . s t a w a l >= . . . n o d e t r e e ( : , 1 : idomegaunik ( i ) −1)) , ones ( n , 1 ) , ’c’ ) idno de = v e c t o r f i n d ( bool2s ( ones ( . . . 1 , length ( idno de ) ) . ∗ . s t a w a l ( i d p l a c e ) > . . . n o d e t r e e ( i d p l a c e , idno de ) ) , ones ( i d p l a c e , 1 ) , ’c’ ) ; // menentukan jumlah p e r u l a n g a n s e l i s i h = st awal ( idplace ) − . . . n o d e t r e e ( i d p l a c e , idno de ) ; j m l i t e r a s i = max( 0 ,max( c e i l ( ( mark ( i d p l a c e ) − . . . st awal ( idplace ))./ s e l i s i h ) ) ) ; // p e m f i re a n s e b a n ya k j m l i t e r a s i mark ( i d p l a c e ) = mark ( i d p l a c e ) − j m l i t e r a s i ∗ s e l i s i h ; t r a n = [ ones ( 1 , j m l i t e r a s i ) . ∗ . i d p a r e n t r a n ( . . . idno de +1: idomegaunik ( 1 ) ) t r a n ] ; // p e m f i re a n t e r b a l i k i d f i r e = i d p a r e n t r a n ( 2 : idomegaunik ( 1 ) ) ; mark = mark − sum( f o r wa r d ( : , i d f i r e ) , ’c’ ) + . . . sum( backward ( : , i d f i r e ) , ’c’ ) ;
tran = [ i d f i r e tran ] ; 115 endfunction
114
A.14 1 2 3 4 5 6
File tlintersection.sci
function [ forward , backward , x0 , np , nt ] = . . . t l i n t e r s e c t i o n ( th , tk ) // f u n g s i i n i d i g un a k a n untuk membuat // P e t r i n e t lampu l a l u l i n t a s d i persimpangan // d i l e n g k a p i dengan nama p l a c e dan // nama t r a n s i s i 252
7
// menghitung jumlah j a l u r
8
l = length ( th ) ;
9 10 11 12 13 14 15 16 17 18 19 20
// membangun m a t r i k s f o rw a rd i n c i d e n c e f o r wa r d = zeros ( 5 ∗ l , 4 ∗ l ) ; wkt = sum ( [ th tk ] ) − sum ( [ th tk ] , ’c’ ) ; // p r o s e s utama f o r wa r d ( 2 0 ∗ l ˆ2−4∗ l : 2 0 ∗ l ˆ2−4∗ l +1) = [ wkt ( l ) ; th ( 1 ) ] // i t e r a s i f o r pertama f o r wa r d ( 1 6 ∗ l +5:20∗ l +4:20∗ l ˆ2−20∗ l −3) = th ( 2 : l ) ; f o r wa r d ( 1 5 ∗ l +1:20∗ l +1:20∗ l ˆ2−24∗ l −1) = wkt ( 1 : l −1); // i t e r a s i f o r kedua f o r wa r d ( l +1:20∗ l +4:20∗ l ˆ2−15∗ l −3) = 1 ; f o r wa r d ( l +2:20∗ l +4:20∗ l ˆ2−15∗ l −2) = 1 ;
22
f o r wa r d ( 1 1 ∗ l +3:20∗ l +4:20∗ l ˆ2−5∗ l −1) = 1 ; f o r wa r d ( 1 1 ∗ l +4:20∗ l +4:20∗ l ˆ2−5∗ l ) = 1 ;
23
f o r wa r d ( 6 ∗ l +3:20∗ l +4:20∗ l ˆ2−10∗ l −1) = tk ;
21
24 25
// membangun m a t r i k s backward i n c i d e n c e
26
backward = [ ones ( l , 4 ∗ l ) ; zeros ( 4 ∗ l , 4 ∗ l ) ] ; // p r o s e s utama
27 28 29 30 31 32 33 34 35 36 37
backward ( l +1:20∗ l +4:20∗ l ˆ2−15∗ l −3) = 2 ; backward ( 6 ∗ l +1:20∗ l +4:20∗ l ˆ2−10∗ l −3) = 1 ; backward ( 1 1 ∗ l +3:20∗ l +4:20∗ l ˆ2−5∗ l −1) = 2 ; backward ( 1 6 ∗ l +3:20∗ l +4:20∗ l ˆ2−1) = 1 ; backward ( 6 ∗ l +2:20∗ l +4:20∗ l ˆ2−10∗ l −2) = th − 1 ; backward ( 1 6 ∗ l +4:20∗ l +4:20∗ l ˆ 2 ) = tk − 1 ; backward ( 1 : 2 0 ∗ l +1:20∗ l ˆ2−19∗ l ) = 0 ; backward ( 5 ∗ l +1:20∗ l +1:20∗ l ˆ2−14∗ l ) = 0 ; backward ( 1 0 ∗ l +1:20∗ l +1:20∗ l ˆ2−9∗ l ) = 0 ; backward ( 1 5 ∗ l +1:20∗ l +1:20∗ l ˆ2−4∗ l ) = 0 ;
38 39 40 41 42
// membangun keadaan awal x0 = zeros ( 5 ∗ l , 1 ) ; x0 ( 2 : l ) = cumsum(sum ( [ th ( 1 : l −1) tk ( 1 : l − 1 ) ] , ’c’ ) ) ; x0 ( l +1) = th ( 1 ) ;
253
43
// nama p l a c e
44
np = emptystr ( 5 ∗ l , 1 ) ; np ( 1 : l ) = ’M’ + st r ing ( 1 : l ) ’ ;
45
48
np ( l + 1 :4 :5 ∗ l −3) = ’H’ + st r ing ( 1 : l ) ’ ; np ( l + 2 :4 :5 ∗ l −2) = ’BH’ + st r ing ( 1 : l ) ’ ; np ( l + 3 :4 :5 ∗ l −1) = ’K’ + st r ing ( 1 : l ) ’ ;
49
np ( l + 4 :4 :5 ∗ l ) = ’BK’ + st r ing ( 1 : l ) ’ ;
46 47
50 51
// nama t r a n s i s i
52
nt = emptystr ( 4 ∗ l , 1 ) ; nt ( 1 : 4 : 4 ∗ l −3) = ’hn’ + st r ing ( 1 : l ) ’ ;
53 54 55 56 57
nt ( 2 : 4 : 4 ∗ l −2) = ’hk’ + st r ing ( 1 : l ) ’ ; nt ( 3 : 4 : 4 ∗ l −1) = ’kn’ + st r ing ( 1 : l ) ’ ; nt ( 4 : 4 : 4 ∗ l ) = ’km’ + st r ing ( 1 : l ) ’ ; endfunction
A.15
File tlreduced.sci
function [ forward , backward , x0 , np , nt ] = t l r e d u c e d ( th , tk ) 2 // P e t r i n e t lampu l a l u l i n t a s t e r e d u k s i 1
3 4
// menghitung jumlah j a l u r
5
l = length ( th ) ;
6 7
// membangun m a t r i k s f o rw a rd i n c i d e n c e
8
f o r wa r d = zeros ( l +4 ,4∗ l ) ; wkt = sum ( [ th tk ] ) − sum ( [ th tk ] , ’c’ ) ;
9 10 11 12 13 14 15 16 17 18 19
f o r wa r d ( 4 ∗ l ˆ2+16∗ l −4:4∗ l ˆ2+16∗ l −3) = [ wkt ( l ) ; th ( 1 ) ] // i t e r a s i f o r pertama f o r wa r d ( 4 ∗ l +13:4∗ l +16:4∗ l ˆ2+12∗ l −19) = th ( 2 : l ) ; f o r wa r d ( 3 ∗ l +13:4∗ l +17:4∗ l ˆ2+12∗ l −21) = wkt ( 1 : l −1); // i t e r a s i f o r kedua f o r wa r d ( l +1:4∗ l +16:4∗ l ˆ2+13∗ l −15) = 1 ; f o r wa r d ( l +2:4∗ l +16:4∗ l ˆ2+13∗ l −14) = 1 ; f o r wa r d ( 3 ∗ l +11:4∗ l +16:4∗ l ˆ2+15∗ l −5) = 1 ; f o r wa r d ( 3 ∗ l +12:4∗ l +16:4∗ l ˆ2+15∗ l −4) = 1 ; f o r wa r d ( 2 ∗ l +7:4∗ l +16:4∗ l ˆ2+14∗ l −9) = tk ; 254
20
// membangun m a t r i k s backward i n c i d e n c e
21
backward = [ ones ( l , 4 ∗ l ) ; zeros ( 4 , 4 ∗ l ) ] ; backward ( l +1:4∗ l +16:4∗ l ˆ2+13∗ l −15) = 2 ;
22 23 24 25 26 27 28
backward ( 2 ∗ l +5:4∗ l +16:4∗ l ˆ2+14∗ l −11) = 1 ; backward ( 3 ∗ l +11:4∗ l +16:4∗ l ˆ2+15∗ l −5) = 2 ; backward ( 4 ∗ l +15:4∗ l +16:4∗ l ˆ2+16∗ l −1) = 1 ; backward ( 2 ∗ l +6:4∗ l +16:4∗ l ˆ2+14∗ l −10) = th − 1 ; backward ( 4 ∗ l +16:4∗ l +16:4∗ l ˆ2+16∗ l ) = tk − 1 ; backward ( 1 : 4 ∗ l +17:4∗ l ˆ2+13∗ l −16) = 0 ;
30
backward ( l +5:4∗ l +17:4∗ l ˆ2+14∗ l −12) = 0 ; backward ( 2 ∗ l +9:4∗ l +17:4∗ l ˆ2+15∗ l −8) = 0 ;
31
backward ( 3 ∗ l +13:4∗ l +17:4∗ l ˆ2+16∗ l −4) = 0 ;
29
32 33
// membangun keadaan awal
34 35
x0 = zeros ( l + 4 , 1 ) ; x0 ( 2 : l ) = cumsum(sum ( [ th ( 1 : l −1) tk ( 1 : l − 1 ) ] , ’c’ ) ) ;
36
x0 ( l +1) = th ( 1 ) ;
37 38
// nama p l a c e
39 40
np = emptystr ( l + 4 , 1 ) ; np ( 1 : l ) = ’M’ + st r ing ( 1 : l ) ’ ;
41
np ( l +1: l +4) = [ ’H’ ; ’BH’ ; ’K’ ; ’BK’ ] ;
42 43
// nama t r a n s i s i
44
nt = emptystr ( 4 ∗ l , 1 ) ; nt ( 1 : 4 : 4 ∗ l −3) = ’hn’ + st r ing ( 1 : l ) ’ ;
45 46 47 48 49
nt ( 2 : 4 : 4 ∗ l −2) = ’hk’ + st r ing ( 1 : l ) ’ ; nt ( 3 : 4 : 4 ∗ l −1) = ’kn’ + st r ing ( 1 : l ) ’ ; nt ( 4 : 4 : 4 ∗ l ) = ’km’ + st r ing ( 1 : l ) ’ ; endfunction
A.16
File intersection.sci
function pengguna = i n t e r s e c t i o n ( data , waktusim ) 2 // f u n g s i i n i untuk m e n s i m ul a s i k a n jumlah pengguna
1
3 4
// pada t i a p j a l u r d i persimpangan untuk s e t i a p waktu . // jumlah b a r i s m a t r i k s i n p u t menyatakan jumlah j a l u r . 255
5
// kolom m a t r i k s ada 9 yang menyatakan :
6
// 1 . Keadaan awal : i n i s i a l i s a s i jumlah pengguna // 2 . Mean d a ta n g : ra ta −r a t a k e d a ta n g a n pengguna
7 8 9 10 11 12 13 14 15 16 17 18
// 3 . Mean h i j a u : ra ta −r a t a k e b e r a n g k a t a n s a a t h i j a u // 4 . Mean k un i n g : ra ta −r a t a k e b e r a n g k a t a n s a a t k un i n g // 5 . Varian d a ta n g : v a r i a n k e d a ta n g a n pengguna // 6 . Varian h i j a u : v a r i a n k e b e r a n g k a t a n s a a t h i j a u // 7 . Varian k un i n g : v a r i a n k e b e r a n g k a t a n s a a t k un i n g // 8 . Max h i j a u : maksimum lama h i j a u menyala // 9 . Max k un i n g : maksimum lama k un i n g menyala // s e l a i n i t u , j u g a d i i n p u t k a n waktu s i m u l a s i // o u t p u t a d a l a h m a t r i k s yang b e r i s i jumlah pengguna // dengan b a r i s dan kolom masing−masing menyatakan // j a l u r dan waktu
19 20
// jumlah j a l u r , jumlah b a r i s m a t r i k s d a ta
21
j m l j a l u r = s i z e ( data , 1 ) ;
22 23
// i n i s i a l i s a s i
24
// m a t r i k s o u t p u t pengguna = zeros ( j m l j a l u r , waktusim ) ;
25 26 27 28
// jumlah pengguna pengguna ( : , 1 ) = data ( : , 1 ) ; // waktu s i m u l a s i
30
t = 1; // j a l u r yang d i l a y a n i , i n d e k s d i k u r a n g i s a t u
31
j l r = 0;
29
32 33
// p r o s e s s i m u l a s i
34
while t < waktusim // menghitung lama h i j a u menyala
35 36 37 38 39 40
lama = min( c e i l ( pengguna ( j l r +1 , t ) / . . . data ( j l r + 1 , 3 ) ) , data ( j l r + 1 , 8 ) ) ; // minimum lampu l a l u l i n t a s h i j a u menyala // selama 1 s a tua n waktu lama = max(min( lama , waktusim−t ) , 1 ) ;
256
41
// s i m u l a s i h i j a u menyala
42
for i = 1 : lama // membangkitkan pengguna yang d a ta n g
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
pengguna ( : , t +1) = max( pengguna ( : , t ) + . . . data ( : , 2 ) + round( sqrt ( data ( : , 5 ) ) . ∗ . . . rand ( j m l j a l u r , 1 , ’normal ’ ) ) , 0 ) ; pengguna ( j l r +1 , t +1) = max( pengguna ( . . . j l r +1 , t +1) − data ( j l r +1 ,3) − round( . . . sqrt ( data ( j l r +1 ,6))∗ rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; end // menghitung lama k un i n g menyala lama = min( c e i l ( pengguna ( j l r +1 , t ) / . . . data ( j l r + 1 , 4 ) ) , data ( j l r + 1 , 9 ) ) ; // minimum lampu l a l u l i n t a s k un i n g menyala // selama 1 s a tua n waktu lama = max(min( lama , waktusim−t ) , 1 ) ; // s i m u l a s i k un i n g menyala for i = 1 : lama pengguna ( : , t +1) = max( pengguna ( : , t ) + . . . data ( : , 2 ) + round( sqrt ( data ( : , 5 ) ) . ∗ . . . rand ( j m l j a l u r , 1 , ’normal ’ ) ) , 0 ) ; // menghitung pengguna yang d i l a y a n i pengguna ( j l r +1 , t +1) = max( pengguna ( . . . j l r +1 , t +1) − data ( j l r +1 ,4) − round( . . . sqrt ( data ( j l r +1 ,7))∗ rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; end // mengubah j a l u r yang h i j a u a ta u k un i n g j l r = modulo( j l r + 1 , j m l j a l u r ) ; end
72 73 74
i f s i z e ( pengguna , 2 ) > waktusim pengguna = pengguna ( : , 1 : waktusim ) ;
end 76 endfunction
75
257
A.17
File intersectionext.sci
function pengguna = i n t e r s e c t i o n e x t ( data , waktusim ) 2 // f u n g s i i n i m e n s i m ul a s i k an jumlah pengguna 3 // pada t i a p j a l u r d i persimpangan untuk s e t i a p waktu . 1
4 5 6 7 8 9 10 11 12 13
// jumlah b a r i s m a t r i k s i n p u t menyatakan jumlah j a l u r . // kolom m a t r i k s ada 9 yang menyatakan : // 1 . Keadaan awal : i n i s i a l i s a s i jumlah pengguna // 2 . Mean h i j a u : ra ta −r a t a k e b e r a n g k a t a n s a a t h i j a u // 3 . Mean k un i n g : ra ta −r a t a k e b e r a n g k a t a n s a a t k un i n g // 4 . Varian h i j a u : v a r i a n k e b e r a n g k a t a n s a a t h i j a u // 5 . Varian k un i n g : v a r i a n k e b e r a n g k a t a n s a a t k un i n g // 6 . Max h i j a u : maksimum lama h i j a u menyala // 7 . Max k un i n g : maksimum lama k un i n g menyala // 8 . Max d a ta n g : ra ta −r a t a k e d a ta n g a n pengguna
15
// s e l a i n i t u , j u g a d i i n p u t k a n waktu s i m u l a s i // o u t p u t a d a l a h m a t r i k s yang b e r i s i jumlah pengguna
16
// b a r i s menyatakan j a l u r dan kolom menyatakan waktu
14
17 18
// jumlah j a l u r , jumlah b a r i s m a t r i k s d a ta
19
j m l j a l u r = s i z e ( data , 1 ) ;
20 21 22 23 24 25 26 27 28
// i n i s i a l i s a s i // m a t r i k s o u t p u t pengguna = zeros ( j m l j a l u r , waktusim ) ; // jumlah pengguna pengguna ( : , 1 ) = data ( : , 1 ) ; t = 1; // j a l u r yang d i l a y a n i , i n d e k s d i k u r a n g i s a t u j l r = 0;
29 30
// p r o s e s s i m u l a s i
31
while t < waktusim // menghitung lama h i j a u menyala lama = min( c e i l ( pengguna ( j l r +1 , t ) / . . .
32 33 34 35
data ( j l r + 1 , 2 ) ) , data ( j l r + 1 , 6 ) ) ; lama = max(min( lama , waktusim−t ) , 1 ) ; 258
36
// s i m u l a s i h i j a u menyala
37
for i = 1 : lama // membangkitkan d a ta k e d a ta n g a n
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
for j = 1 : j m l j a l u r pengguna ( j , t +1) = max( pengguna ( j , t ) + . . . grand ( 1 , 1 , ’uin ’ , 0 , data ( j , 8 ) ) , 0 ) ; end // menghitung banyak pengguna yang d i l a y a n i pengguna ( j l r +1 , t +1) = max( pengguna ( . . . j l r +1 , t +1) − data ( j l r +1 ,2) − round( . . . sqrt ( data ( j l r +1 ,4))∗ rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; end // menghitung lama k un i n g menyala lama = min( c e i l ( pengguna ( j l r +1 , t ) / . . . data ( j l r + 1 , 3 ) ) , data ( j l r + 1 , 7 ) ) ; lama = max(min( lama , waktusim−t ) , 1 ) ; // s i m u l a s i k un i n g menyala for i = 1 : lama for j = 1 : j m l j a l u r pengguna ( j , t +1) = max( pengguna ( j , t ) + . . . grand ( 1 , 1 , ’uin ’ , 0 , data ( j , 8 ) ) , 0 ) ; end pengguna ( j l r +1 , t +1) = max( pengguna ( . . . j l r +1 , t +1) − data ( j l r +1 ,3) − round( . . . sqrt ( data ( j l r +1 ,5))∗ rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; end // mengubah j a l u r yang h i j a u a ta u k un i n g j l r = modulo( j l r + 1 , j m l j a l u r ) ; end
67 68 69
i f s i z e ( pengguna , 2 ) > waktusim pengguna = pengguna ( : , 1 : waktusim ) ;
end 71 endfunction
70
259
A.18
File readpipe.sci
function [ forward , backward , mark , namaplace , namatran ] . . . 2 = readpipe ( namafile ) 3 // i n p u t f u n g s i i n i a d a l a h n a m a f i l e dalam xml 1
4 5
// o u t p u t f u n g s i i n i a d a l a h : // 1 . f o rw a rd [ ] [ ] => m a t r i k s i n s i d e n
8
// 2 . backward [ ] [ ] => backward i n s i d e n // 3 . mark [ ] => k o n d i s i awal p l a c e // 4 . namaplace [ ] => nama p l a c e pada P e t r i n e t
9
// 5 . namatran [ ]
6 7
=> nama t r a n s i s i pada P e t r i n e t
10 11 12 13 14 15 16 17 18
// i n i s i a l i s a s i namaplace = [ ] ; namatran = [ ] ; mark = [ ] ; // ID p l a c e place = [ ] ; // ID t r a n s i s i tran = [ ] ;
19 20
// membuka f i l e untuk d i b a c a
21
f p = mopen( n a m a f i l e , ’r’ ) ; // membaca f i l e p e r k a t a s t r = mfscanf ( fp , ’%s’ ) ;
22 23 24 25 26 27
while s t r ˜= ’net "">’ s t r = mfscanf ( fp , ’%s’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ;
28 29 30 31 32 33 34 35
// membaca p l a c e while s t r == ’
36
// nama
37
s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
s t r = mfscanf ( fp , ’%s ’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ; s t r e n d = emptystr ( 2 , 1 ) ; i f length ( s t r ) > 8 s t r e n d = s t r s p l i t ( s t r , length ( s t r ) −8); end while s t r e n d ( 2 ) ˜= ’’ s t r e n d = [ ’’ ; mfscanf ( fp , ’%s’ ) ] ; s t r = st r c at ( [ s t r , ’ ’ , s t r e n d ] ) ; i f length ( s t r e n d ( 2 ) ) > 8 str end = s t r s p l i t ( str end (2) , . . . length ( s t r e n d ( 2 ) ) − 8 ) ; end end s t r = s t r s p l i t ( s t r , [ 7 length ( s t r ) − 8 ] ) ; namaplace = [ namaplace ; s t r ( 2 ) ] ; // marking s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s ’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ; s t r = s t r s p l i t ( s t r , [ 7 length ( s t r ) − 8 ] ) ; mark = [ mark ; evstr ( s t r ( 2 ) ) ]
64 65 66 67 68 69 70 71
// menuntaskan s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s ’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ; end
261
72
// membaca t r a n s i s i
73
while s t r == ’
74 75 76 77
s t r = mfscanf ( fp , ’%s’ ) ; s t r = s t r s p l i t ( s t r , [ 4 length ( s t r ) − 2 ] ) ; tran = [ tran ; s t r ( 2 ) ] ;
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
// nama s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ; s t r e n d = emptystr ( 2 , 1 ) ; i f length ( s t r ) > 8 s t r e n d = s t r s p l i t ( s t r , length ( s t r ) −8); end // apakah l e b i h d a r i 1 k a t a ? while s t r e n d ( 2 ) ˜= ’’ s t r e n d = [ ’’ ; mfscanf ( fp , ’%s ’ ) ] ; s t r = st r c at ( [ s t r , ’ ’ , s t r e n d ] ) ; i f length ( s t r e n d ( 2 ) ) > 8 str end = s t r s p l i t ( str end (2) , . . . length ( s t r e n d ( 2 ) ) − 8 ) ; end end s t r = s t r s p l i t ( s t r , [ 7 length ( s t r ) − 8 ] ) ; namatran = [ namatran ; s t r ( 2 ) ] ;
100 101 102 103 104 105 106 107
// menuntaskan s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s’ ) ; end s t r = mfscanf ( fp , ’%s’ ) ; end
262
108
// m a t r i k s i n s i d e n
109
pm = s i z e ( namaplace , 1 ) ; // jumlah p l a c e tn = s i z e ( namatran , 1 ) ; // jumlah t r a n s i s i
110 111 112
f o r wa r d = zeros (pm, tn ) ; backward = zeros (pm, tn ) ;
113 114 115 116
while s t r == ’<arc ’ for i = 1 : 4 s t r = mfscanf ( fp , ’%s ’ ) ;
118
end s t r = s t r s p l i t ( s t r , [ 8 length ( s t r ) − 1 ] ) ;
119
src = s t r s p l i t ( str (2) ,1);
117
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
i f s r c ( 1 ) == ’P’ // p l a c e −> t r a n s i s i s r c = find ( p l a c e == s t r ( 2 ) ) ; s t r = mfscanf ( fp , ’%s ’ ) ; s t r = s t r s p l i t ( s t r , [ 8 length ( s t r ) − 2 ] ) ; des = find ( t r a n == s t r ( 2 ) ) ; s t r = mfscanf ( fp , ’%s ’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s’ ) ; end s t r = mfscanf ( fp , ’%s ’ ) ; s t r = s t r s p l i t ( s t r , [ 7 length ( s t r ) − 8 ] ) ; backward ( s r c , des ) = evstr ( s t r ( 2 ) ) ; else // t r a n s i s i −> p l a c e s r c = find ( t r a n == s t r ( 2 ) ) ; s t r = mfscanf ( fp , ’%s ’ ) ; s t r = s t r s p l i t ( s t r , [ 8 length ( s t r ) − 2 ] ) ; des = find ( p l a c e == s t r ( 2 ) ) ; s t r = mfscanf ( fp , ’%s ’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s’ ) ; end
263
144
s t r = mfscanf ( fp , ’%s’ ) ;
145
s t r = s t r s p l i t ( s t r , [ 7 length ( s t r ) − 8 ] ) ; f o r wa r d ( des , s r c ) = evstr ( s t r ( 2 ) ) ;
146 147
end
148 149
// menuntaskan
150
s t r = mfscanf ( fp , ’%s’ ) ; while s t r ˜= ’’ s t r = mfscanf ( fp , ’%s’ ) ;
151 152 153 154 155
end s t r = mfscanf ( fp , ’%s’ ) ; end
156 157
mclose ( f p ) ;
c lear s t r s r c des t f p p l a c e t r a n ; 159 endfunction 158
A.19 1 2 3 4 5 6 7 8
File petrinetsimulation.sci
function mark = p e t r i n e t s i m u l a t i o n ( forward , backward , . . . mark , namaplace , namatran ) // I n i a d a l a h f u n g s i m e n s i m ul a s i k a n p e t r i n e t // yang b e r b a s i s GUI // I n p u t f u n g s i i n i a d a l a h // 1 . f o rw a rd : f o rw a rd i n c i d e n c e b e ruk ura n pm x tn // 2 . backward // 3 . mark
: backward i n c i d e n c e b e ruk ura n pm x tn : keadaan , v e k t o r b e ruk ura n pm
11
// 4 . namaplace : v e k t o r s t r i n g b e ruk ura n pm // 5 . namatran : v e k t o r s t r i n g b e ruk ura n tn // keadaan yang d i h a s i l k a n a d a l a h keadaan
12
// yang t e r a k h i r s e b e l um k e l u a r
9 10
13 14 15 16 17 18
// menghitung jumlah p l a c e dan t r a n s i s i [pm tn ] = s i z e ( f o r wa r d ) ; // v e k t o r p l a c e d i g un a k a n untuk menampilkan // uruta n p l a c e pada P e t r i n e t v e k t o r p l a c e = ’x = [’ + st r c at ( namaplace , ’;’ ) + ’]’ ; 264
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
while 1 // f o rw a rd i n c i d e n c e ind = find ( f o r wa r d ) ; // apakah ada a rc d a r i t r a n s i s i ke p l a c e ? i f ind ˜= [ ] j m l a r c = length ( ind ) ; for i = 1 : f l o o r ( j m l a r c / 3 0 ) i n d p r o s e s = ind ( ( i −1)∗30+1: i ∗ 3 0 ) ; // memproses 30 a rc [ p l a c e , t r a n ] = ind2 sub ( [ pm, tn ] , i n d p r o s e s ) ; s t r j u d u l = ’Forward incidence , arc ’ + . . . st r ing ( ( i −1)∗30+1) + ’ - ’ + . . . st r ing ( i ∗ 3 0 ) + ’ of ’ + st r ing ( j m l a r c ) ; jwb = x mdialog ( s t r j u d u l , . . . namatran ( t r a n ) + ’ => ’ + . . . namaplace ( p l a c e ) , st r ing ( f o r wa r d ( i n d p r o s e s ) ) ) ; i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; // mengupdate m a t r i k s f o rw a rd i n c i d e n c e f o r wa r d ( i n d p r o s e s ) = evstr ( jwb ) ; end i f modulo( j mla r c , 3 0 ) ˜= 0 i n d p r o s e s = ind ( . . . j mla r c −modulo( j mla r c , 3 0 ) + 1 : j m l a r c ) ; // memproses a rc s i s a n y a [ p l a c e , t r a n ] = ind2 sub ( [ pm, tn ] , i n d p r o s e s ) ; s t r j u d u l = ’Forward incidence , arc ’ + . . . st r ing ( j mla r c −modulo( j mla r c , 3 0 ) + 1 ) + . . . ’ - ’ + st r ing ( j m l a r c ) + ’ of ’ + . . . st r ing ( j m l a r c ) ; jwb = x mdialog ( s t r j u d u l , . . . namatran ( t r a n ) + ’ => ’ + . . . namaplace ( p l a c e ) , st r ing ( f o r wa r d ( i n d p r o s e s ) ) ) ;
265
55 56 57 58 59 60 61 62 63
i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; f o r wa r d ( i n d p r o s e s ) = evstr ( jwb ) ; end else x message ( [ ’There are no arc from transition ...
to place ’ ] ) ; 65 end 64
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
// backward i n c i d e n c e ind = find ( backward ) ; // apakah ada a rc d a r i p l a c e ke t r a n s i s i ? i f ind ˜= [ ] j m l a r c = length ( ind ) ; for i = 1 : f l o o r ( j m l a r c / 3 0 ) i n d p r o s e s = ind ( ( i −1)∗30+1: i ∗ 3 0 ) ; // memproses 30 a rc [ p l a c e , t r a n ] = ind2 sub ( [ pm, tn ] , i n d p r o s e s ) ; s t r j u d u l = ’Backward incidence , arc ’ + . . . st r ing ( ( i −1)∗30+1) + ’ - ’ + . . . st r ing ( i ∗ 3 0 ) + ’ of ’ + st r ing ( j m l a r c ) ; jwb = x mdialog ( s t r j u d u l , . . . namaplace ( p l a c e ) + ’ => ’ + . . . namatran ( t r a n ) , st r ing ( backward ( i n d p r o s e s ) ) ) ; // apakah to m b o l c a n c e l d i t e k a n ? i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; // mengupdate m a t r i k s backward i n c i d e n c e backward ( i n d p r o s e s ) = evstr ( jwb ) ; end
266
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
i f modulo( j mla r c , 3 0 ) ˜= 0 i n d p r o s e s = ind ( . . . j mla r c −modulo( j mla r c , 3 0 ) + 1 : j m l a r c ) ; // memproses s i s a n y a ( kurang d a r i 30 a rc ) [ p l a c e , t r a n ] = ind2 sub ( [ pm, tn ] , i n d p r o s e s ) ; s t r j u d u l = ’Backward incidence , arc ’ + . . . st r ing ( j mla r c −modulo( j mla r c , 3 0 ) + 1 ) + . . . ’ - ’ + st r ing ( j m l a r c ) + ’ of ’ + . . . st r ing ( j m l a r c ) ; jwb = x mdialog ( s t r j u d u l , . . . namaplace ( p l a c e ) + ’ => ’ + . . . namatran ( t r a n ) , st r ing ( backward ( i n d p r o s e s ) ) ) ; i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; backward ( i n d p r o s e s ) = evstr ( jwb ) ; end else x message ( [ ’There are no arc from place ...
to transition ’ ] ) ; end 113 112
114 115 116 117 118 119 120 121 122 123 124 125 126
// s t a t e for i = 1 : f l o o r (pm/ 3 0 ) // memproses 30 marking s t r j u d u l = ’Marking , place ’ + . . . st r ing ( ( i −1)∗30+1) + ’ - ’ + st r ing ( i ∗ 3 0 ) + . . . ’ of ’ + st r ing (pm ) ; jwb = x mdialog ( s t r j u d u l , namaplace ( . . . ( i −1)∗30+1: i ∗ 3 0 ) , st r ing ( mark ( ( i −1)∗30+1: i ∗ 3 0 ) ) ) ; i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end
267
127
jwb ( find ( jwb == ’’ ) ) = ’0’ ;
128
// mengupdate marking mark ( ( i −1)∗30+1: i ∗ 3 0 ) = evstr ( jwb ) ;
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
end i f modulo(pm, 3 0 ) ˜= 0 // memproses s i s a n y a ( kurang d a r i 30 marking ) s t r j u d u l = ’Marking , place ’ + . . . st r ing (pm−modulo(pm, 3 0 ) + 1 ) + ’ - ’ + . . . st r ing (pm) + ’ of ’ + st r ing (pm ) ; jwb = x mdialog ( s t r j u d u l , namaplace ( . . . pm−modulo(pm, 3 0 ) + 1 :pm) , st r ing ( mark ( . . . pm−modulo(pm, 3 0 ) + 1 :pm ) ) ) ; // apakah to m b o l c a n c e l d i t e k a n ? i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; // mengupdate marking mark (pm−modulo(pm, 3 0 ) + 1 :pm) = evstr ( jwb ) ; end
148 149 150
// m a t r i k s i n s i d e n i n s i d e n = f o r wa r d − backward ;
151 152
// uruta n t r a n s i s i yang d i f i r e sebelumnya
153
h i s t o r y = ’0. [’ + st r c at ( st r ing ( mark ) , ’;’ ) + ’]’ ;
154 155 156 157
while 1 // c a r i t r a n s i s i yang e n a b l e d i d e n a b l e d = f i n d e n a b l e d ( backward , mark ) ;
158 159 160 161 162
i f i d e n a b l e d ˜= [ ] // p i l i h t r a n s i s i s t r = x choose ( namatran ( i d e n a b l e d ) , . . . [ ’Choose transition to fire next ’ ] ) ;
268
163 164 165 166 167 168 169 170 171
i f s t r == 0 // to m b o l OK t i d a k d i t e k a n x message ( [ ’No transition is fired next ’ ; . . . ’Back to forward incidence dialog ’ ] ) ; // k e l u a r d a r i p e r u l a n g a n break ; end // p e m f i re a n mark = mark + i n s i d e n ( : , i d e n a b l e d ( s t r ) ) ;
172 173
// s t a t e s e t e l a h d i f i r e
174
for i = 1 : f l o o r (pm/ 3 0 ) // memproses 30 marking s t r j u d u l = ’Marking , place ’ + . . .
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
st r ing ( ( i −1)∗30+1) + ’ - ’ + . . . st r ing ( i ∗ 3 0 ) + ’ of ’ + st r ing (pm ) ; jwb = x mdialog ( s t r j u d u l , . . . namaplace ( ( i −1)∗30+1: i ∗ 3 0 ) , . . . st r ing ( mark ( ( i −1)∗30+1: i ∗ 3 0 ) ) ) ; // apakah to m b o l c a n c e l d i t e k a n ? i f jwb == [ ] x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ; end jwb ( find ( jwb == ’’ ) ) = ’0’ ; // mengupdate marking mark ( ( i −1)∗30+1: i ∗ 3 0 ) = evstr ( jwb ) ; end i f modulo(pm, 3 0 ) ˜= 0 // memproses s i s a n y a ( kurang d a r i 30 marking ) s t r j u d u l = ’Marking , place ’ + . . . st r ing (pm−modulo(pm, 3 0 ) + 1 ) + ’ - ’ + . . . st r ing (pm) + ’ of ’ + st r ing (pm ) ; jwb = x mdialog ( s t r j u d u l , namaplace ( . . . pm−modulo(pm, 3 0 ) + 1 :pm) , st r ing ( mark ( . . . pm−modulo(pm, 3 0 ) + 1 :pm ) ) ) ;
269
i f jwb == [ ]
199
x message ( [ ’Exit from petrinetsimulation ’ ] ) ; return ;
200 201
end jwb ( find ( jwb == ’’ ) ) = ’0’ ; mark (pm−modulo(pm, 3 0 ) + 1 :pm) = evstr ( jwb ) ;
202 203 204
end
205 206 207
// menampilkan p e m f i re a n sebelumnya
208
n e w h i s t o r y = st r ing ( s i z e ( h i s t o r y , 1 ) ) + . . . ’. ’ + namatran ( i d e n a b l e d ( s t r ) ) + ’ => ’ ;
209
n e w h i s t o r y = n e w h i s t o r y + ’[’ + . . . st r c at ( st r ing ( mark ) , ’;’ ) + ’]’ ; h i st o r y = [ h i st o r y ; newhistory ] ;
210 211 212
x choose ( h i s t o r y , [ ’Firing history ’ ; . . . vektorplace ] ) ;
213 214 215
else // d e a d l o c k
216 217
x message ( [ ’Petri net marking is deadlock ’ ; . . . ’Back to forward incidence dialog ’ ] ) ;
218 219 220 221 222
break ; end end
end 224 endfunction 223
A.20 1 2 3
File pipesimulation.sci
function p i p e s i m u l a t i o n // f u n g s i i n i m e n s i m ul a s i k an P e t r i n e t b e r b a s i s GUI // yang d i b u a t dengan PIPE
4 5 6 7 8
// p r o s e s i n t i while 1 // memilih f i l e xml yang d i b u a t dengan PIPE jwb = t k g e t f i l e ( ’*. xml ’ , T i t l e=’Choose Petri net ’ ) ; 270
9
i f jwb == ’’ // j i k a t i d a k d i t e k a n OK x message ( [ ’Exit from pipesimulation ’ ] ) ;
10 11 12 13
break ; end
14 15 16 17
// membaca f i l e xml yang d i b u a t dengan PIPE [ forward , backward , mark , namaplace , namatran ] = . . . r e a d p i p e ( jwb ) ;
18 19
// s i m u l a s i P e t r i n e t b e r b a s i s GUI
p e t r i n e t s i m u l a t i o n ( forward , backward , mark , namaplace ) ; end 21 22 endfunction
20
A.21
File treeposition.sci
function [ pos , i d p o s , pos node , r i g h t t r e e ] = . . . t r e e p o s i t i o n ( pos , i d p o s , l e f t , d i s t , id no de , . . . 2 id parent tran , le v e l ) 3 1
4 5
// f u n g s i i n i merupakan r e k u r s i f // b e rg un a untuk menghitung p o s i s i t i a p node
8
// i d p o s menyatakan i d node // pos m a t r i k s dengan dua b a r i s // b a r i s 1 => p o s i s i x dan b a r i s 2 => p o s i s i y
9
// jumlah kolom pos = jumlah elemen i d p o s
6 7
10 11 12 13 14 15
// r i g h t t r e e : b a t a s kanan t r e e // r i g h t c h : anak t e r k a n a n // l e f t c h : anak t e r k i r i // p o s c h i l d : p o s i s i anak kemudian ( baru ) // p o s n o d e : p o s i s i node i n i ( o u t p u t )
16 17 18 19 20
// i n i s i a l i s a s i right tree = left ; pos child = l e f t ; left ch = left ; 271
21
// mencari c h i l d
22
i d c h = find ( i d p a r e n t t r a n ( 1 , : ) == i d n o d e ) ;
23 24 25 26
// j i k a mempunyai c h i l d i f i d c h ˜= [ ] [ pos , i d p o s , l e f t c h , r i g h t t r e e ] = . . . t r e e p o s i t i o n ( pos , i d p o s , p o s c h i l d , . . . dist , id ch (1) , id parent tran , l e v e l + 1);
27 28 29
end
30 31
// i n i s i a l i s a s i v a r i a b e l r i g h t c h
32
right ch = left ch ;
33 34
// menghitung p o s i s i c h i l d
35
for i = 2 : length ( i d c h ) pos child = right tree + dist ;
36 37 38 39 40
[ pos , i d p o s , r i g h t c h , r i g h t t r e e ] = . . . t r e e p o s i t i o n ( pos , i d p o s , p o s c h i l d , . . . dist , id ch ( i ) , id parent tran , l e v e l + 1); end
41 42 43
// h i t u n g p o s i s i node i n i po s no de = round ( ( l e f t c h + r i g h t c h ) / 2 ) ;
44 45 46
// up d a te v a r i a b e l p o s i s i new pos = [ po s no de ; l e v e l ] ;
pos = [ pos new pos ] ; 48 id pos = [ id pos id node ] ; 49 endfunction 47
A.22
File covtree.sci
function c o v t r e e ( forward , backward , mark , namatran ) 2 // f u n g s i i n i b e r t u j u a n membangun c o v e r a b i l i t y t r e e 3 // h a s i l n y a b e rup a t r e e s e c a r a g r a f i k 1
4 5
// f u n g s i i n i menggunakan f u n g s i b u i l d t r e e untuk // membangun c o v e r a b i l i t y t r e e 272
6
// i n i s i a l i s a s i
7
node tree = [ ] ; id parent tran = [ ] ;
8 9 10
[ n o d e t r e e , i d p a r e n t t r a n ] = b u i l d t r e e ( forward , . . . backward , mark , 0 , 0 , n o d e t r e e , i d p a r e n t t r a n ) ;
11 12 13 14 15 16 17 18 19 20 21
// menentukan p o s i s i t i a p node pada t r e e pos = [ ] ; id pos = [ ] ; jarak = 150; id node = 1; level = 1; l e f t = 0; [ pos , i d p o s , r i g h t ] = t r e e p o s i t i o n ( pos , i d p o s , . . . l e f t , j a r a k , id no de , i d p a r e n t t r a n , l e v e l ) ; id parent tran (: ,1) = [ ] ;
22
24
// mengurutkan pos => p o s u r u t p o s u r u t = zeros ( pos ) ;
25
p o s u r u t ( : , i d p o s ) = pos ;
23
26 27 28
// mengupdate j a r a k v e r t i k a l a n t a r node p o s u r u t ( 2 , : ) = −j a r a k ∗ p o s u r u t ( 2 , : ) ;
29 30 31 32 33 34 35 36 37 38 39 40 41
// menampilkan c o v e r a b i l i t y t r e e n = s i z e ( n o d e t r e e , 2 ) ; // jumlah node g = make graph( ’Coverability Tree ’ , 1 , n , . . . id parent tran (1 ,:) ,2: n ); g ( ’node_x ’ ) = p o s u r u t ( 1 , : ) ; g ( ’node_y ’ ) = p o s u r u t ( 2 , : ) ; g ( ’default_font_size ’ ) = 1 4 ; g ( ’default_node_diam ’ ) = 3 0 ; g ( ’node_color ’ ) = modulo( . . . [1 id parent tran ( 2 , : ) ] − 1 ,7) + 1; g ( ’edge_color ’ ) = modulo( . . . id parent tran ( 2 , : ) − 1 ,7) + 1;
273
42
g ( ’default_node_border ’ ) = 2 ;
43
g ( ’edge_width’ ) = 2∗ ones ( 1 , n ) ;
44 45 46 47
// membuat l a b e l node l a b e l = emptystr ( 1 , n ) ; for i = 1 : n
50
l a b e l ( i ) = st r c at ( st r ing ( n o d e t r e e ( : , i ) ) , ’;’ ) ; end l a b e l = ’[’ + l a b e l + ’]’ ;
51
g ( ’node_label’ ) = l a b e l ;
48 49
52 53 54 55
// membuat l a b e l a rc label (n) = [ ] ; for i = 1 : n−1
57
l a b e l ( i ) = namatran ( i d p a r e n t t r a n ( 2 , i ) ) ; end
58
g ( ’edge_label’ ) = l a b e l ;
56
59 60 61 62 63
show graph ( g , . . . [ 1 max( p o s u r u t ( 1 , : ) ) −min( p o s u r u t ( 1 , : ) ) . . . max( p o s u r u t ( 2 , : ) ) −min( p o s u r u t ( 2 , : ) ) ] ) ; endfunction
A.23
File covpipe.sci
function c o v p i p e 2 // f u n g s i i n i b e r t u j u a n membangun c o v e r a b i l i t y t r e e
1
3 4
// d a r i f i l e P e t r i n e t ( xml ) yang d i b u a t // menggunakan PIPE
5 6 7 8 9 10 11 12
// p i l i h f i l e jwb = t k g e t f i l e ( ’*. xml ’ , T i t l e=’Choose Petri net ’ ) ; i f jwb == ’’ // j i k a t i d a k d i t e k a n OK x message ( [ ’Exit from covpipe ’ ] ) ; return ; end 274
13
// membaca f i l e xml yang d i b u a t d a r i PIPE
14
[ forward , backward , mark , namaplace , namatran ] = . . . r e a d p i p e ( jwb ) ;
15 16 17 18 19
// membuat c o v e r a b i l i t y t r e e c o v t r e e ( forward , backward , mark , namatran ) ; endfunction
A.24
File intersectiongui.sci
function i n t e r s e c t i o n g u i 2 // Fungsi i n i melakukan s i m u l a s i jumlah pengguna 1
3 4
// d i s e t i a p j a l u r pada persimpangan // yang b e r b a s i s GUI .
5 6 7 8 9 10
// menginputkan jumlah j a l u r dan lama s i m u l a s i [ jwb , j m l j a l u r , waktusim ] = getvalue ( . . . ’Traffic lights simulation in intersection ’ , . . . [ ’Number of lanes ’ ; ’Simulation time ’ ] , . . . l i s t ( ’vec ’ , 1 , ’vec ’ , 1 ) , [ ’2’ ; ’100 ’ ] ) ;
11 12
// j i k a d i t e k a n c a n c e l , maka k e l u a r d a r i program
13
15
i f jwb == %f x message ( ’Exit from intersectiongui ’ ) ; return ;
16
end
14
17 18 19 20 21 22
// i n i s i a l i s a s i i n p u t i n i t p e n g g u n a = ones ( 1 0 , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( 1 0 , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ;
23 24 25 26 27
// i n i s i a l i s a s i data1 = zeros ( j m l j a l u r , 1 ) ; data2 = zeros ( j m l j a l u r , 1 ) ; data3 = zeros ( j m l j a l u r , 1 ) ; 275
28
// l a n j u t a n i n i s i a l i s a s i
29
data4 = zeros ( j m l j a l u r , 1 ) ; data5 = zeros ( j m l j a l u r , 1 ) ;
30
33
data6 = zeros ( j m l j a l u r , 1 ) ; data7 = zeros ( j m l j a l u r , 1 ) ; data8 = zeros ( j m l j a l u r , 1 ) ;
34
data9 = zeros ( j m l j a l u r , 1 ) ;
31 32
35 36
// memproses 10 j a l u r
37
for i = 1 : f l o o r ( j m l j a l u r / 1 0 ) // j u d u l d i a l o g
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( ( i −1)∗10+1) + ’ - ’ + st r ing ( i ∗ 1 0 ) + . . . ’ of ’ + st r ing ( j m l j a l u r ) ; // menginputkan i n f o r m a s i s e t i a p j a l u r [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , data8s , d a t a 9 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Mean arrival ’ ; . . . ’Variance arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . . ’Maximum green turn on’ ; . . . ’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . . ’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . . ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . . ’col ’ , 1 0 ) , [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; st r c at ( st r ing ( init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( i n i t v a r ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
276
...
... ...
...
64
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program
65
i f jwb == %f x message ( ’Exit from intersectiongui ’ ) ;
66 67 68
return ; end
69 70 71 72 73 74 75 76 77 78 79 80
// menyimpan d a ta yang d i i n p u t k a n data1 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 1 s ; data2 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 2 s ; data3 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 3 s ; data4 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 4 s ; data5 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 5 s ; data6 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 6 s ; data7 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 7 s ; data8 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 8 s ; data9 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 9 s ; end
81 82 83 84 85 86 87
i f modulo( j m l j a l u r , 1 0 ) ˜= 0 // menyesuaikan ukuran i n i t p e n g g u n a = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones (modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ;
88 89
s t r j u d u l = ’Enter information for lanes ’ + . . .
90
st r ing ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 ) + . . . ’ - ’ + st r ing ( j m l j a l u r ) + ’ of ’ + . . . st r ing ( j m l j a l u r ) ;
91 92 93 94 95 96 97 98 99
// menginputkan j a l u r s i s a n y a [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , data8s , d a t a 9 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Mean arrival ’ ; . . . ’Variance arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . .
277
100
’Maximum green turn on’ ; . . .
101
’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . .
102 103 104 105 106 107 108 109 110 111 112 113 114 115
’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; st r c at ( st r ing ( init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( i n i t v a r ) , ’;’ ) ; . . .
...
st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; . . .
118
st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; . . .
119
st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
116 117
...
120 121 122 123 124 125
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program i f jwb == %f x message ( ’Exit from intersectiongui ’ ) ; return ; end
126 127 128 129 130 131 132 133 134 135
// menyimpan d a ta yang d i i n p u t k a n data1 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data1s ; data2 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data2s ; data3 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data3s ; data4 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data4s ;
278
136
data5 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . .
137
data5s ; data6 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . .
138 139 140 141 142 143 144
data6s ; data7 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data7s ; data8 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data8s ; data9 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data9s ;
145 146
end
147 148 149 150
// memang t i d a k urut , menyesuaikan dengan i n t e r s e c t i o n data = [ data1 data2 data4 data7 data3 data5 data8 . . . data6 data9 ] ;
151 152 153
// memanggil p r o s e d u r untuk m e n s i m ul a s i k a n pengguna = i n t e r s e c t i o n ( data , waktusim ) ;
154 155 156 157 158 159
// menampilkan g r a f i k plot ( pengguna ’ ) ; t i t l e ( ’Traffic lights simulation in intersection ’ ) ; x l a b e l ( ’Time ’ ) ; y l a b e l ( ’Number of vehicles ’ ) ;
l e g e n d ( ’Lane ’ + st r ing ( 1 : j m l j a l u r ) ’ ) ; 161 endfunction 160
A.25 1 2 3 4 5 6 7 8
File intersectionguiext.sci
function i n t e r s e c t i o n g u i e x t // s i m u l a s i jumlah pengguna b e r b a s i s GUI // k e d a ta n g a n b e r d i s t r i b u s i uniform // menginputkan jumlah j a l u r dan lama s i m u l a s i [ jwb , j m l j a l u r , waktusim ] = getvalue ( . . . ’Traffic lights simulation in intersection ’ , . . . [ ’Number of lanes ’ ; ’Simulation time ’ ] , . . . l i s t ( ’vec ’ , 1 , ’vec ’ , 1 ) , [ ’2’ ; ’100 ’ ] ) ; 279
9 10 11 12 13
// j i k a d i t e k a n c a n c e l , maka k e l u a r d a r i program i f jwb == %f x message ( ’Exit from intersectionguiext ’ ) ; return ; end
14 15 16 17 18 19
// i n i s i a l i s a s i i n p u t i n i t p e n g g u n a = ones ( 1 0 , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( 1 0 , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ;
20 21 22 23 24 25 26 27 28 29
// i n i s i a l i s a s i data1 = zeros ( j m l j a l u r , 1 ) ; data2 = zeros ( j m l j a l u r , 1 ) ; data3 = zeros ( j m l j a l u r , 1 ) ; data4 = zeros ( j m l j a l u r , 1 ) ; data5 = zeros ( j m l j a l u r , 1 ) ; data6 = zeros ( j m l j a l u r , 1 ) ; data7 = zeros ( j m l j a l u r , 1 ) ; data8 = zeros ( j m l j a l u r , 1 ) ;
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
for i = 1 : f l o o r ( j m l j a l u r / 1 0 ) s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( ( i −1)∗10+1) + ’ - ’ + st r ing ( i ∗ 1 0 ) + . . . ’ of ’ + st r ing ( j m l j a l u r ) ; // menginputkan 10 j a l u r [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , d a t a 8 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Maximum arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . . ’Maximum green turn on’ ; . . . ’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . . ’Maximum yellow turn on’ ] , . . .
280
45
l i s t ( ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . .
46
’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; . . .
47
st r c at ( st r ing ( init ma x ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; . . .
48 49 50
53
st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; . . .
54
st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
51 52
...
55 56 57 58 59 60
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program i f jwb == %f x message ( ’Exit from intersectionguiext ’ ) ; return ; end
61 62 63 64 65 66 67 68 69 70 71
// menyimpan d a ta yang d i i n p u t k a n data1 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 1 s ; data2 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 2 s ; data3 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 3 s ; data4 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 4 s ; data5 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 5 s ; data6 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 6 s ; data7 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 7 s ; data8 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 8 s ; end
72 73
// memproses s i s a n y a j i k a ada
74
i f modulo( j m l j a l u r , 1 0 ) ˜= 0 // menyesuaikan ukuran m a t r i k s
75 76 77 78 79 80
// menjadi l e b i h k e c i l d a r i sebelumnya i n i t p e n g g u n a = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones (modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ;
281
81
// j u d u l d i a l o g
82
s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 ) + . . .
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
’ - ’ + st r ing ( j m l j a l u r ) + ’ of ’ + . . . st r ing ( j m l j a l u r ) ; // menginputkan j a l u r s i s a n y a [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , d a t a 8 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Maximum arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . . ’Maximum green turn on’ ; . . . ’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . . ’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; . . . st r c at ( st r ing ( init ma x ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ;
... ...
st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; . . . st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
110 111
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program
112
i f jwb == %f // menampilkan pesan x message ( ’Exit from intersectionguiext ’ ) ;
113 114 115 116
return ; end
282
117
// menyimpan d a ta yang d i i n p u t k a n
118
data1 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data1s ;
119 120 121 122 123 124 125 126 127 128 129 130 131 132
data2 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data2s ; data3 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data3s ; data4 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data4s ; data5 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data5s ; data6 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data6s ; data7 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data7s ; data8 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data8s ;
133 134
end
135 136 137 138
// a g a r enak d i i n p u t k a n data = [ data1 data3 data6 data4 data7 data5 data8 . . . data2 ] ;
139 140
// memanggil p r o s e d u r untuk m e n s i m ul a s i k a n
141
pengguna = i n t e r s e c t i o n e x t ( data , waktusim ) ;
142 143 144 145 146 147 148 149 150
// menampilkan g r a f i k plot ( pengguna ’ ) ; // j u d u l g r a f i k t i t l e ( ’Traffic lights simulation in intersection ’ ) ; // l a b e l sumbu x dan sumbu y x l a b e l ( ’Time ’ ) ; y l a b e l ( ’Number of vehicles ’ ) ; // menampilkan k e t e r a n g a n t i a p g r a f i k
l e g e n d ( ’Lane ’ + st r ing ( 1 : j m l j a l u r ) ’ ) ; 152 endfunction 151
283
A.26
File lightsgui.sci
// ∗∗∗ SCIGUI V 2 . 1 AUTO−GENERATED FILE ∗∗∗ 2 // ∗∗∗ DO NOT EDIT BUT SPECIFIED ENTRY−POINTS ∗∗∗
1
3
// MAIN FUNCTION 5 function l i g h t s g u i ( data , waktusim , indlampu ) 4
6 7 8 9 10
// Fungsi i n i melakukan s i m u l a s i lampu l a l u l i n t a s // d a ta : i n f o r m a s i yang d i p e r l u k a n ( i n t e r s e c t i o n . s c i ) // waktusim : lama s i m u l a s i d i l a k u k a n // indlampu : i n d e k s j a l u r yang d i s i m u l a s i k a n // i n d e k s j a l u r d i m u l a i d a r i 1 , 2 , . . .
11 12 13 14 15 16 17 18 19
// INIT−PRE−BEGIN timestep = 1000; jmllampu = length ( indlampu ) ; i f jmllampu > 42 x message ( [ ’Number of traffic lights ’ ; . . . ’cannot exceeds 42’ ] ) ; return ; end
20 21 22 23
// menghitung b e s a r d i a l o g scrwidth = 1024; scrheight = 768;
25
dlg widt h = min( jmllampu , 1 4 ) ∗ 7 0 + 1 0 ; d l g h e i g h t = c e i l ( jmllampu / 1 4 )∗ 2 4 0 + 1 0 ;
26
// INIT−PRE−END
24
27 28
// MAIN GUI
29
h f i g = figur e ( . . . ’BackgroundColor ’ , [ 0 . 7 4 5 0 9 8 0 . 7 4 5 0 9 8 0 . 7 4 5 0 9 8 ] , . . .
30 31 32
’Position ’ , [ c e i l ( ( scr widt h −dlg widt h ) / 2 ) . . . c e i l ( ( s c r h e i g h t −d l g h e i g h t ) / 2 ) dlg widt h d l g h e i g h t ] ) ;
33 34 35
// C re a te o b j e c t s hobj = zeros ( 6 , jmllampu ) ; 284
36 37 38 39 40 41 42
for i = 1 : c e i l ( jmllampu / 1 4 ) for j = 1 :min( jmllampu − ( i − 1 ) ∗ 1 4 , 1 4 ) // FRAME: tempat lampu l a l u l i n t a s hobj ( 6 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’frame ’ , . . . ’BackgroundColor ’ , [ 0 0 0 ] , . . . ’Position ’ , [10+( j −1)∗70 40+( i −1)∗240 60 1 7 0 ] ) ;
43 44
// LABEL: t u l i s a n d i bawah lampu l a l u l i n t a s
45
hobj ( 5 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . .
46 47 48 49 50 51 52 53 54 55 56 57 58
’String ’ , st r ing ( data ( indlampu ( . . . ( i − 1)∗14 + j ) , 1 ) ) , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , . . . [0.745098 0.745098 0 .7 4 5 0 9 8 ] , . . . ’ForegroundColor ’ , . . . [0.254902 0.254902 0 .2 5 4 9 0 2 ] , . . . ’Position ’ , [10+( j −1)∗70 10+( i −1)∗240 60 2 5 ] ) ;
59 60 61 62 63 64 65 66 67 68 69 70 71
// LABEL: lampu l a l u l i n t a s h i j a u hobj ( 4 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , [ 1 1 1 ] , . . . ’ForegroundColor ’ , [ 1 0 1 ] , . . . ’Position ’ , [15+( j −1)∗70 45+( i −1)∗240 50 5 0 ] ) ;
285
72
// LABEL: lampu l a l u l i n t a s k un i n g
73
hobj ( 3 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . .
74 75 76 77 78 79 80
’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . .
82
’BackgroundColor ’ , [ 1 1 1 ] , . . . ’ForegroundColor ’ , [ 0 0 1 ] , . . .
83
’Position ’ , [15+( j −1)∗70 100+( i −1)∗240 50 5 0 ] ) ;
81
84 85
// LABEL: lampu l a l u l i n t a s merah
86
hobj ( 2 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . .
87 88 89 90 91 92
’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . .
95
’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , [ 1 1 1 ] , . . . ’ForegroundColor ’ , [ 0 1 1 ] , . . .
96
’Position ’ , [15+( j −1)∗70 155+( i −1)∗240 50 5 0 ] ) ;
93 94
97 98 99 100 101 102 103 104 105 106 107
// LABEL: t u l i s a n d i a t a s lampu l a l u l i n t a s hobj ( 1 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , st r ing ( indlampu ( ( i − 1 ) ∗ 1 4 + j ) ) , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , . . .
286
108
[0.745098 0.745098 0 .7 4 5 0 9 8 ] , . . .
109
’ForegroundColor ’ , [ 0 0 1 ] , . . . ’Position ’ , [10+( j −1)∗70 215+( i −1)∗240 60 2 5 ] ) ;
110 111 112
end end
113 114 115
// jumlah j a l u r , jumlah b a r i s m a t r i k s d a ta j m l j a l u r = s i z e ( data , 1 ) ;
116 117 118
// l s t l a m p u d i g un a k a n untuk m e n g a n t i s i p a s i k e t i k a // s u a t u j a l u r d i t a m p i l k a n l e b i h d a r i s a t u k a l i
121
lstlampu = l i s t ( ) ; for i = 1 : j m l j a l u r l s t l a m p u ( $+1) = find ( indlampu == i )
122
end
119 120
123 124 125 126 127 128
// i n i s i a l i s a s i p r o s e s s i m u l a s i pengguna = data ( : , 1 ) ; t = 1; // j a l u r yang d i l a y a n i , i n d e k s d i k u r a n g i s a t u j l r = 0;
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
// ta h a p i n i s i a l i s a s i s i m u l a s i persimpangan t a m p i l = zeros ( j m l j a l u r , 1 ) ; lama = zeros ( j m l j a l u r , 2 ) ; // 1 = h i j a u , 2 = k un i n g for i = 1 : j m l j a l u r xpre = pengguna ( i ) + data ( i , 2 ) ∗sum( lama ( 1 : i − 1 , : ) ) ; lama ( i , 1 ) = min(max( c e i l ( xpre / data ( i , 3 ) ) , 1 ) , . . . data ( i , 8 ) ) ; xpre = xpre + ( data ( i , 2 ) − data ( i , 3 ) ) ∗ lama ( i , 1 ) ; lama ( i , 2 ) = min(max( c e i l ( xpre / data ( i , 4 ) ) , 1 ) , . . . data ( i , 9 ) ) ; t a m p i l ( i ) = sum( lama ( 1 : i − 1 , : ) ) end // lampu l a l u l i n t a s h i j a u menyala d i j a l u r 1 t a m p i l ( 1 ) = lama ( 1 , 1 ) ;
287
144
// i n i s i a l i s a s i t a m p i l a n
145
// lama lampu l a l u l i n t a s h i j a u menyala d i j a l u r 1 for i = l s t l a m p u ( 1 )
146 147 148 149
set ( hobj ( 4 , i ) , ’BackgroundColor ’ , [ 0 1 0 ] ) ; set ( hobj ( 4 , i ) , ’String ’ , st r ing ( t a m p i l ( 1 ) ) ) ; end
150 151 152 153 154 155 156 157
// lama lampu l a l u l i n t a s merah menyala d i j a l u r l a i n for i = 2 : j m l j a l u r for j = l s t l a m p u ( i ) set ( hobj ( 2 , j ) , ’BackgroundColor ’ , [ 1 0 0 ] ) ; set ( hobj ( 2 , j ) , ’String ’ , st r ing ( t a m p i l ( i ) ) ) ; end end
158 159
// w a i t b a r
160
wb = w a i t b a r ( 0 , ’Simulation process ’ ) ;
161 162
// p r o s e s s i m u l a s i
163
while t < waktusim // s i m u l a s i h i j a u menyala
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
for i = 1 : lama ( j l r +1 ,1) sleep ( timestep ) ; w a i t b a r (min( t / waktusim , 1 ) , wb ) ; // up d a te v a r i a b e l pengguna = max( pengguna + data ( : , 2 ) + . . . round( sqrt ( data ( : , 5 ) ) . ∗ . . . rand ( j m l j a l u r , 1 , ’normal ’ ) ) , 0 ) ; pengguna ( j l r +1) = max( pengguna ( j l r +1) − . . . data ( j l r +1 ,3) − round( sqrt ( data ( j l r +1 ,6))∗ . . . rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; // up d a te t a m p i l a n // lampu l a l u l i n t a s merah d i j a l u r yang l a i n tampil = tampil − 1 ; ind = [ 1 : j l r j l r +2: j m l j a l u r ] ;
288
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
for j = ind ; for k = l s t l a m p u ( j ) set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j ) ) ) ; end end // lampu l a l u l i n t a s h i j a u for k = l s t l a m p u ( j l r +1) set ( hobj ( 4 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end // pengguna for j = 1 : j m l j a l u r for k = l s t l a m p u ( j ) set ( hobj ( 5 , k ) , ’String ’ , st r ing ( pengguna ( j ) ) ) ; end end end // p r o s e s p e r g a n t i a n // up d a te v a r i a b e l t a m p i l ( j l r +1) = lama ( j l r + 1 , 2 ) ; // up d a te t a m p i l a n for k = l s t l a m p u ( j l r +1) // memadamkan lampu l a l u l i n t a s h i j a u set ( hobj ( 4 , k ) , ’String ’ , ’’ ) ; set ( hobj ( 4 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s k un i n g set ( hobj ( 3 , k ) , ’BackgroundColor ’ , [ 1 1 0 ] ) ; set ( hobj ( 3 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end // s i m u l a s i k un i n g menyala for i = 1 : lama ( j l r +1 ,2) sleep ( timestep ) ; w a i t b a r (min( t / waktusim , 1 ) , wb ) ; // up d a te v a r i a b e l pengguna = max( pengguna + data ( : , 2 ) + . . . round( sqrt ( data ( : , 5 ) ) . ∗ . . . rand ( j m l j a l u r , 1 , ’normal ’ ) ) , 0 ) ;
289
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
pengguna ( j l r +1) = max( pengguna ( j l r +1) − . . . data ( j l r +1 ,4) − round( sqrt ( data ( j l r +1 ,7))∗ . . . rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1; // up d a te t a m p i l a n // lampu l a l u l i n t a s merah d i j a l u r yang l a i n tampil = tampil − 1 ; ind = [ 1 : j l r j l r +2: j m l j a l u r ] ; for j = ind for k = l s t l a m p u ( j ) set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j ) ) ) ; end end // lampu l a l u l i n t a s h i j a u for k = l s t l a m p u ( j l r +1) set ( hobj ( 3 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end // pengguna for j = 1 : j m l j a l u r for k = l s t l a m p u ( j ) set ( hobj ( 5 , k ) , ’String ’ , st r ing ( pengguna ( j ) ) ) ; end end end
240 241
// p r o s e s p e r g a n t i a n
242
// up d a te v a r i a b e l lama ( j l r + 1 , : ) = 0 ; t a m p i l ( j l r +1) = sum( lama ) ;
243 244 245 246 247 248 249 250 251
xpre = pengguna ( j l r +1) + data ( j l r +1 ,2)∗sum( lama ) ; lama ( j l r +1 ,1) = min(max( c e i l ( xpre / . . . data ( j l r + 1 , 3 ) ) , 1 ) , data ( j l r + 1 , 8 ) ) ; xpre = xpre + ( data ( j l r +1 ,2) − . . . data ( j l r +1 ,3))∗ lama ( j l r + 1 , 1 ) ; lama ( j l r +1 ,2) = min(max( c e i l ( xpre / . . . data ( j l r + 1 , 4 ) ) , 1 ) , data ( j l r + 1 , 9 ) ) ;
290
252
// up d a te t a m p i l a n
253
for k = l s t l a m p u ( j l r +1) // memadamkan lampu l a l u l i n t a s k un i n g
254
set ( hobj ( 3 , k ) , ’String ’ , ’’ ) ; set ( hobj ( 3 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s merah
255 256 257 258 259 260
set ( hobj ( 2 , k ) , ’BackgroundColor ’ , [ 1 0 0 ] ) ; set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end
261 262
// mengubah j a l u r yang h i j a u a ta u k un i n g
263
j l r = modulo( j l r + 1 , j m l j a l u r ) ; t a m p i l ( j l r +1) = lama ( j l r + 1 , 1 ) ; for k = l s t l a m p u ( j l r +1)
264 265
// memadamkan lampu l a l u l i n t a s merah set ( hobj ( 2 , k ) , ’String ’ , ’’ ) ;
266 267
set ( hobj ( 2 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s h i j a u set ( hobj ( 4 , k ) , ’BackgroundColor ’ , [ 0 1 0 ] ) ;
268 269 270 271 272 273
set ( hobj ( 4 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end end
274 275
sleep ( timestep ) ;
276
w a i t b a r (min( t / waktusim , 1 ) , wb ) ; w i n c l o s e (wb ) ;
277 278
endfunction
A.27
File lightsguiext.sci
// ∗∗∗ SCIGUI V 2 . 1 AUTO−GENERATED FILE ∗∗∗ 2 // ∗∗∗ DO NOT EDIT BUT SPECIFIED ENTRY−POINTS ∗∗∗ 1
3
// MAIN FUNCTION 5 function l i g h t s g u i e x t ( data , waktusim , indlampu ) 4
6 7
// Fungsi i n i melakukan s i m u l a s i lampu l a l u l i n t a s // d a ta : m a t r i k s i n p u t ( i n t e r s e c t i o n e x t . s c i ) 291
8
// waktusim : lama s i m u l a s i d i l a k u k a n
9
// indlampu : i n d e k s lampu l a l u l i n t a s yang d i t a m p i l k a n
10 11 12 13 14 15 16 17 18
// INIT−PRE−BEGIN timestep = 1000; jmllampu = length ( indlampu ) ; i f jmllampu > 42 x message ( [ ’Number of traffic lights ’ ; . . . ’cannot exceeds 42’ ] ) ; return ; end
19 20 21 22 23 24 25
// menghitung b e s a r d i a l o g scrwidth = 1024; scrheight = 768; dlg widt h = min( jmllampu , 1 4 ) ∗ 7 0 + 1 0 ; d l g h e i g h t = c e i l ( jmllampu / 1 4 )∗ 2 4 0 + 1 0 ; // INIT−PRE−END
26 27 28 29 30 31
// MAIN GUI h f i g = figur e ( . . . ’BackgroundColor ’ , [ 0 . 7 4 5 0 9 8 0 . 7 4 5 0 9 8 0 . 7 4 5 0 9 8 ] , . . . ’Position ’ , [ c e i l ( ( scr widt h −dlg widt h ) / 2 ) . . . c e i l ( ( s c r h e i g h t −d l g h e i g h t ) / 2 ) dlg widt h d l g h e i g h t ] ) ;
32 33
// C re a te o b j e c t s
34
hobj = zeros ( 6 , jmllampu ) ;
35 36 37
for i = 1 : c e i l ( jmllampu / 1 4 ) for j = 1 :min( jmllampu − ( i − 1 ) ∗ 1 4 , 1 4 )
38 39 40 41 42 43
// FRAME: tempat lampu l a l u l i n t a s hobj ( 6 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’frame ’ , . . . ’BackgroundColor ’ , [ 0 0 0 ] , . . . ’Position ’ , [10+( j −1)∗70 40+( i −1)∗240 60 1 7 0 ] ) ;
292
44
// LABEL: t u l i s a n d i bawah lampu l a l u l i n t a s
45
hobj ( 5 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . .
46 47 48 49 50 51 52 53 54
’String ’ , . . . st r ing ( data ( indlampu ( ( i − 1 ) ∗ 1 4 + j ) , 1 ) ) , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , . . .
57
[0.745098 0.745098 0 .7 4 5 0 9 8 ] , . . . ’ForegroundColor ’ , . . . [0.254902 0.254902 0 .2 5 4 9 0 2 ] , . . .
58
’Position ’ , [10+( j −1)∗70 10+( i −1)∗240 60 2 5 ] ) ;
55 56
59 60 61 62 63 64 65 66 67 68 69 70 71
// LABEL: lampu l a l u l i n t a s h i j a u hobj ( 4 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , [ 1 1 1 ] , . . . ’ForegroundColor ’ , [ 1 0 1 ] , . . . ’Position ’ , [15+( j −1)∗70 45+( i −1)∗240 50 5 0 ] ) ;
72 73 74 75 76 77 78 79
// LABEL: lampu l a l u l i n t a s k un i n g hobj ( 3 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . . ’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . .
293
80
’FontSize ’ , 2 4 , . . .
81
’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , [ 1 1 1 ] , . . .
82
’ForegroundColor ’ , [ 0 0 1 ] , . . . ’Position ’ , [15+( j −1)∗70 100+( i −1)∗240 50 5 0 ] ) ;
83 84 85 86 87 88
// LABEL: lampu l a l u l i n t a s merah hobj ( 2 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , ’’ , . . . ’HorizontalAlignment ’ , ’center ’ , . . .
89 90
’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . . ’FontSize ’ , 2 4 , . . .
91 92 93
’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , [ 1 1 1 ] , . . .
94 95
’ForegroundColor ’ , [ 0 1 1 ] , . . . ’Position ’ , [15+( j −1)∗70 155+( i −1)∗240 50 5 0 ] ) ;
96 97 98 99 100
// LABEL: t u l i s a n d i a t a s lampu l a l u l i n t a s hobj ( 1 , ( i − 1 ) ∗ 1 4 + j ) = uicontrol ( h f i g , . . . ’Style ’ , ’text ’ , . . . ’String ’ , st r ing ( indlampu ( ( i − 1 ) ∗ 1 4 + j ) ) , . . . ’HorizontalAlignment ’ , ’center ’ , . . .
101 102 103
’VerticalAlignment ’ , ’middle ’ , . . . ’FontAngle’ , ’normal ’ , . . .
104 105
’FontSize ’ , 2 4 , . . . ’FontWeight ’ , ’demi ’ , . . . ’BackgroundColor ’ , . . .
106 107 108
110
[0.745098 0.745098 0 .7 4 5 0 9 8 ] , . . . ’ForegroundColor ’ , [ 0 0 1 ] , . . .
111
’Position ’ , [10+( j −1)∗70 215+( i −1)∗240 60 2 5 ] ) ;
109
112 113 114 115
end end // b a g i a n sebelumnya d i g un a k a n untuk membentuk GUI // s e l a n j u t n y a a d a l a h p r o s e s s i m u l a s i
294
116
// jumlah j a l u r , jumlah b a r i s m a t r i k s d a ta
117
j m l j a l u r = s i z e ( data , 1 ) ;
118 119 120 121
// l s t l a m p u d i g un a k a n untuk m e n g a n t i s i p a s i k e t i k a // lampu l a l u l i n t a s pada s u a t u j a l u r d i t a m p i l k a n // l e b i h d a r i s a t u .
124
lstlampu = l i s t ( ) ; for i = 1 : j m l j a l u r l s t l a m p u ( $+1) = find ( indlampu == i )
125
end
122 123
126
129
// i n i s i a l i s a s i p r o s e s s i m u l a s i pengguna = data ( : , 1 ) ; t = 1;
130
j l r = 0 ; // j a l u r yang d i l a y a n i , i n d e k s d i k u r a n g i s a t u
127 128
131 132 133 134 135 136 137 138 139 140 141 142 143 144
// ta h a p i n i s i a l i s a s i s i m u l a s i persimpangan t a m p i l = zeros ( j m l j a l u r , 1 ) ; lama = zeros ( j m l j a l u r , 2 ) ; // 1 = h i j a u , 2 = k un i n g for i = 1 : j m l j a l u r xpre = pengguna ( i ) + data ( i , 8 ) ∗sum( lama ( 1 : i − 1 , : ) ) / 2 ; lama ( i , 1 ) = min(max( c e i l ( xpre / data ( i , 2 ) ) , 1 ) , . . . data ( i , 6 ) ) ; xpre = xpre + ( data ( i , 8 ) / 2 − data ( i , 2 ) ) ∗ lama ( i , 1 ) ; lama ( i , 2 ) = min(max( c e i l ( xpre / data ( i , 3 ) ) , 1 ) , . . . data ( i , 7 ) ) ; t a m p i l ( i ) = sum( lama ( 1 : i − 1 , : ) ) end t a m p i l ( 1 ) = lama ( 1 , 1 ) ;
145 146
// i n i s i a l i s a s i t a m p i l a n
147
// lama lampu l a l u l i n t a s h i j a u menyala d i j a l u r 1 for i = l s t l a m p u ( 1 ) set ( hobj ( 4 , i ) , ’BackgroundColor ’ , [ 0 1 0 ] ) ;
148 149 150 151
set ( hobj ( 4 , i ) , ’String ’ , st r ing ( t a m p i l ( 1 ) ) ) ; end
295
152
// lama lampu l a l u l i n t a s merah menyala d i j a l u r l a i n
153
for i = 2 : j m l j a l u r for j = l s t l a m p u ( i )
154 155 156 157 158
set ( hobj ( 2 , j ) , ’BackgroundColor ’ , [ 1 0 0 ] ) ; set ( hobj ( 2 , j ) , ’String ’ , st r ing ( t a m p i l ( i ) ) ) ; end end
159 160
// w a i t b a r
161
wb = w a i t b a r ( 0 , ’Simulation process ’ ) ;
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
// p r o s e s s i m u l a s i while t < waktusim // s i m u l a s i h i j a u menyala for i = 1 : lama ( j l r +1 ,1) sleep ( timestep ) ; w a i t b a r (min( t / waktusim , 1 ) , wb ) ; // up d a te v a r i a b e l for j = 1 : j m l j a l u r pengguna ( j ) = max( pengguna ( j ) + . . . grand ( 1 , 1 , ’uin ’ , 0 , data ( j , 8 ) ) , 0 ) ; end pengguna ( j l r +1) = max( pengguna ( j l r +1) − . . . data ( j l r +1 ,2) − round( sqrt ( data ( j l r +1 ,4))∗ . . . rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1;
178 179 180 181 182 183 184 185 186 187
// up d a te t a m p i l a n // lampu l a l u l i n t a s merah d i j a l u r yang l a i n tampil = tampil − 1 ; ind = [ 1 : j l r j l r +2: j m l j a l u r ] ; for j = ind ; for k = l s t l a m p u ( j ) set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j ) ) ) ; end end
296
188
// lampu l a l u l i n t a s h i j a u
189
for k = l s t l a m p u ( j l r +1) set ( hobj ( 4 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ;
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
end // pengguna for j = 1 : j m l j a l u r for k = l s t l a m p u ( j ) set ( hobj ( 5 , k ) , ’String ’ , st r ing ( pengguna ( j ) ) ) ; end end end // p r o s e s p e r g a n t i a n // up d a te v a r i a b e l t a m p i l ( j l r +1) = lama ( j l r + 1 , 2 ) ; // up d a te t a m p i l a n for k = l s t l a m p u ( j l r +1) // memadamkan lampu l a l u l i n t a s h i j a u set ( hobj ( 4 , k ) , ’String ’ , ’’ ) ; set ( hobj ( 4 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s k un i n g set ( hobj ( 3 , k ) , ’BackgroundColor ’ , [ 1 1 0 ] ) ; set ( hobj ( 3 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end // s i m u l a s i k un i n g menyala for i = 1 : lama ( j l r +1 ,2) sleep ( timestep ) ; w a i t b a r (min( t / waktusim , 1 ) , wb ) ; // up d a te v a r i a b e l for j = 1 : j m l j a l u r pengguna ( j ) = max( pengguna ( j ) + . . . grand ( 1 , 1 , ’uin ’ , 0 , data ( j , 8 ) ) , 0 ) ; end pengguna ( j l r +1) = max( pengguna ( j l r +1) − . . . data ( j l r +1 ,3) − round( sqrt ( data ( j l r +1 ,5))∗ . . . rand ( 1 , 1 , ’normal ’ ) ) , 0 ) ; t = t + 1;
297
224
// up d a te t a m p i l a n
225
// lampu l a l u l i n t a s merah d i j a l u r yang l a i n tampil = tampil − 1 ;
226 227 228 229 230 231 232
ind = [ 1 : j l r j l r +2: j m l j a l u r ] ; for j = ind for k = l s t l a m p u ( j ) set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j ) ) ) ; end end
233 234
// lampu l a l u l i n t a s h i j a u
235
for k = l s t l a m p u ( j l r +1) set ( hobj ( 3 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end
236 237 238 239
// pengguna
240
for j = 1 : j m l j a l u r for k = l s t l a m p u ( j ) set ( hobj ( 5 , k ) , ’String ’ , st r ing ( pengguna ( j ) ) ) ;
241 242 243 244 245
end end end
246 247
// p r o s e s p e r g a n t i a n
248
// up d a te v a r i a b e l lama ( j l r + 1 , : ) = 0 ;
249 250 251 252 253 254 255 256 257 258 259
t a m p i l ( j l r +1) = sum( lama ) ; // menghitung lama lampu l a l u l i n t a s h i j a u dan k un i n g // menyala pada p e r i o d e b e r i k u t n y a xpre = pengguna ( j l r +1) + data ( j l r +1 ,8)∗sum( lama ) / 2 ; lama ( j l r +1 ,1) = min(max( c e i l ( xpre / . . . data ( j l r + 1 , 2 ) ) , 1 ) , data ( j l r + 1 , 6 ) ) ; xpre = xpre + ( data ( j l r +1 ,8)/2 − data ( j l r +1 ,2))∗ . . . lama ( j l r + 1 , 1 ) ; lama ( j l r +1 ,2) = min(max( c e i l ( xpre / . . . data ( j l r + 1 , 3 ) ) , 1 ) , data ( j l r + 1 , 7 ) ) ;
298
260
// up d a te t a m p i l a n
261
for k = l s t l a m p u ( j l r +1) // memadamkan lampu l a l u l i n t a s k un i n g
262
set ( hobj ( 3 , k ) , ’String ’ , ’’ ) ; set ( hobj ( 3 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s merah
263 264 265 266 267 268
set ( hobj ( 2 , k ) , ’BackgroundColor ’ , [ 1 0 0 ] ) ; set ( hobj ( 2 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end
269 270
// mengubah j a l u r yang h i j a u a ta u k un i n g
271
j l r = modulo( j l r + 1 , j m l j a l u r ) ; t a m p i l ( j l r +1) = lama ( j l r + 1 , 1 ) ; for k = l s t l a m p u ( j l r +1)
272 273
// memadamkan lampu l a l u l i n t a s merah set ( hobj ( 2 , k ) , ’String ’ , ’’ ) ;
274 275
set ( hobj ( 2 , k ) , ’BackgroundColor ’ , [ 1 1 1 ] ) ; // menyalakan lampu l a l u l i n t a s h i j a u set ( hobj ( 4 , k ) , ’BackgroundColor ’ , [ 0 1 0 ] ) ;
276 277 278 279 280 281
set ( hobj ( 4 , k ) , ’String ’ , st r ing ( t a m p i l ( j l r + 1 ) ) ) ; end end
282 283
sleep ( timestep ) ;
284
w a i t b a r (min( t / waktusim , 1 ) , wb ) ; w i n c l o s e (wb ) ;
285 286
endfunction
A.28
File lightsimulation.sci
function l i g h t s i m u l a t i o n 2 // s i m u l a s i lampu l a l u l i n t a s b e r b a s i s GUI 1
// menginputkan jumlah j a l u r dan lama s i m u l a s i 4 [ jwb , j m l j a l u r , waktusim ] = getvalue ( ’Traffic lights ... 5 simulation in intersection ’ , [ ’Number of lanes ’ ; . . . 3
6 7
’Simulation time ’ ] , l i s t ( ’vec ’ , 1 , ’vec ’ , 1 ) , . . . [ ’4’ ; ’100 ’ ] ) ; 299
8
// j i k a d i t e k a n c a n c e l , maka k e l u a r d a r i program
9
i f jwb == %f x message ( ’Exit from lightsimulation ’ ) ;
10 11 12
return ; end
13 14 15 16 17 18
// i n i s i a l i s a s i i n p u t i n i t p e n g g u n a = ones ( 1 0 , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( 1 0 , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ;
19 20 21 22 23 24 25 26
// i n i s i a l i s a s i data1 = zeros ( j m l j a l u r , 1 ) ; data2 = zeros ( j m l j a l u r , 1 ) ; data3 = zeros ( j m l j a l u r , 1 ) ; data4 = zeros ( j m l j a l u r , 1 ) ; data5 = zeros ( j m l j a l u r , 1 ) ; data6 = zeros ( j m l j a l u r , 1 ) ;
28
data7 = zeros ( j m l j a l u r , 1 ) ; data8 = zeros ( j m l j a l u r , 1 ) ;
29
data9 = zeros ( j m l j a l u r , 1 ) ;
27
30 31
// memproses 10 j a l u r
32
for i = 1 : f l o o r ( j m l j a l u r / 1 0 ) // j u d u l d i a l o g
33 34 35 36 37 38 39 40 41 42 43
s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( ( i −1)∗10+1) + ’ - ’ + st r ing ( i ∗ 1 0 ) + . . . ’ of ’ + st r ing ( j m l j a l u r ) ; // menginputkan i n f o r m a s i s e t i a p j a l u r [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , data8s , d a t a 9 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Mean arrival ’ ; . . . ’Variance arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . .
300
44
’Maximum green turn on’ ; . . .
45
’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . .
46 47 48 49 50 51 52 53 54
’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . . ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . . ’col ’ , 1 0 ) , [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; st r c at ( st r ing ( init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( i n i t v a r ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; . . .
57
st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; . . .
58
st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
55 56
...
59 60 61 62 63 64
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program i f jwb == %f x message ( ’Exit from intersectiongui ’ ) ; return ; end
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
// menyimpan d a ta yang d i i n p u t k a n data1 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 1 s ; data2 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 2 s ; data3 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 3 s ; data4 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 4 s ; data5 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 5 s ; data6 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 6 s ; data7 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 7 s ; data8 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 8 s ; data9 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 9 s ; end // j i k a jumlah j a l u r d i persimpangan // bukan k e l i p a t a n 10 maka d i b u t u h k a n b a g i a n // b e r i k u t untuk menginputkan datanya
301
...
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
i f modulo( j m l j a l u r , 1 0 ) ˜= 0 // menyesuaikan ukuran i n i t p e n g g u n a = ones (modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones (modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; // menginputkan s i s a j a l u r ( kurang d a r i 10) s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 ) + . . . ’ - ’ + st r ing ( j m l j a l u r ) + ’ of ’ + . . . st r ing ( j m l j a l u r ) ; [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , data8s , d a t a 9 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Mean arrival ’ ; . . . ’Variance arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . . ’Maximum green turn on’ ; . . . ’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . . ’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; st r c at ( st r ing ( init mea n ) , ’;’ ) ; . . .
...
st r c at ( st r ing ( i n i t v a r ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
302
...
... ...
116
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program
117
i f jwb == %f x message ( ’Exit from intersectiongui ’ ) ;
118 119 120
return ; end
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
// menyimpan d a ta yang d i i n p u t k a n data1 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data1s ; data2 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data2s ; data3 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data3s ; data4 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data4s ; data5 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data5s ; data6 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data6s ; data7 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data7s ; data8 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data8s ; data9 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data9s ;
140 141
end
142 143 144 145
// m e n g i k u t i uruta n d i i n t e r s e c t i o n dan l i g h t s g u i data = [ data1 data2 data4 data7 data3 data5 data8 . . . data6 data9 ] ;
146 147 148 149 150 151
// menentukan jumlah j a l u r yang d i t a m p i l k a n // maksimum jumlah j a l u r yang d a p a t d i t a m p i l k a n // s e b a n ya k 42 jmllampu = x choose ( st r ing ( 1 : 4 2 ) , . . . [ ’How many lanes ’ ; ’will be showed ’ ] ) ;
303
152
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program
153
i f jmllampu == 0 x message ( ’Exit from lightsimulation ’ ) ;
154 155 156
return ; end
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
indlampu = zeros ( 1 , jmllampu ) ; for i = 1 : f l o o r ( jmllampu / 9 ) // menginputkan 9 d a ta lst = list (); for j = 1 : 9 l s t 1 = l i s t ( ’Position ’ + st r ing ( ( i −1)∗9+ j ) , . . . modulo ( ( i −1)∗9+ j −1, j m l j a l u r ) + 1 , . . . st r ing ( 1 : j m l j a l u r ) ) ; l s t ( $+1) = l s t 1 ; end r ep = x choices ( [ ’Indices of lanes ’ ; . . . ’will be showed ’ ] , l s t ) ; i f r ep == [ ] x message ( ’Exit from lightsimulation ’ ) ; return ; end indlampu ( 1 , ( i −1)∗9+1: i ∗ 9 ) = r ep ; end i f modulo( jmllampu , 9 ) ˜= 0 // ada s i s a n y a lst = list (); for i = 1 : modulo( jmllampu , 9 ) l s t 1 = l i s t ( ’Position ’ + . . . st r ing ( jmllampu−i +1) , . . . modulo( jmllampu−i , j m l j a l u r ) + 1 , . . . st r ing ( 1 : j m l j a l u r ) ) ; l s t (0) = lst1 ; end r ep = x choices ( [ ’Indices of lanes ’ ; . . . ’will be showed ’ ] , l s t ) ;
304
188
// j i k a to m b o l OK t i d a k d i t e k a n
189
i f r ep == [ ] x message ( ’Exit from lightsimulation ’ ) ;
190 191 192 193
return ; end indlampu ( 1 , . . . jmllampu−modulo( jmllampu , 9 ) + 1 : jmllampu ) = r ep ;
194 195
end
196 197 198 199
// memanggil p r o s e d u r untuk m e n s i m ul a s i k a n l i g h t s g u i ( data , waktusim , indlampu ) ; endfunction
A.29
File lightsimulationext.sci
function l i g h t s i m u l a t i o n e x t 2 // f u n g s i i n i melakukan s i m u l a s i lampu l a l u l i n t a s 1
3 4
// dengan k e d a ta n g a n b e r d i s t r i b u s i uniform // yang b e r b a s i s GUI
5 6 7
// menginputkan jumlah j a l u r dan lama s i m u l a s i [ jwb , j m l j a l u r , waktusim ] = getvalue ( ’Traffic lights ...
simulation in intersection ’ , [ ’Number of lanes ’ ; . . . 9 ’Simulation time ’ ] , l i s t ( ’vec ’ , 1 , ’vec ’ , 1 ) , . . . 10 [ ’4’ ; ’100 ’ ] ) ; 8
11 12
// j i k a d i t e k a n c a n c e l , maka k e l u a r d a r i program
13
15
i f jwb == %f x message ( ’Exit from lightsimulationext ’ ) ; return ;
16
end
14
17 18 19 20 21 22
// i n i s i a l i s a s i i n p u t i n i t p e n g g u n a = ones ( 1 0 , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( 1 0 , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( 1 0 , 1 ) . ∗ . [ 4 ] ; 305
23
// i n i s i a l i s a s i
24
data1 = zeros ( j m l j a l u r , 1 ) ; data2 = zeros ( j m l j a l u r , 1 ) ;
25 26 27 28 29 30 31
data3 = zeros ( j m l j a l u r , 1 ) ; data4 = zeros ( j m l j a l u r , 1 ) ; data5 = zeros ( j m l j a l u r , 1 ) ; data6 = zeros ( j m l j a l u r , 1 ) ; data7 = zeros ( j m l j a l u r , 1 ) ; data8 = zeros ( j m l j a l u r , 1 ) ;
32 33
// pada s e t i a p i t e r a s i , j a l u r yang d i i n p u t k a n
34
// s e b a n ya k 10 for i = 1 : f l o o r ( j m l j a l u r / 1 0 ) s t r j u d u l = ’Enter information for lanes ’ + . . .
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
st r ing ( ( i −1)∗10+1) + ’ - ’ + st r ing ( i ∗ 1 0 ) + . . . ’ of ’ + st r ing ( j m l j a l u r ) ; // menginputkan d a ta pada s e t i a p j a l u r [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , d a t a 8 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Maximum arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . . ’Maximum green turn on’ ; . . . ’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . . ’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , . . . ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 , ’col ’ , 1 0 ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ; . . . st r c at ( st r ing ( init ma x ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
306
...
... ...
59
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program
60
i f jwb == %f x message ( ’Exit from intersectionguiext ’ ) ;
61 62 63
return ; end
64 65 66 67 68 69 70 71 72 73 74
// menyimpan d a ta yang d i i n p u t k a n data1 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 1 s ; data2 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 2 s ; data3 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 3 s ; data4 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 4 s ; data5 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 5 s ; data6 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 6 s ; data7 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 7 s ; data8 ( ( i −1)∗10+1: i ∗ 1 0 ) = d a t a 8 s ; end
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
// memproses s i s a n y a j i k a ada i f modulo( j m l j a l u r , 1 0 ) ˜= 0 // menyesuaikan ukuran m a t r i k s // menjadi l e b i h k e c i l d a r i sebelumnya i n i t p e n g g u n a = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 1 0 ] ; init mea n = ones (modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; i n i t v a r = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 2 ] ; init ma x = ones ( modulo( j m l j a l u r , 1 0 ) , 1 ) . ∗ . [ 4 ] ; // j u d u l d i a l o g s t r j u d u l = ’Enter information for lanes ’ + . . . st r ing ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 ) + . . . ’ - ’ + st r ing ( j m l j a l u r ) + ’ of ’ + . . . st r ing ( j m l j a l u r ) ; // menginputkan j a l u r s i s a n y a [ jwb , data1s , data2s , data3s , data4s , data5s , data6s , . . . data7s , d a t a 8 s ] = getvalue ( s t r j u d u l , . . . [ ’Initial condition’ ; ’Maximum arrival ’ ; . . . ’Mean departure when green ’ ; . . . ’Variance departure when green ’ ; . . .
307
95
’Maximum green turn on’ ; . . .
96
’Mean departure when yellow ’ ; . . . ’Variance departure when yellow ’ ; . . .
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
’Maximum yellow turn on’ ] , . . . l i s t ( ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) , ’col ’ ,modulo( j m l j a l u r , 1 0 ) , . . . ’col ’ ,modulo( j m l j a l u r , 1 0 ) , ’col ’ , . . . modulo( j m l j a l u r , 1 0 ) ) , . . . [ st r c at ( st r ing ( i n i t p e n g g u n a ) , ’;’ ) ;
...
st r c at ( st r ing ( init ma x ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ i n i t v a r ) , ’;’ ) ; . . . st r c at ( st r ing ( j m l j a l u r ∗ init ma x ) , ’;’ ) ; st r c at ( st r ing ( 2 ∗ init mea n ) , ’;’ ) ; . . . st r c at ( st r ing ( 2 ∗ i n i t v a r ) , ’;’ ) ; st r c at ( st r ing ( init ma x ) , ’;’ ) ] ) ;
...
...
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
// j i k a d i t e k a n c a n c e l maka k e l u a r d a r i program i f jwb == %f // menampilkan pesan x message ( ’Exit from intersectionguiext ’ ) ; return ; end // menyimpan d a ta yang d i i n p u t k a n data1 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data1s ; data2 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data2s ; data3 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data3s ; data4 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data4s ; data5 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data5s ;
308
131
data6 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . .
132
data6s ; data7 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . .
133 134 135 136 137 138 139 140
data7s ; data8 ( j m l j a l u r −modulo( j m l j a l u r , 1 0 ) + 1 : j m l j a l u r ) = . . . data8s ; end // uruta n menggunakan l i g h t s g u i e x t dan i n t e r s e c t i o n e x t data = [ data1 data3 data6 data4 data7 data5 data8 . . . data2 ] ;
141 142 143 144 145 146 147
jmllampu = x choose ( st r ing ( 1 : 4 2 ) , . . . [ ’How many lanes ’ ; ’will be showed ’ ] ) ; i f jmllampu == 0 x message ( ’Exit from lightsimulationext ’ ) ; return ; end
148 149
indlampu = zeros ( 1 , jmllampu ) ;
150
for i = 1 : f l o o r ( jmllampu / 9 ) // menginputkan 9 d a ta
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
lst = list (); for j = 1 : 9 l s t 1 = l i s t ( ’Position ’ + st r ing ( ( i −1)∗9+ j ) , . . . modulo ( ( i −1)∗9+ j −1, j m l j a l u r ) + 1 , . . . st r ing ( 1 : j m l j a l u r ) ) ; l s t ( $+1) = l s t 1 ; end r ep = x choices ( [ ’Indices of lanes ’ ; . . . ’will be showed ’ ] , l s t ) ; i f r ep == [ ] x message ( ’Exit from lightsimulationext ’ ) ; return ; end indlampu ( 1 , ( i −1)∗9+1: i ∗ 9 ) = r ep ; end
309
167 168 169
i f modulo( jmllampu , 9 ) ˜= 0 // ada s i s a n y a lst = list (); for i = 1 : modulo( jmllampu , 9 ) l s t 1 = l i s t ( ’Position ’ + . . . st r ing ( jmllampu−i +1) , . . . modulo( jmllampu−i , j m l j a l u r ) + 1 , . . .
170 171 172 173 174 175 176 177 178 179 180 181 182
st r ing ( 1 : j m l j a l u r ) ) ; l s t (0) = lst1 ; end r ep = x choices ( [ ’Indices of lanes ’ ; . . . ’will be showed ’ ] , l s t ) ; i f r ep == [ ] x message ( ’Exit from lightsimulationext ’ ) ; return ; end indlampu ( 1 , . . . jmllampu−modulo( jmllampu , 9 ) + 1 : jmllampu ) = r ep ;
183 184 185
end // memanggil p r o s e d u r untuk m e n s i m ul a s i k a n
l i g h t s g u i e x t ( data , waktusim , indlampu ) ; 187 endfunction 186
A.30
File buildmacros.sce
mode( −1); 2 toolboxname = ’petrinet ’ ; 1
pathB = g e t a b s o l u t e f i l e p a t h ( ’buildmacros.sce ’ ) ; in ’ + pathB ) ; 4 disp ( ’Building macros 5 genlib ( toolboxname + ’lib ’ , pathB , %t ) ; 3
6
c lear pathB genlib toolboxname ;
A.31
File loadmacros.sce
mode( −1); 2 pathL = g e t a b s o l u t e f i l e p a t h ( ’loadmacros.sce ’ ) ; in ’ +pathL ) ; 3 disp ( ’Loading macros
1
load ( pathL + ’/lib ’ ) ; 5 c lear pathL ;
4
310
Semua file yang telah dituliskan sebelumnya diletakkan pada direktori macros. Pada direktori utama terdapat dua file yaitu builder.sce dan loader.sce. Pada Scilab, sebuah program harus dijalankan terlebih dahulu sebelum digunakan. Program ini dapat digunakan setelah menjalankan fungsi builder.sce kemudian dilanjutkan dengan loader.sce. Berikut dituliskan isi kedua file tersebut.
A.32
File builder.sce
mode( −1); 2 mainpathB = g e t a b s o l u t e f i l e p a t h ( ’builder .sce ’ ) ;
1
chdir ( mainpathB ) ; 4 i f i s d i r ( ’src ’ )
3
5 6 7
chdir ( ’src ’ ) ; exec ( ’buildsrc .sce ’ ) ; chdir ( ’.. ’ ) ;
end 9 i f i s d i r ( ’sci_gateway ’ ) 8
10 11 12
chdir ( ’sci_gateway ’ ) ; exec ( ’buildsci_gateway .sce ’ ) ; chdir ( ’.. ’ ) ;
end 14 i f i s d i r ( ’macros ’ ) 13
15 16 17
chdir ( ’macros ’ ) ; exec ( ’buildmacros.sce ’ ) ; chdir ( ’.. ’ ) ;
end 19 i f i s d i r ( ’help ’ ) 18
20 21 22
chdir ( ’help ’ ) ; exec ( ’buildhelp.sce ’ ) ; chdir ( ’.. ’ ) ;
end 24 c lear mainpathB ; 23
A.33 1
File loader.sce
mode( −1);
mainpathL = g e t a b s o l u t e f i l e p a t h ( ’loader .sce ’ ) ; 3 chdir ( mainpathL ) ; 2
311
4
i f i s d i r ( ’sci_gateway ’ )
5
chdir ( ’sci_gateway ’ ) ; exec ( ’loader .sce ’ ) ;
6
chdir ( ’..’ ) ; 8 end 9 i f i s d i r ( ’macros ’ )
7
10 11 12
chdir ( ’macros ’ ) ; exec ( ’loadmacros.sce ’ ) ; chdir ( ’..’ ) ;
end 14 i f i s d i r ( ’help ’ )
13
15 16 17
chdir ( ’help ’ ) ; exec ( ’loadhelp .sce ’ ) ; chdir ( ’..’ ) ;
end 19 c lear mainpathL ;
18
312
LAMPIRAN B HASIL SIMULASI
Tabel B.1 Mean Simulasi Pertama di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 7.602 7.508 7.528 7.438 7.400 2 7.299 7.183 7.258 7.258 7.239 3 7.356 7.448 7.375 7.442 7.405 4 7.439 7.333 7.316 7.248 7.186 5 6.942 7.028 7.078 7.125 7.099 6 7.305 7.279 7.241 7.152 7.138 7 7.069 7.214 7.376 7.326 7.287 8 7.312 7.241 7.200 7.177 7.171 9 7.551 7.450 7.614 7.459 7.420 10 7.436 7.388 7.289 7.357 7.297 11 7.111 7.171 7.153 7.197 7.204 12 7.540 7.394 7.317 7.284 7.242 13 7.276 7.415 7.526 7.405 7.421 14 7.310 7.352 7.380 7.309 7.337 15 7.007 7.503 7.418 7.399 7.386 16 7.063 7.300 7.221 7.188 7.138 17 7.347 7.241 7.220 7.250 7.212 18 7.344 7.403 7.310 7.297 7.358 19 7.113 7.304 7.331 7.302 7.272 20 7.092 7.180 7.286 7.307 7.270 21 7.449 7.258 7.288 7.231 7.248 22 7.356 7.064 7.023 7.047 7.107 23 7.390 7.433 7.308 7.299 7.267 24 7.378 7.361 7.336 7.380 7.301 25 7.433 7.232 7.263 7.316 7.273 26 7.254 7.321 7.375 7.375 7.326 27 7.381 7.306 7.290 7.210 7.227 28 7.517 7.519 7.422 7.381 7.364 29 7.236 7.272 7.264 7.194 7.287 30 7.144 7.292 7.204 7.313 7.271 31 7.345 7.452 7.295 7.150 7.131 32 7.166 7.074 7.191 7.112 7.153
313
Tabel B.2 Mean Simulasi Pertama di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 7.449 7.340 7.389 7.331 7.302 7.196 7.208 7.308 7.311 7.279 7.414 7.381 7.326 7.407 7.368 7.345 7.271 7.269 7.227 7.167 7.035 7.097 7.134 7.184 7.155 7.268 7.273 7.267 7.186 7.188 6.986 7.197 7.326 7.284 7.250 7.333 7.293 7.242 7.212 7.200 7.577 7.506 7.670 7.507 7.458 7.411 7.388 7.331 7.389 7.332 7.167 7.209 7.146 7.212 7.221 7.636 7.431 7.353 7.306 7.268 7.416 7.490 7.539 7.406 7.427 7.325 7.289 7.362 7.312 7.380 6.983 7.248 7.269 7.268 7.264 7.111 7.273 7.253 7.260 7.208 7.246 7.153 7.139 7.171 7.135 7.357 7.423 7.295 7.298 7.369 7.124 7.340 7.343 7.305 7.261 7.173 7.232 7.362 7.378 7.328 7.557 7.299 7.289 7.247 7.271 7.209 7.054 7.025 7.047 7.105 7.457 7.394 7.283 7.268 7.242 7.553 7.403 7.329 7.394 7.290 7.387 7.179 7.227 7.323 7.262 7.215 7.282 7.328 7.370 7.315 7.126 7.232 7.280 7.203 7.201 7.522 7.468 7.376 7.341 7.314 7.291 7.309 7.309 7.202 7.314 7.076 7.265 7.213 7.301 7.246 7.421 7.501 7.357 7.201 7.149 7.214 7.115 7.175 7.104 7.170
314
Tabel B.3 Maksimum Simulasi Pertama di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 68 68 68 68 68 2 66 66 76 76 76 3 49 71 71 71 71 4 79 79 79 79 79 5 54 54 69 69 69 6 89 89 89 89 89 7 64 64 68 68 68 8 57 57 57 59 79 9 55 55 58 58 61 10 64 64 64 72 72 11 51 63 63 63 66 12 54 56 56 60 60 13 63 63 73 73 73 14 54 64 64 64 64 15 51 80 80 80 80 16 55 61 61 61 61 17 68 68 68 68 68 18 50 53 53 66 66 19 58 58 72 72 72 20 47 65 70 70 70 21 51 52 52 52 53 22 73 73 73 73 73 23 47 69 69 69 69 24 45 53 70 70 70 25 52 52 61 61 61 26 49 61 68 71 71 27 83 83 83 83 83 28 56 75 75 75 75 29 64 64 64 64 68 30 50 59 59 62 63 31 64 64 64 64 64 32 53 63 66 66 66
315
Tabel B.4 Maksimum Simulasi Pertama di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 59 59 59 62 56 73 75 75 62 63 68 69 55 55 65 65 61 61 68 68 55 55 63 63 48 50 56 56 70 70 70 70 66 66 69 69 72 72 72 72 60 60 60 60 63 69 69 69 56 56 56 56 59 59 61 61 57 73 73 73 50 72 72 72 68 68 68 68 67 67 67 68 53 55 55 59 61 61 69 71 68 68 68 68 57 60 62 62 61 65 65 65 61 61 61 61 50 52 61 62 49 54 58 80 65 65 88 88 53 60 60 60 63 63 67 67 50 65 65 65 64 72 72 72 50 67 67 67
5 × 105 62 75 69 65 68 63 56 70 69 72 77 69 57 65 73 72 68 68 59 71 68 62 65 61 62 80 88 60 76 65 72 87
Tabel B.5 Waktu Komputasi Simulasi Pertama Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 20.984 9 21.188 10 21.016 11 21.125 12 21.188 13
Waktu Uji ke 21.031 17 21.453 18 21.172 19 21.000 20 21.000 21
316
Waktu Uji ke 21.093 25 21.016 26 21.063 27 21.031 28 20.984 29
Waktu 21.110 21.188 21.094 21.015 21.109
Uji ke 6 7 8
Waktu Uji ke 21.062 14 21.109 15 21.109 16
Waktu Uji ke 20.968 22 21.062 23 21.157 24
Waktu Uji ke 21.094 30 21.078 31 21.078 32
Waktu 21.110 21.093 21.141
Tabel B.6 Mean Simulasi Kedua di Jalur 1 Berdistribusi Normal Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 1.925 1.927 1.922 1.921 1.920 2 1.924 1.920 1.918 1.916 1.916 3 1.913 1.914 1.912 1.913 1.910 4 1.916 1.907 1.913 1.913 1.915 5 1.921 1.917 1.915 1.918 1.918 6 1.922 1.917 1.917 1.916 1.918 7 1.920 1.914 1.911 1.913 1.911 8 1.912 1.913 1.913 1.912 1.911 9 1.914 1.915 1.921 1.917 1.916 10 1.925 1.920 1.918 1.916 1.914 11 1.927 1.920 1.924 1.921 1.920 12 1.921 1.917 1.916 1.918 1.915 13 1.916 1.914 1.914 1.916 1.917 14 1.932 1.919 1.918 1.918 1.917 15 1.910 1.909 1.914 1.915 1.918 16 1.906 1.909 1.914 1.914 1.915 17 1.917 1.930 1.925 1.925 1.924 18 1.905 1.912 1.912 1.911 1.909 19 1.925 1.919 1.917 1.917 1.916 20 1.918 1.913 1.910 1.910 1.914 21 1.917 1.925 1.926 1.924 1.921 22 1.902 1.904 1.913 1.914 1.912 23 1.916 1.915 1.919 1.916 1.918 24 1.922 1.905 1.902 1.905 1.907 25 1.925 1.927 1.919 1.917 1.914 26 1.923 1.920 1.920 1.916 1.916 27 1.916 1.913 1.913 1.914 1.914 28 1.918 1.922 1.920 1.915 1.915 29 1.910 1.915 1.914 1.915 1.914 30 1.921 1.925 1.922 1.917 1.919 31 1.898 1.909 1.915 1.914 1.915 32 1.927 1.920 1.920 1.922 1.920
317
Tabel B.7 Mean Simulasi Kedua di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1.918 1.926 1.923 1.923 1.924 1.909 1.917 1.916 1.915 1.917 1.909 1.913 1.919 1.921 1.918 1.910 1.910 1.915 1.914 1.915 1.926 1.921 1.916 1.918 1.919 1.903 1.906 1.902 1.904 1.905 1.917 1.908 1.907 1.909 1.908 1.920 1.921 1.922 1.920 1.919 1.906 1.915 1.921 1.916 1.917 1.916 1.915 1.916 1.915 1.914 1.927 1.929 1.930 1.925 1.923 1.919 1.920 1.917 1.914 1.912 1.910 1.909 1.908 1.910 1.910 1.915 1.920 1.921 1.919 1.917 1.914 1.919 1.920 1.917 1.917 1.917 1.912 1.913 1.913 1.918 1.913 1.920 1.921 1.920 1.917 1.906 1.910 1.915 1.918 1.914 1.906 1.909 1.912 1.913 1.912 1.915 1.913 1.916 1.915 1.918 1.922 1.918 1.919 1.920 1.917 1.914 1.916 1.917 1.915 1.915 1.917 1.916 1.917 1.919 1.922 1.924 1.918 1.916 1.918 1.916 1.916 1.923 1.917 1.917 1.915 1.926 1.920 1.917 1.920 1.916 1.907 1.904 1.907 1.915 1.914 1.911 1.913 1.911 1.909 1.910 1.910 1.913 1.912 1.910 1.908 1.925 1.919 1.917 1.917 1.916 1.906 1.912 1.914 1.910 1.912 1.911 1.916 1.917 1.918 1.917
318
Tabel B.8 Maksimum Simulasi Kedua di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 16 16 16 16 17 2 17 17 17 17 17 3 16 16 16 16 18 4 16 16 16 16 27 5 15 16 16 16 16 6 16 16 16 18 18 7 17 17 17 17 17 8 15 18 18 18 18 9 15 16 16 17 17 10 15 16 16 16 16 11 20 20 20 20 20 12 15 18 18 18 18 13 20 20 20 20 20 14 15 15 15 15 18 15 16 16 18 18 18 16 15 17 17 17 17 17 23 23 23 23 23 18 15 16 16 16 16 19 15 17 19 19 19 20 18 18 18 18 18 21 17 17 17 17 17 22 15 17 17 17 17 23 15 16 17 17 17 24 15 17 17 17 17 25 15 16 17 17 17 26 15 17 18 18 18 27 16 16 17 17 20 28 15 15 15 15 16 29 17 17 17 19 19 30 16 16 16 16 16 31 15 16 17 17 17 32 16 17 17 17 17
319
Tabel B.9 Maksimum Simulasi Kedua di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 25 25 25 25 20 20 20 20 19 19 19 19 22 22 22 22 19 19 19 19 23 23 23 23 23 23 23 23 27 27 27 27 22 22 22 22 26 26 26 26 25 25 25 25 22 22 22 22 26 26 26 26 24 24 24 24 24 24 24 24 20 20 20 20 26 26 26 26 20 20 20 20 21 21 21 21 23 23 23 23 24 24 24 24 22 22 22 22 20 20 20 20 22 22 22 22 22 22 22 22 25 25 25 25 17 17 17 17 19 19 19 19 23 23 23 23 22 22 22 22 18 18 18 18 18 18 18 18
5 × 105 25 20 19 22 19 23 23 27 22 26 25 22 26 24 24 20 26 20 21 23 24 22 20 22 22 25 17 19 23 22 18 18
Tabel B.10 Waktu Komputasi Simulasi Kedua Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 27.875 9 27.672 10 27.734 11 27.735 12 27.765 13
Waktu Uji ke 27.844 17 27.782 18 27.750 19 27.906 20 27.812 21
320
Waktu Uji ke 28.250 25 29.094 26 28.218 27 27.906 28 27.844 29
Waktu 27.828 27.813 27.781 27.781 27.781
Uji ke 6 7 8
Waktu Uji ke 28.125 14 27.782 15 27.797 16
Waktu Uji ke 27.765 22 27.797 23 27.938 24
Waktu Uji ke 27.828 30 27.781 31 27.765 32
Waktu 27.781 27.812 27.875
Tabel B.11 Mean Simulasi Ketiga di Jalur 1 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 × 105 30, 412.738 30, 025.123 30, 174.265 29, 721.530 29, 948.606 30, 232.077 29, 972.069 29, 682.133 30, 038.992 30, 155.330 29, 891.092 29, 806.890 30, 222.474 30, 607.572 29, 642.523 30, 332.198 29, 607.385 30, 073.262 30, 323.069 30, 103.339 30, 472.002 29, 954.730 29, 943.712 29, 914.927 30, 151.267 29, 927.748 29, 296.870 30, 174.199 29, 831.666 29, 959.968 29, 940.842 30, 184.901
2 × 105 60, 417.391 60, 071.511 59, 997.742 59, 644.167 60, 021.227 60, 388.870 60, 029.103 59, 532.673 60, 084.442 60, 170.021 60, 121.494 59, 709.857 60, 386.115 60, 897.489 59, 548.243 60, 212.853 59, 813.948 59, 661.791 60, 335.421 59, 720.419 60, 656.176 60, 058.807 59, 972.162 59, 935.722 59, 993.240 60, 122.398 59, 311.765 60, 040.317 59, 956.948 60, 050.893 59, 753.374 60, 238.271
Lama Simulasi 3 × 105 4 × 105 90, 318.827 120, 271.113 90, 076.974 120, 096.944 89, 803.194 119, 766.557 89, 592.258 119, 666.242 89, 910.215 119, 824.219 90, 488.346 120, 566.850 90, 062.179 120, 010.974 89, 415.384 119, 347.591 90, 072.892 119, 965.775 90, 076.718 119, 978.218 90, 193.974 120, 256.039 89, 612.569 119, 498.450 90, 172.181 119, 965.872 90, 947.428 121, 139.233 89, 428.708 119, 336.742 90, 073.366 120, 027.165 90, 009.704 120, 124.716 89, 409.397 119, 222.757 90, 072.377 119, 863.867 89, 489.465 119, 258.717 90, 832.290 120, 921.102 90, 029.130 120, 024.150 90, 059.124 120, 140.975 89, 660.918 119, 479.390 89, 959.421 119, 953.623 90, 297.849 120, 458.738 89, 473.385 119, 502.446 89, 783.517 119, 553.703 90, 109.815 120, 180.686 90, 179.191 120, 292.272 89, 698.156 119, 732.479 90, 354.502 120, 347.332
321
5 × 105 150, 226.863 150, 060.458 149, 797.023 149, 753.777 149, 882.284 150, 593.172 149, 982.072 149, 361.262 149, 817.516 149, 841.630 150, 221.703 149, 356.750 149, 869.538 151, 356.963 149, 259.248 150, 006.159 150, 198.381 149, 083.828 149, 683.702 149, 016.510 150, 940.247 150, 015.058 150, 158.722 149, 449.146 150, 001.250 150, 573.077 149, 363.124 149, 371.938 150, 204.911 150, 332.378 149, 776.090 150, 408.033
Tabel B.12 Mean Simulasi Ketiga di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 30, 052.041 30, 328.268 29, 873.136 29, 749.371 30, 346.473 29, 806.940 29, 743.082 29, 972.551 30, 153.262 30, 094.361 29, 768.372 29, 935.238 30, 129.237 29, 771.290 30, 017.944 29, 947.282 30, 393.189 30, 604.571 29, 914.030 29, 796.828 29, 924.946 30, 348.357 29, 990.934 29, 796.915 30, 021.964 30, 402.491 29, 753.432 29, 905.272 29, 872.091 30, 094.017 30, 022.517 30, 124.486
5
2 × 10 60, 056.179 60, 363.741 59, 944.485 59, 584.859 60, 167.776 59, 904.933 59, 780.894 60, 011.076 60, 209.424 60, 043.457 59, 694.092 59, 868.328 60, 083.776 59, 484.569 59, 953.128 60, 052.222 60, 406.912 60, 772.943 59, 967.572 60, 054.895 59, 818.332 60, 266.991 59, 913.771 59, 635.022 60, 104.937 60, 685.967 59, 541.698 60, 091.171 59, 875.377 60, 135.131 59, 854.025 60, 113.336
Lama Simulasi 3 × 105 4 × 105 90, 004.329 119, 858.607 90, 298.384 120, 205.774 90, 170.178 120, 454.131 89, 227.331 119, 048.811 89, 954.869 119, 794.301 90, 335.993 120, 580.608 89, 973.384 120, 190.467 90, 161.856 120, 346.111 90, 282.519 120, 249.449 89, 935.923 119, 777.694 89, 837.931 119, 979.611 89, 761.819 119, 665.174 90, 294.811 120, 438.632 89, 475.155 119, 454.427 89, 947.425 120, 060.174 90, 197.877 120, 125.068 90, 322.508 120, 229.613 90, 975.945 121, 065.122 89, 969.435 119, 916.930 90, 174.542 120, 281.555 89, 704.578 119, 595.989 90, 300.546 120, 385.764 89, 830.511 119, 760.583 89, 514.211 119, 480.713 90, 192.054 120, 310.703 90, 672.796 120, 676.225 89, 479.150 119, 590.718 90, 216.459 120, 265.558 89, 942.193 119, 995.923 90, 128.812 120, 018.067 89, 641.147 119, 399.458 90, 137.670 120, 093.459
322
5 × 105 149, 902.667 150, 207.192 150, 759.246 148, 934.082 149, 650.929 150, 742.236 150, 348.191 150, 530.043 150, 260.525 149, 631.780 150, 109.196 149, 598.538 150, 447.045 149, 518.422 150, 221.606 150, 052.259 150, 075.350 151, 152.433 149, 802.421 150, 375.237 149, 437.090 150, 457.883 149, 752.398 149, 469.337 150, 306.461 150, 735.376 149, 731.616 150, 310.197 149, 988.903 149, 954.174 149, 379.248 150, 011.716
Tabel B.13 Mean Simulasi Ketiga di Jalur 3 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 29, 942.880 29, 900.308 30, 036.074 30, 031.513 30, 267.844 29, 816.320 29, 934.442 30, 271.722 29, 913.741 30, 782.896 30, 173.277 30, 070.918 29, 802.096 30, 182.145 30, 296.716 29, 581.115 30, 015.415 30, 241.914 30, 076.103 29, 923.636 29, 610.427 29, 894.282 29, 630.159 29, 943.468 30, 059.341 30, 187.996 30, 002.332 29, 607.823 29, 984.073 29, 937.099 30, 050.718 29, 880.314
5
2 × 10 60, 000.494 60, 035.781 60, 251.277 59, 999.004 60, 366.966 59, 686.520 60, 220.133 60, 059.075 59, 845.832 61, 083.316 60, 584.660 59, 981.579 59, 957.345 60, 396.386 60, 496.084 59, 490.631 59, 851.351 60, 351.770 60, 179.216 59, 759.470 59, 584.836 59, 945.037 59, 494.320 59, 777.556 59, 971.401 60, 139.219 60, 240.757 59, 348.542 59, 930.179 59, 650.259 60, 019.538 59, 870.081
Lama Simulasi 3 × 105 4 × 105 90, 133.147 120, 143.895 90, 070.925 120, 067.929 90, 466.119 120, 622.985 90, 099.944 120, 099.673 90, 225.973 120, 060.903 89, 741.308 119, 635.687 90, 400.582 120, 351.735 89, 842.762 119, 649.664 89, 919.550 119, 996.271 91, 156.692 121, 212.615 90, 803.873 120, 884.676 89, 946.668 119, 958.771 89, 956.537 120, 064.553 90, 576.719 120, 646.797 90, 639.252 120, 695.960 89, 419.550 119, 357.772 89, 859.672 119, 893.042 90, 322.551 120, 369.034 90, 256.031 120, 131.422 89, 555.227 119, 417.320 89, 514.488 119, 366.739 89, 960.295 119, 927.335 89, 430.036 119, 500.172 89, 688.170 119, 593.098 89, 905.064 119, 921.863 89, 957.457 119, 886.497 90, 280.910 120, 401.769 89, 252.871 119, 134.906 89, 652.080 119, 425.954 89, 514.062 119, 417.932 89, 922.878 119, 991.723 89, 897.299 119, 998.405
323
5 × 105 149, 995.775 150, 051.209 150, 747.050 150, 113.463 149, 892.577 149, 637.827 150, 202.998 149, 344.452 150, 086.795 151, 195.206 150, 987.471 149, 955.988 150, 222.993 150, 597.504 150, 700.672 149, 276.697 150, 012.617 150, 411.538 150, 065.253 149, 393.866 149, 333.234 149, 907.596 149, 548.800 149, 542.677 150, 035.933 149, 860.979 150, 571.920 149, 088.902 149, 235.157 149, 455.854 150, 032.840 150, 085.304
Tabel B.14 Maksimum Simulasi Ketiga di Jalur 1 Berdistribusi Normal Uji ke 1 × 105 1 60, 637 2 60, 039 3 60, 287 4 59, 766 5 59, 939 6 60, 384 7 60, 045 8 59, 372 9 60, 213 10 60, 138 11 60, 075 12 59, 451 13 60, 565 14 61, 249 15 59, 432 16 60, 517 17 59, 870 18 59, 690 19 60, 471 20 59, 841 21 60, 341 22 60, 032 23 59, 992 24 60, 207 25 60, 196 26 60, 038 27 59, 155 28 60, 207 29 59, 743 30 60, 120 31 59, 971 32 59, 918
Lama Simulasi 2 × 10 3 × 105 4 × 105 120, 197 180, 112 239, 986 120, 126 180, 218 239, 886 119, 572 179, 473 239, 784 119, 289 179, 720 240, 030 119, 993 179, 473 239, 676 120, 504 180, 745 240, 803 119, 896 179, 590 239, 956 119, 427 179, 131 239, 288 120, 086 179, 644 239, 460 120, 079 179, 884 239, 592 120, 399 180, 508 240, 016 119, 721 179, 127 239, 097 120, 366 179, 371 239, 299 121, 185 181, 057 242, 279 119, 506 178, 870 239, 133 119, 952 179, 944 239, 653 120, 419 180, 339 240, 576 118, 955 178, 857 238, 525 119, 951 179, 323 239, 053 119, 139 178, 693 238, 316 121, 040 181, 217 240, 931 119, 912 180, 133 239, 765 120, 072 180, 371 240, 096 119, 479 178, 662 239, 165 119, 859 179, 778 240, 296 120, 827 180, 883 240, 915 119, 851 179, 864 239, 001 119, 826 179, 078 238, 849 120, 423 180, 291 240, 317 120, 339 180, 627 240, 595 119, 581 179, 681 240, 071 120, 725 180, 542 240, 523 5
324
5 × 105 300, 299 299, 850 300, 085 299, 926 300, 072 300, 405 299, 838 299, 361 299, 135 298, 836 300, 030 298, 590 299, 623 302, 138 298, 516 299, 995 300, 056 298, 625 298, 824 298, 122 301, 073 300, 111 299, 909 299, 530 300, 040 300, 963 298, 503 298, 534 300, 285 300, 842 300, 163 300, 441
Tabel B.15 Maksimum Simulasi Ketiga di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 59, 936 60, 467 59, 888 59, 687 60, 579 59, 591 59, 743 59, 996 60, 272 59, 948 59, 388 59, 594 60, 243 59, 451 59, 873 59, 854 60, 533 60, 721 59, 987 59, 989 59, 833 60, 266 60, 339 59, 722 60, 353 61, 022 59, 520 59, 938 59, 941 60, 231 60, 015 60, 120
Lama Simulasi 2 × 10 3 × 105 4 × 105 120, 153 179, 390 239, 494 120, 392 180, 099 240, 020 120, 281 181, 171 241, 383 119, 066 178, 279 238, 779 119, 610 179, 671 238, 862 120, 669 181, 843 241, 308 119, 881 180, 537 240, 652 120, 185 180, 914 240, 921 120, 205 180, 285 240, 111 119, 855 179, 335 239, 111 119, 893 180, 273 240, 553 119, 815 179, 492 239, 591 120, 457 180, 778 240, 636 119, 282 179, 116 239, 598 119, 811 180, 026 240, 641 120, 474 180, 174 239, 726 120, 528 179, 835 239, 818 121, 273 181, 429 241, 379 119, 996 180, 015 239, 413 120, 467 180, 531 240, 649 119, 693 179, 607 238, 794 120, 290 180, 525 240, 595 119, 547 179, 754 239, 531 119, 383 179, 326 239, 343 120, 192 180, 756 240, 409 121, 054 180, 267 240, 955 119, 035 179, 522 240, 054 120, 502 180, 398 240, 475 119, 984 180, 150 239, 898 120, 352 179, 882 239, 660 119, 445 178, 993 238, 791 120, 360 179, 927 239, 667 5
325
5 × 105 300, 449 300, 268 302, 312 298, 823 299, 143 301, 423 301, 397 301, 339 300, 349 299, 171 300, 329 298, 975 300, 651 299, 834 300, 843 299, 558 299, 191 301, 559 299, 566 300, 778 298, 945 301, 150 299, 891 299, 300 300, 176 300, 952 300, 308 300, 479 299, 939 299, 916 299, 437 299, 647
Tabel B.16 Maksimum Simulasi Ketiga di Jalur 3 Berdistribusi Normal Uji ke 1 × 105 1 60, 159 2 59, 938 3 60, 129 4 60, 019 5 60, 396 6 59, 493 7 60, 135 8 60, 068 9 59, 917 10 61, 373 11 60, 523 12 60, 079 13 59, 854 14 60, 377 15 60, 264 16 59, 480 17 59, 665 18 60, 401 19 60, 215 20 59, 826 21 59, 482 22 59, 877 23 59, 436 24 59, 944 25 59, 880 26 60, 318 27 60, 003 28 59, 103 29 59, 941 30 59, 641 31 60, 212 32 59, 900
Lama Simulasi 2 × 10 3 × 105 4 × 105 120, 237 180, 411 239, 731 120, 220 180, 067 239, 741 120, 763 180, 981 241, 211 119, 989 180, 103 240, 137 120, 458 179, 506 239, 539 119, 608 179, 759 239, 423 120, 907 180, 720 239, 378 119, 445 179, 699 238, 271 120, 048 179, 935 240, 177 121, 339 181, 291 241, 404 121, 234 181, 037 241, 260 119, 866 180, 170 239, 935 119, 962 180, 211 240, 634 120, 780 181, 020 240, 671 120, 961 181, 025 240, 636 119, 179 179, 300 239, 123 119, 629 180, 015 240, 193 120, 363 180, 025 240, 754 120, 234 179, 937 239, 760 119, 287 179, 113 239, 051 119, 625 178, 915 238, 977 120, 193 179, 877 239, 723 119, 388 179, 417 239, 841 119, 564 179, 514 239, 158 119, 695 179, 723 240, 480 119, 893 179, 334 239, 857 120, 792 180, 235 241, 166 119, 079 179, 138 238, 785 119, 632 178, 823 238, 719 118, 945 179, 236 239, 333 119, 822 179, 853 240, 480 119, 896 179, 968 240, 693 5
5 × 105 299, 355 300, 520 301, 510 300, 375 298, 956 299, 984 299, 587 297, 919 300, 905 300, 781 301, 517 299, 937 301, 040 299, 980 300, 968 298, 723 300, 959 300, 516 299, 762 299, 354 299, 191 299, 919 299, 623 299, 206 300, 697 299, 411 301, 309 299, 327 298, 301 299, 643 300, 107 300, 666
Tabel B.17 Waktu Komputasi Simulasi Ketiga Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 16.954 9 16.922 10 16.891 11 16.969 12 16.922 13
Waktu Uji ke 16.937 17 16.922 18 16.938 19 16.953 20 16.937 21
326
Waktu Uji ke 16.906 25 16.922 26 16.937 27 16.953 28 16.937 29
Waktu 16.953 16.922 16.875 16.938 16.938
Uji ke 6 7 8
Waktu Uji ke 16.938 14 16.985 15 16.969 16
Waktu Uji ke 16.937 22 16.937 23 16.938 24
Waktu Uji ke 17.000 30 16.985 31 16.953 32
Waktu 16.953 16.891 16.984
Tabel B.18 Mean Simulasi Keempat di Jalur 1 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 13.588 15.642 14.258 13.770 14.756 14.868 13.953 14.424 17.523 16.756 15.139 14.258 14.185 38.017 36.252 34.552 12.691 18.440 16.261 15.414 13.489 12.752 12.571 13.214 15.217 14.666 17.890 34.076 15.380 13.484 13.562 13.563 12.190 12.518 15.395 14.568 12.605 12.367 12.759 44.558 15.620 59.929 50.565 41.645 12.824 13.938 13.179 13.078 14.179 22.322 20.449 20.716 12.473 15.472 15.669 17.047 12.157 18.668 18.793 16.916 14.056 23.752 20.979 21.627 12.583 12.887 12.675 12.677 16.614 20.766 18.455 17.226 12.554 12.088 12.438 15.819 273.747 303.566 212.116 165.246 12.225 12.992 13.544 13.577 14.229 13.887 17.412 21.335 697.406 558.006 375.999 285.516 15.658 14.736 14.333 15.390 13.123 13.067 14.389 13.807 14.179 13.447 14.673 14.852 14.534 13.784 15.538 16.142 21.506 18.635 16.546 16.431 142.160 77.315 55.793 72.418 15.164 69.829 67.827 121.535 12.915 19.194 16.572 17.893 12.703 12.979 12.754 12.702
327
5 × 105 16.730 15.565 13.854 109.912 14.956 13.186 30.330 13.433 14.418 38.312 36.313 13.148 19.352 16.097 16.590 19.973 12.801 20.942 15.461 136.806 13.216 19.805 230.817 40.968 13.423 14.722 15.925 16.426 61.946 189.491 16.754 14.430
Tabel B.19 Mean Simulasi Keempat di Jalur 2 Berdistribusi Normal Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 13.075 15.250 13.954 13.557 14.627 2 14.526 15.223 14.325 14.490 15.120 3 20.926 18.760 16.378 15.156 14.622 4 13.898 21.772 22.947 25.583 56.256 5 12.443 34.609 26.980 23.424 21.382 6 12.812 12.304 12.246 13.820 13.553 7 14.991 14.384 18.783 25.005 23.675 8 14.189 12.913 13.047 12.977 12.937 9 12.265 12.587 15.698 14.817 14.431 10 12.361 12.094 12.472 32.652 28.896 11 16.303 52.546 42.033 35.715 31.090 12 12.987 14.161 13.321 13.197 13.431 13 13.772 17.950 16.755 16.227 15.774 14 12.343 14.382 14.351 15.845 15.094 15 12.301 31.695 28.258 24.027 22.043 16 13.718 22.433 20.004 19.581 18.318 17 13.376 13.846 13.306 13.089 13.048 18 19.501 39.851 31.126 26.561 36.029 19 12.303 11.984 12.348 15.464 15.068 20 207.655 395.000 275.078 211.749 174.923 21 12.329 13.142 13.637 14.017 13.582 22 14.912 14.247 20.518 39.195 35.237 23 277.591 305.591 207.649 159.598 130.109 24 13.951 13.376 13.253 13.670 39.600 25 14.079 14.344 14.910 14.175 13.706 26 13.691 12.954 14.046 14.084 14.129 27 15.308 14.425 15.260 15.655 15.419 28 22.303 18.539 16.644 16.988 16.847 29 209.558 110.910 78.068 87.459 74.058 30 17.867 105.843 138.148 180.072 322.361 31 12.925 15.531 14.117 17.011 16.039 32 13.139 13.432 13.026 12.964 16.639
328
Tabel B.20 Mean Simulasi Keempat di Jalur 3 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 14.814 15.694 30.152 13.428 12.672 13.820 13.715 15.519 12.160 12.241 15.206 13.050 14.393 12.158 12.135 14.468 12.999 17.414 12.224 180.146 12.508 16.756 141.664 14.461 13.401 12.947 14.243 17.611 98.575 16.069 12.848 12.912
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 15.527 14.135 13.739 15.805 15.724 14.408 14.573 17.058 23.419 19.597 17.601 16.517 66.741 62.738 58.853 88.676 20.517 17.631 16.444 15.801 12.833 12.693 13.180 13.070 13.634 16.475 24.266 22.873 13.534 13.577 13.381 13.242 12.417 15.384 14.525 14.318 12.024 12.698 72.592 60.741 63.841 51.121 43.273 37.390 14.327 13.462 13.363 13.293 17.937 16.600 16.817 16.300 13.690 13.983 15.507 14.806 25.996 24.604 21.328 20.126 27.400 23.058 22.739 20.812 13.579 13.149 13.394 13.311 21.013 19.349 17.825 25.677 11.862 12.478 14.980 14.734 227.208 162.330 126.653 104.753 12.995 14.403 14.328 13.834 14.925 19.476 27.683 25.261 155.904 107.831 84.729 70.185 13.764 13.453 14.158 21.211 13.744 15.043 14.269 13.763 12.565 13.513 13.928 14.137 13.886 16.435 16.182 16.271 16.200 14.702 15.863 16.290 55.751 41.554 48.380 42.542 77.131 100.309 134.635 166.575 15.105 13.945 16.824 15.851 13.668 13.928 13.738 16.240
329
Tabel B.21 Maksimum Simulasi Keempat di Jalur 1 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 121 113 135 147 96 108 132 162 99 109 127 119 135 81 84 108 92 120 108 615 73 105 1, 091 135 115 160 122 248 405 121 90 99
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 188 188 188 266 113 113 146 184 140 140 140 140 422 422 422 898 182 182 182 182 108 108 157 157 136 213 496 496 162 162 162 162 99 174 174 174 109 109 464 464 410 410 410 410 162 162 162 162 225 225 251 251 147 169 178 178 175 175 175 175 207 207 211 211 105 105 109 109 197 197 197 233 108 108 228 228 684 684 684 684 119 149 149 149 105 168 203 203 1, 091 1, 091 1, 091 1, 091 135 144 224 543 115 150 150 150 160 160 181 181 135 193 193 193 248 248 248 248 405 405 405 405 378 378 725 725 237 237 237 237 99 102 102 160
330
Tabel B.22 Maksimum Simulasi Keempat di Jalur 2 Berdistribusi Normal Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 114 144 144 144 162 2 115 156 156 156 197 3 230 230 230 230 230 4 127 176 272 272 516 5 79 407 407 407 407 6 88 88 88 228 228 7 128 128 235 264 264 8 139 139 156 156 156 9 97 124 197 197 197 10 97 97 97 343 343 11 148 296 296 296 296 12 109 135 135 135 167 13 109 148 148 148 152 14 82 134 134 159 159 15 103 332 332 332 332 16 153 177 177 177 177 17 134 141 141 141 141 18 202 483 483 483 483 19 85 90 90 199 199 20 548 860 860 860 860 21 81 140 140 165 165 22 118 118 299 471 471 23 760 760 760 760 760 24 104 104 111 135 482 25 142 142 143 143 143 26 143 143 148 148 168 27 179 179 179 179 179 28 240 240 240 240 240 29 561 561 561 561 561 30 172 567 567 756 1, 398 31 87 172 172 215 215 32 122 122 122 122 200
331
Tabel B.23 Maksimum Simulasi Keempat di Jalur 3 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 137 128 271 106 103 112 93 148 86 109 128 108 139 78 83 161 120 142 93 448 113 144 340 138 137 106 115 180 337 156 91 129
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 155 155 155 205 128 128 151 290 271 271 271 271 641 641 641 641 230 230 230 230 112 112 123 123 100 188 314 314 148 148 148 148 93 179 179 179 109 145 565 565 427 427 427 427 150 150 150 150 145 145 162 162 120 120 175 175 287 287 287 287 266 266 266 266 148 148 179 179 227 227 227 323 93 139 190 190 495 495 495 495 115 188 188 188 144 249 293 293 437 437 437 437 138 138 174 254 137 172 172 172 106 130 164 169 117 250 250 250 180 180 184 184 337 337 337 337 671 671 671 671 127 127 197 197 141 205 205 205
Tabel B.24 Waktu Komputasi Simulasi Keempat Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 20.266 9 20.125 10 20.297 11 19.203 12 20.219 13
Waktu Uji ke 20.203 17 19.797 18 19.704 19 20.281 20 20.141 21
332
Waktu Uji ke 20.297 25 19.859 26 20.141 27 18.907 28 20.234 29
Waktu 20.312 20.344 21.157 21.062 19.359
Uji ke 6 7 8
Waktu Uji ke 20.219 14 19.843 15 20.360 16
Waktu Uji ke 20.125 22 20.157 23 20.672 24
Waktu Uji ke 19.922 30 19.047 31 19.891 32
Waktu 18.250 20.297 20.250
Tabel B.25 Mean Simulasi Kelima di Jalur 1 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 207.573 97.331 162.569 194.845 636.172 166.490 66.635 103.105 120.538 128.293 129.420 125.129 243.073 115.546 244.252 125.988 282.273 104.993 216.980 141.622 130.095 288.413 262.585 288.364 91.952 87.169 269.637 126.821 130.315 72.323 842.684 79.448
Lama Simulasi 2 × 10 3 × 105 4 × 105 190.503 175.972 298.690 109.413 100.551 117.161 200.594 275.445 278.011 206.511 335.077 482.581 919.374 1, 002.242 937.839 119.149 177.780 204.453 174.254 205.481 196.428 250.982 373.748 531.865 208.642 198.269 197.387 234.693 185.060 175.361 97.528 137.408 310.443 506.801 675.202 809.415 218.606 193.539 275.791 157.464 163.200 192.552 369.347 337.181 402.459 185.776 186.846 207.205 366.711 287.364 264.562 131.248 144.507 146.032 326.817 265.152 236.811 215.926 294.050 273.366 130.351 213.854 210.812 229.406 175.882 154.044 288.970 272.390 361.057 282.686 303.577 650.935 229.818 204.624 214.591 99.708 109.400 166.180 659.191 711.574 684.604 260.726 263.381 269.179 342.346 380.856 419.954 79.683 122.819 217.017 838.136 683.468 540.862 177.657 200.652 195.075 5
333
5 × 105 391.456 163.714 354.437 576.343 815.587 242.663 205.679 520.882 308.109 171.362 517.821 882.180 260.616 229.084 435.065 202.716 273.859 134.784 230.406 262.941 215.529 177.381 351.953 951.259 232.386 217.776 642.697 242.820 389.137 319.780 468.079 309.364
Tabel B.26 Mean Simulasi Kelima di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 × 105 635.444 132.938 109.559 381.513 476.975 89.449 91.384 114.310 101.807 117.536 93.137 396.719 162.219 179.247 403.896 130.179 140.150 129.637 144.956 82.608 129.560 133.605 137.957 246.034 120.908 101.031 259.449 220.351 278.200 73.710 110.550 82.780
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 878.696 1, 032.857 1, 093.399 1, 069.428 121.798 119.483 144.077 188.157 218.472 241.237 214.901 216.510 621.399 952.757 1, 106.769 1, 268.263 581.292 451.881 436.101 438.240 136.067 276.508 354.814 371.224 157.249 172.681 268.148 273.299 482.484 529.119 429.367 379.090 100.456 125.166 251.525 321.673 170.379 138.420 135.550 132.284 94.438 165.206 265.908 285.749 735.947 672.240 607.972 576.477 150.353 162.036 158.700 191.985 243.229 206.985 238.938 496.126 860.755 1, 137.982 1, 274.416 1, 527.096 135.563 170.224 176.287 277.354 264.890 423.033 409.420 451.366 128.899 198.133 242.018 217.037 197.786 163.077 157.680 218.182 215.313 383.802 365.544 355.706 143.279 169.819 160.389 161.658 109.868 103.946 111.468 178.789 140.250 183.397 288.883 349.185 272.765 331.063 465.503 639.459 128.392 135.361 141.242 146.881 104.410 153.807 184.168 221.080 460.074 617.370 785.633 891.403 432.621 636.971 728.063 651.499 191.597 237.472 342.829 469.751 106.999 179.353 271.135 316.215 153.516 146.349 139.967 240.299 215.558 231.996 209.982 252.451
334
Tabel B.27 Maksimum Simulasi Kelima di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 404 429 429 1, 096 1, 096 2 301 358 358 455 742 3 511 591 741 741 1, 239 4 489 489 891 1, 151 1, 428 5 1, 012 1, 636 1, 636 1, 636 1, 636 6 403 403 519 519 653 7 246 672 672 672 672 8 302 718 921 1, 260 1, 260 9 515 833 833 833 1, 207 10 434 600 600 600 600 11 488 488 723 1, 085 2, 205 12 491 1, 250 1, 296 1, 534 1, 669 13 594 594 594 835 835 14 418 515 515 564 619 15 539 809 809 880 900 16 470 613 621 761 761 17 578 720 720 720 785 18 421 507 507 507 507 19 616 722 722 722 722 20 382 895 895 895 895 21 341 341 895 895 895 22 594 594 594 594 594 23 602 631 648 1, 141 1, 141 24 506 567 965 2, 298 2, 574 25 360 580 580 580 608 26 247 396 396 602 747 27 764 1, 391 1, 391 1, 391 1, 391 28 355 664 664 664 664 29 357 856 856 937 937 30 299 306 565 730 974 31 1, 373 1, 373 1, 373 1, 373 1, 373 32 285 644 644 753 950
335
Tabel B.28 Maksimum Simulasi Kelima di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1, 020 1, 755 1, 901 1, 901 1, 901 336 385 385 592 997 401 697 697 697 776 944 1, 152 2, 021 2, 021 2, 260 993 1, 073 1, 073 1, 073 1, 073 254 411 896 966 966 323 605 605 812 812 356 1, 241 1, 241 1, 241 1, 241 334 334 549 973 973 324 486 486 486 486 428 428 824 961 961 1, 117 1, 496 1, 496 1, 496 1, 496 655 655 655 655 703 599 721 721 815 2, 001 770 1, 622 2, 030 2, 049 3, 273 354 408 578 613 1, 211 385 736 1, 088 1, 088 1, 088 475 475 872 872 872 402 554 554 554 1, 011 248 918 979 979 979 452 481 525 525 525 350 350 354 440 737 340 446 625 779 1, 005 524 549 1, 121 1, 302 1, 618 433 433 456 465 479 268 361 571 571 648 527 1, 015 1, 330 1, 570 1, 645 587 1, 336 1, 559 1, 559 1, 559 530 530 530 931 1, 321 341 451 672 818 834 375 477 477 477 900 333 699 699 699 824
Tabel B.29 Waktu Komputasi Simulasi Kelima Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 16.797 9 16.813 10 16.813 11 16.735 12 16.765 13
Waktu Uji ke 16.875 17 16.813 18 16.828 19 16.781 20 16.766 21
336
Waktu Uji ke 16.875 25 16.875 26 16.922 27 16.797 28 16.765 29
Waktu 16.813 16.812 16.734 16.750 16.781
Uji ke 6 7 8
Waktu Uji ke 16.750 14 16.812 15 16.829 16
Waktu Uji ke 16.766 22 16.781 23 16.860 24
Waktu Uji ke 16.843 30 16.796 31 16.750 32
Waktu 16.844 16.797 16.797
Tabel B.30 Mean Simulasi Keenam di Jalur 1 Berdistribusi Normal Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 16.299 16.181 16.169 16.151 16.146 2 16.401 16.334 16.279 16.251 16.163 3 15.739 15.791 15.683 15.745 15.886 4 15.891 16.042 15.953 16.024 15.934 5 16.308 16.495 16.357 16.304 16.278 6 16.232 16.310 16.197 16.272 16.208 7 16.076 15.772 15.774 15.862 15.875 8 15.984 15.948 15.874 15.910 15.840 9 16.012 16.062 16.017 16.031 16.022 10 15.862 15.842 15.838 15.858 15.843 11 16.149 15.976 15.885 15.909 15.962 12 15.749 16.007 15.881 15.952 15.972 13 15.778 15.893 16.006 16.124 16.149 14 16.038 16.037 16.111 16.107 16.127 15 15.682 15.888 15.909 15.810 15.846 16 16.135 15.907 15.805 15.856 15.932 17 15.859 15.803 16.065 16.089 16.125 18 15.790 15.954 16.081 16.052 15.998 19 15.976 15.870 15.843 15.912 15.839 20 15.768 15.816 15.933 15.934 15.936 21 16.207 16.105 16.155 16.067 16.166 22 15.786 15.824 15.857 15.943 16.080 23 16.071 16.195 16.123 16.024 16.080 24 15.558 15.750 15.911 15.860 15.896 25 16.073 16.130 16.129 16.088 16.043 26 15.524 15.712 15.673 15.770 15.745 27 15.482 15.764 15.665 15.719 15.770 28 16.179 16.168 16.129 16.194 16.081 29 15.922 16.000 16.302 16.178 16.123 30 15.719 15.791 15.808 15.811 15.948 31 15.727 15.899 16.058 15.998 16.035 32 15.805 16.009 15.911 15.896 15.971
337
Tabel B.31 Mean Simulasi Keenam di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 16.352 16.236 16.162 16.163 16.149 16.349 16.387 16.333 16.250 16.170 15.507 15.640 15.592 15.708 15.861 15.972 16.118 16.023 16.110 15.990 16.437 16.541 16.391 16.364 16.327 16.168 16.228 16.101 16.167 16.130 16.229 15.991 15.951 16.038 16.033 15.972 15.966 15.872 15.881 15.846 15.996 16.026 16.003 16.010 16.032 15.939 15.859 15.822 15.862 15.859 16.054 15.909 15.892 15.895 15.924 15.645 16.011 15.936 15.966 15.969 15.782 15.874 15.934 16.078 16.145 15.986 16.005 16.042 16.059 16.067 15.738 15.856 15.890 15.833 15.892 16.168 15.921 15.818 15.839 15.917 15.940 15.864 16.086 16.108 16.113 15.809 15.933 16.056 16.017 15.994 16.024 15.940 15.923 15.932 15.877 15.701 15.846 15.949 15.932 15.926 15.994 15.943 16.025 15.969 16.090 15.859 15.861 15.877 15.943 16.065 16.003 16.115 16.099 15.963 16.062 15.539 15.702 15.887 15.852 15.909 16.045 16.201 16.163 16.126 16.060 15.561 15.761 15.753 15.795 15.786 15.480 15.759 15.630 15.700 15.759 16.110 16.127 16.125 16.185 16.072 15.837 15.941 16.255 16.140 16.084 15.689 15.736 15.747 15.788 15.933 15.820 15.942 16.099 16.038 16.056 15.643 15.933 15.882 15.905 15.936
338
Tabel B.32 Maksimum Simulasi Keenam di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 65 69 69 70 74 2 61 63 70 70 70 3 78 78 78 78 78 4 67 67 68 68 71 5 66 92 92 92 92 6 76 76 76 84 84 7 64 64 65 68 68 8 67 67 73 77 77 9 69 73 73 73 73 10 59 69 70 73 73 11 63 65 71 71 87 12 67 67 67 79 79 13 60 64 69 69 77 14 84 84 84 84 84 15 68 82 82 82 82 16 62 79 79 79 79 17 62 68 68 68 70 18 68 74 74 74 74 19 61 69 72 72 72 20 59 70 70 71 79 21 73 76 76 83 83 22 65 65 72 72 72 23 70 71 71 71 71 24 61 77 77 77 77 25 67 67 67 67 68 26 71 71 71 71 71 27 65 65 67 67 67 28 69 69 69 82 82 29 78 78 78 78 78 30 69 69 73 73 73 31 65 65 65 71 71 32 87 87 87 87 87
339
Tabel B.33 Maksimum Simulasi Keenam di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 65 77 77 77 62 78 78 78 63 63 70 70 75 76 76 76 63 68 68 68 69 69 69 69 69 69 69 70 60 75 75 75 66 66 66 66 61 66 66 67 62 73 73 75 61 66 66 66 66 67 67 69 64 64 65 67 65 69 69 69 66 67 68 74 64 67 67 67 60 75 75 75 75 75 75 75 68 68 75 75 68 68 68 69 80 80 80 80 67 67 67 67 72 72 72 72 72 72 72 85 59 73 73 73 62 71 71 74 66 66 76 76 72 72 72 72 63 67 67 67 61 71 84 84 63 71 75 77
5 × 105 77 78 70 76 68 74 73 75 77 80 75 66 76 67 72 74 67 75 75 75 72 80 67 72 85 73 74 76 72 67 84 77
Tabel B.34 Waktu Komputasi Simulasi Keenam Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 18.969 9 19.125 10 19.078 11 19.078 12 18.984 13
Waktu Uji ke 19.109 17 19.093 18 19.078 19 19.000 20 18.953 21
340
Waktu Uji ke 19.172 25 19.016 26 19.125 27 19.125 28 19.000 29
Waktu 19.000 19.125 19.094 19.031 18.984
Uji ke 6 7 8
Waktu Uji ke 19.031 14 19.046 15 19.094 16
Waktu Uji ke 19.000 22 19.078 23 19.125 24
Waktu Uji ke 19.062 30 19.047 31 19.063 32
Waktu 19.078 19.047 19.031
Tabel B.35 Mean Simulasi Ketujuh di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 7.061 7.065 7.072 7.148 7.128 2 7.193 7.020 6.977 6.957 6.975 3 7.109 6.853 6.870 6.949 6.990 4 7.030 6.992 6.995 6.960 6.952 5 6.952 6.951 7.002 7.024 7.016 6 7.112 7.138 7.093 7.068 7.019 7 7.101 7.071 6.974 6.972 6.946 8 7.186 7.013 7.041 7.128 7.104 9 7.066 7.047 7.055 6.966 6.972 10 7.144 7.084 7.052 7.110 7.055 11 7.094 7.042 7.011 7.045 7.056 12 7.063 7.112 7.056 7.088 7.060 13 6.902 6.981 7.004 7.036 7.010 14 7.153 7.001 7.010 7.005 6.997 15 7.242 7.084 7.094 7.111 7.125 16 6.874 6.969 6.938 6.940 6.946 17 7.026 6.986 7.020 7.065 7.052 18 6.827 6.819 6.871 6.862 6.931 19 7.107 7.130 7.099 7.011 7.018 20 6.931 6.956 6.946 6.991 6.995 21 6.908 6.988 6.983 7.050 7.035 22 6.845 6.999 6.998 7.035 7.008 23 6.978 6.916 6.920 6.867 6.884 24 6.610 6.938 6.922 6.881 6.922 25 6.891 6.850 6.888 6.889 6.912 26 6.918 6.974 7.025 6.964 7.041 27 6.989 6.991 7.022 6.993 7.011 28 7.001 7.001 6.992 7.017 6.991 29 6.990 6.908 6.994 6.947 6.947 30 6.872 6.879 6.940 6.905 6.963 31 6.951 7.021 7.021 6.955 6.967 32 6.849 6.984 6.947 6.960 6.945
341
Tabel B.36 Mean Simulasi Ketujuh di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 7.044 7.212 7.051 7.026 6.954 7.146 7.145 7.283 7.051 7.146 7.044 7.118 6.824 7.124 7.261 6.869 7.064 6.880 7.127 6.866 6.895 6.882 6.997 6.592 6.893 6.927 7.042 6.990 6.983 6.903 7.042 6.801
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 7.057 7.076 7.155 7.152 7.035 6.986 6.951 6.965 6.809 6.869 6.952 6.985 6.980 6.977 6.949 6.938 6.935 6.970 7.011 7.001 7.149 7.121 7.089 7.038 7.103 6.990 6.982 6.962 7.053 7.064 7.142 7.111 7.072 7.067 6.974 6.982 7.091 7.063 7.132 7.072 7.000 6.976 7.008 7.033 7.136 7.052 7.065 7.044 6.971 6.979 7.012 6.989 6.987 6.981 6.991 6.984 7.093 7.116 7.106 7.122 6.981 6.935 6.929 6.928 7.025 7.032 7.079 7.059 6.878 6.898 6.887 6.951 7.159 7.117 7.005 7.003 6.933 6.938 6.986 7.001 6.973 6.978 7.044 7.022 6.988 6.983 7.016 6.986 6.907 6.913 6.865 6.894 6.875 6.903 6.846 6.888 6.856 6.911 6.907 6.928 7.000 7.074 7.020 7.102 6.981 7.016 6.980 6.997 6.976 6.981 7.005 6.973 6.917 7.002 6.961 6.965 6.894 6.951 6.913 6.972 7.068 7.053 6.972 6.998 6.942 6.928 6.943 6.928
342
Tabel B.37 Maksimum Simulasi Ketujuh di Jalur 1 Berdistribusi Normal Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 50 52 52 55 55 2 46 48 57 57 57 3 54 54 54 54 54 4 47 49 57 57 57 5 54 54 55 59 59 6 49 55 55 60 60 7 74 74 74 74 74 8 50 50 51 51 56 9 49 49 51 52 54 10 47 54 54 57 57 11 56 56 56 56 56 12 51 51 53 53 53 13 46 52 54 54 54 14 48 50 53 53 53 15 59 63 63 63 63 16 47 49 49 49 49 17 49 49 49 49 53 18 53 53 53 53 53 19 46 58 58 58 58 20 44 50 50 51 51 21 49 51 51 55 55 22 48 56 56 56 56 23 46 53 53 53 53 24 51 51 51 51 51 25 47 49 50 50 59 26 49 51 51 51 51 27 50 50 50 51 51 28 47 47 49 49 49 29 49 62 62 62 62 30 50 55 55 55 55 31 45 53 53 53 53 32 49 49 58 58 58
343
Tabel B.38 Maksimum Simulasi Ketujuh di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 54 46 51 50 47 51 64 50 48 52 51 57 50 48 52 43 48 47 52 49 47 53 45 50 50 55 51 50 46 45 52 50
Lama Simulasi 2 × 105 3 × 105 4 × 105 54 54 56 46 55 55 51 51 51 50 52 52 49 52 64 57 57 57 64 64 64 50 50 61 51 51 56 53 55 55 51 51 51 57 57 57 50 51 55 49 49 51 56 56 56 46 60 60 50 50 50 47 55 55 55 55 55 49 49 49 47 47 56 55 55 55 46 48 48 50 50 50 54 54 54 55 55 55 51 51 51 50 50 50 57 57 57 48 53 53 59 59 59 53 53 53
5 × 105 56 59 51 52 64 57 64 61 56 55 51 57 55 51 56 60 55 55 55 49 56 55 48 55 54 56 51 50 57 53 60 53
Tabel B.39 Waktu Komputasi Simulasi Ketujuh Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 21.094 9 21.110 10 21.141 11 21.109 12 21.187 13
Waktu Uji ke 21.187 17 21.156 18 21.156 19 21.172 20 21.187 21
344
Waktu Uji ke 21.375 25 21.235 26 21.282 27 21.218 28 21.156 29
Waktu 21.188 21.110 21.125 21.125 21.204
Uji ke 6 7 8
Waktu Uji ke 21.172 14 21.234 15 21.140 16
Waktu Uji ke 21.203 22 21.172 23 21.235 24
Waktu Uji ke 21.204 30 21.188 31 21.187 32
Waktu 21.203 21.156 21.188
Tabel B.40 Mean Simulasi Kedelapan di Jalur 1 Berdistribusi Normal Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 61.888 34.627 25.551 21.029 18.273 2 57.866 32.728 24.286 20.032 17.447 3 51.082 29.248 22.021 18.308 16.096 4 63.990 35.529 26.155 21.431 18.578 5 48.108 27.824 20.959 17.630 15.555 6 49.188 28.208 21.233 17.685 15.536 7 46.463 26.789 20.252 17.006 15.003 8 67.221 37.236 27.213 22.131 19.121 9 65.319 36.339 26.793 21.889 18.937 10 58.036 32.602 24.108 19.858 17.315 11 55.015 31.181 23.435 19.324 16.912 12 62.365 34.852 25.599 21.089 18.283 13 65.333 36.282 26.561 21.752 18.849 14 64.519 35.883 26.310 21.529 18.637 15 50.942 29.248 22.081 18.322 16.154 16 53.295 30.344 22.708 18.805 16.534 17 46.753 27.376 20.666 17.335 15.335 18 53.789 30.663 22.797 18.870 16.484 19 52.986 30.060 22.433 18.660 16.339 20 60.074 33.768 24.887 20.479 17.904 21 55.351 31.423 23.411 19.361 16.920 22 46.206 26.737 20.324 17.086 15.093 23 51.502 29.285 21.972 18.244 16.059 24 69.085 37.929 27.599 22.479 19.453 25 51.393 29.434 21.976 18.300 16.067 26 59.408 33.376 24.680 20.388 17.707 27 50.962 28.997 21.773 18.199 15.979 28 57.752 32.570 24.208 20.000 17.426 29 60.349 33.790 24.947 20.452 17.821 30 61.122 34.322 25.291 20.782 18.085 31 46.816 27.062 20.457 17.089 15.203 32 74.317 40.878 29.595 24.106 20.706
345
Tabel B.41 Mean Simulasi Kedelapan di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 50.693 57.602 63.087 55.390 56.295 47.179 67.061 45.398 57.458 67.444 51.117 53.774 48.027 48.829 41.830 64.301 45.586 65.942 44.025 64.804 57.843 50.347 65.986 53.634 54.863 51.095 51.558 52.805 51.426 61.592 55.012 60.017
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 29.075 21.850 18.224 16.004 32.549 24.149 19.901 17.351 35.159 25.935 21.240 18.430 31.304 23.372 19.359 16.917 31.821 23.619 19.627 17.144 27.188 20.548 17.186 15.134 37.110 27.142 22.190 19.161 26.338 19.977 16.719 14.814 32.433 24.150 19.902 17.344 37.348 27.279 22.240 19.222 29.276 22.184 18.392 16.165 30.570 22.785 18.979 16.604 27.639 20.766 17.426 15.393 28.027 21.084 17.604 15.507 24.697 19.011 16.010 14.309 35.777 26.354 21.556 18.775 26.550 20.136 16.919 14.984 36.688 26.863 21.968 18.974 25.542 19.398 16.366 14.491 36.146 26.444 21.660 18.858 32.699 24.249 19.984 17.405 28.819 21.754 18.172 15.963 36.513 26.765 21.854 18.956 30.266 22.500 18.653 16.390 31.097 23.085 19.120 16.724 29.174 21.843 18.279 15.998 29.265 21.951 18.366 16.096 30.077 22.524 18.768 16.433 29.382 22.046 18.278 16.061 34.502 25.399 20.859 18.128 31.170 23.216 19.132 16.859 33.736 24.860 20.536 17.834
346
Tabel B.42 Maksimum Simulasi Kedelapan di Jalur 1 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Selang Waktu Simulasi (×105 ) 0−1 1−2 2−3 3−4 4−5 1, 000 56 64 61 64 1, 000 73 61 63 45 1, 000 58 60 58 48 1, 007 55 76 46 51 1, 003 71 53 63 56 1, 000 49 56 51 49 1, 000 52 69 54 57 1, 026 57 48 47 59 1, 000 51 68 53 54 1, 009 52 50 59 79 1, 015 52 58 51 61 1, 000 55 63 72 61 1, 014 63 52 61 66 1, 002 56 49 60 51 1, 001 55 73 49 67 1, 000 64 48 53 45 1, 005 80 70 59 52 1, 000 61 59 52 51 1, 000 57 64 59 53 1, 017 53 53 66 60 1, 006 57 72 70 60 1, 001 65 70 56 53 1, 000 52 52 52 53 1, 022 43 48 53 52 1, 000 69 62 64 57 1, 000 53 70 65 65 1, 010 52 61 53 53 1, 014 61 68 71 61 1, 000 49 59 53 68 1, 003 75 64 55 53 1, 007 51 60 62 68 1, 002 59 51 62 63
347
Tabel B.43 Maksimum Simulasi Kedelapan di Jalur 2 Berdistribusi Normal Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Selang Waktu Simulasi (×105 ) 0−1 1−2 2−3 3−4 4−5 1, 025 56 51 65 56 1, 018 71 55 53 58 1, 051 51 53 62 57 1, 027 73 75 51 52 1, 029 63 68 69 58 1, 020 48 65 57 48 1, 043 54 68 61 53 1, 020 54 63 53 63 1, 022 50 56 54 55 1, 035 56 57 52 50 1, 022 52 69 54 55 1, 024 67 63 71 56 1, 025 55 49 58 77 1, 017 69 50 55 53 1, 023 55 55 48 57 1, 026 52 61 61 65 1, 037 73 62 51 51 1, 019 72 59 63 58 1, 019 51 51 51 49 1, 030 61 49 68 55 1, 021 55 50 59 59 1, 028 55 69 71 49 1, 026 48 49 63 57 1, 024 60 62 52 60 1, 023 65 55 63 62 1, 013 55 59 56 46 1, 025 52 61 62 50 1, 018 54 58 80 53 1, 025 58 88 64 55 1, 030 60 51 52 50 1, 025 50 67 54 76 1, 029 65 50 62 51
Tabel B.44 Waktu Komputasi Simulasi Kedelapan Berdistribusi Normal Uji ke 1 2 3 4 5
Waktu Uji ke 21.265 9 20.984 10 21.125 11 21.094 12 20.969 13
Waktu Uji ke 21.000 17 21.000 18 20.953 19 20.984 20 21.031 21
348
Waktu Uji ke 20.985 25 21.047 26 21.016 27 20.938 28 20.969 29
Waktu 20.969 20.969 20.938 20.953 21.047
Uji ke 6 7 8
Waktu Uji ke 21.062 14 21.078 15 20.985 16
Waktu Uji ke 20.922 22 20.922 23 20.844 24
Waktu Uji ke 20.969 30 20.875 31 20.984 32
Waktu 20.907 21.063 21.062
Tabel B.45 Mean Simulasi Pertama di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 10.095 9.721 9.846 9.695 9.665 2 9.832 9.519 9.695 9.679 9.704 3 9.693 9.844 9.826 9.769 9.818 4 9.421 9.398 9.343 9.344 9.412 5 9.123 9.565 9.564 9.543 9.527 6 9.552 9.577 9.507 9.346 9.357 7 9.519 9.354 9.447 9.706 9.692 8 8.932 9.576 9.441 9.485 9.526 9 9.406 9.427 9.389 9.303 9.315 10 9.197 8.976 9.099 9.175 9.294 11 9.494 9.914 9.824 9.601 9.635 12 9.862 9.561 9.470 9.461 9.446 13 9.782 9.347 9.264 9.301 9.349 14 9.338 9.310 9.331 9.405 9.323 15 8.974 9.584 9.579 9.649 9.774 16 9.421 9.442 9.290 9.539 9.495 17 9.063 9.398 9.412 9.310 9.410 18 9.140 9.410 9.473 9.537 9.528 19 9.259 9.761 9.526 9.570 9.502 20 10.332 9.797 9.727 9.620 9.596 21 9.759 9.500 9.274 9.292 9.293 22 9.419 9.658 9.615 9.714 9.631 23 9.003 9.606 9.360 9.348 9.362 24 9.407 9.317 9.262 9.220 9.320 25 9.844 9.769 9.604 9.661 9.623 26 9.528 9.404 9.376 9.347 9.325 27 9.292 9.558 9.569 9.665 9.622 28 9.172 9.176 9.336 9.320 9.471 29 9.491 9.829 9.738 9.751 9.680 30 9.819 9.962 9.984 9.860 9.888 31 9.852 9.553 9.441 9.559 9.494 32 9.325 9.319 9.552 9.566 9.533
349
Tabel B.46 Mean Simulasi Pertama di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 9.789 9.652 9.672 9.554 9.537 9.845 9.550 9.749 9.732 9.763 10.321 10.041 9.920 9.908 9.913 9.665 9.535 9.356 9.351 9.398 9.465 9.486 9.576 9.609 9.652 9.623 9.660 9.462 9.314 9.399 9.610 9.201 9.303 9.367 9.420 9.022 9.793 9.615 9.557 9.499 9.499 9.560 9.520 9.370 9.398 9.375 9.102 9.098 9.274 9.338 9.892 10.220 10.034 9.746 9.760 9.688 9.433 9.334 9.345 9.370 9.694 9.289 9.305 9.466 9.417 9.215 9.232 9.189 9.276 9.237 8.895 9.441 9.476 9.499 9.583 9.659 9.565 9.445 9.644 9.621 9.125 9.311 9.376 9.323 9.389 9.173 9.326 9.414 9.541 9.520 8.989 9.428 9.357 9.429 9.399 10.333 9.947 10.065 9.914 9.879 10.033 9.662 9.496 9.434 9.364 9.249 9.543 9.568 9.661 9.593 9.425 9.894 9.594 9.548 9.481 9.374 9.354 9.323 9.241 9.322 9.649 9.657 9.579 9.631 9.622 9.562 9.483 9.440 9.474 9.401 8.945 9.216 9.297 9.472 9.438 9.182 9.240 9.360 9.400 9.493 9.083 9.440 9.450 9.491 9.500 9.747 9.842 9.736 9.706 9.805 9.734 9.414 9.473 9.623 9.573 9.285 9.362 9.459 9.511 9.554
350
Tabel B.47 Maksimum Simulasi Pertama di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 73 73 103 103 103 2 83 83 83 83 94 3 75 78 78 78 92 4 94 94 94 94 94 5 75 115 115 115 115 6 72 72 109 109 109 7 89 89 91 114 114 8 64 83 83 87 93 9 82 82 82 82 82 10 61 63 79 79 84 11 71 88 88 88 88 12 91 91 91 91 91 13 79 79 81 81 86 14 73 73 74 74 74 15 84 84 92 92 100 16 67 68 72 75 75 17 68 88 88 88 88 18 77 101 101 101 101 19 73 79 79 79 79 20 99 99 99 99 99 21 78 78 78 91 91 22 85 85 85 85 85 23 70 95 95 95 95 24 81 81 81 97 97 25 82 82 82 87 87 26 65 68 71 86 93 27 101 101 101 101 101 28 69 80 80 81 89 29 77 107 107 107 107 30 73 97 105 105 105 31 117 117 117 117 117 32 59 76 103 103 103
351
Tabel B.48 Maksimum Simulasi Pertama di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 87 87 87 87 94 79 79 84 84 88 117 117 117 117 117 85 85 94 94 94 68 68 78 78 78 104 104 104 104 104 74 74 76 76 76 69 82 82 82 82 90 90 90 90 90 82 82 82 86 86 83 86 86 86 86 80 80 80 80 80 82 82 82 107 107 67 73 73 81 81 71 79 88 88 88 80 80 80 89 89 75 77 77 77 77 81 82 82 82 90 66 76 76 76 76 89 103 133 133 133 75 75 75 75 75 78 87 103 103 103 67 96 96 96 96 107 107 107 107 107 65 83 83 93 95 91 91 91 91 91 73 73 74 81 83 80 80 80 110 110 75 75 76 76 76 66 77 77 77 105 74 74 74 100 100 62 102 102 106 106
Tabel B.49 Waktu Komputasi Simulasi Pertama Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 27.437 9 27.094 10 27.141 11 27.156 12 27.141 13
Waktu Uji ke 27.140 17 27.172 18 27.078 19 27.110 20 27.109 21
352
Waktu Uji ke 27.125 25 27.125 26 27.156 27 27.094 28 27.125 29
Waktu 27.078 27.125 27.110 27.109 27.110
Uji ke 6 7 8
Waktu Uji ke 27.187 14 27.125 15 27.172 16
Waktu Uji ke 27.110 22 27.094 23 27.094 24
Waktu Uji ke 27.110 30 27.125 31 27.141 32
Waktu 27.032 27.093 27.110
Tabel B.50 Mean Simulasi Kedua di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 1.969 1.972 1.970 1.971 1.969 2 1.974 1.970 1.969 1.968 1.967 3 1.987 1.978 1.974 1.969 1.968 4 1.962 1.964 1.966 1.967 1.966 5 1.966 1.967 1.970 1.971 1.971 6 1.958 1.975 1.974 1.975 1.973 7 1.979 1.969 1.968 1.968 1.972 8 1.984 1.981 1.976 1.978 1.978 9 1.979 1.973 1.972 1.974 1.972 10 1.970 1.966 1.968 1.966 1.969 11 1.964 1.969 1.971 1.972 1.971 12 1.985 1.971 1.969 1.976 1.977 13 1.965 1.960 1.961 1.966 1.963 14 1.966 1.967 1.965 1.966 1.965 15 1.970 1.966 1.969 1.968 1.967 16 1.956 1.962 1.972 1.968 1.966 17 1.963 1.970 1.969 1.970 1.972 18 1.972 1.971 1.974 1.976 1.974 19 1.987 1.972 1.970 1.971 1.972 20 1.977 1.968 1.972 1.976 1.973 21 1.969 1.968 1.973 1.975 1.974 22 1.973 1.969 1.967 1.972 1.970 23 1.971 1.975 1.978 1.976 1.977 24 1.986 1.976 1.976 1.975 1.975 25 1.974 1.975 1.980 1.981 1.980 26 1.985 1.977 1.981 1.979 1.978 27 1.988 1.982 1.979 1.979 1.978 28 1.984 1.978 1.977 1.975 1.973 29 1.970 1.969 1.970 1.969 1.973 30 1.974 1.971 1.974 1.974 1.976 31 1.987 1.983 1.983 1.976 1.973 32 1.988 1.979 1.974 1.978 1.977
353
Tabel B.51 Mean Simulasi Kedua di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1.966 1.970 1.972 1.967 1.969 1.967 1.972 1.965 1.967 1.966 1.974 1.975 1.974 1.974 1.971 1.954 1.962 1.967 1.971 1.970 1.958 1.959 1.961 1.965 1.965 1.982 1.977 1.974 1.978 1.976 1.960 1.965 1.965 1.967 1.969 1.979 1.975 1.970 1.971 1.971 2.006 1.987 1.985 1.983 1.983 1.963 1.966 1.968 1.969 1.969 1.972 1.964 1.968 1.971 1.971 1.977 1.977 1.974 1.979 1.980 1.964 1.978 1.979 1.980 1.977 1.954 1.958 1.955 1.956 1.956 1.966 1.961 1.962 1.964 1.965 1.969 1.977 1.979 1.975 1.975 1.951 1.962 1.966 1.964 1.968 1.969 1.968 1.968 1.967 1.967 1.977 1.974 1.972 1.971 1.968 1.978 1.974 1.977 1.973 1.975 1.972 1.974 1.977 1.980 1.980 1.980 1.981 1.975 1.977 1.977 1.967 1.964 1.969 1.969 1.971 1.987 1.984 1.981 1.977 1.977 1.979 1.984 1.984 1.983 1.982 1.971 1.971 1.978 1.972 1.972 1.991 1.987 1.982 1.980 1.977 1.962 1.968 1.969 1.974 1.975 1.979 1.973 1.970 1.969 1.972 1.964 1.970 1.964 1.966 1.970 1.973 1.970 1.975 1.971 1.971 1.967 1.969 1.967 1.973 1.975
354
Tabel B.52 Maksimum Simulasi Kedua di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 18 18 18 18 18 2 21 21 21 21 21 3 18 18 21 21 21 4 18 18 18 18 18 5 16 16 16 17 18 6 15 17 18 18 18 7 16 19 19 19 19 8 19 19 21 21 21 9 17 19 19 19 19 10 16 19 19 19 19 11 18 18 18 18 19 12 16 20 20 20 20 13 15 17 17 17 17 14 16 20 20 20 20 15 17 17 18 18 18 16 20 20 20 21 21 17 17 17 17 18 18 18 17 20 20 20 20 19 19 19 19 19 19 20 17 19 19 19 21 21 19 19 19 19 19 22 17 17 17 17 18 23 15 18 18 18 18 24 17 18 18 18 18 25 18 18 18 18 18 26 18 18 18 18 20 27 18 18 18 19 19 28 20 20 20 20 20 29 17 17 20 20 20 30 22 22 22 22 22 31 17 17 17 17 17 32 19 21 21 21 21
355
Tabel B.53 Maksimum Simulasi Kedua di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 18 20 20 20 22 22 22 22 20 20 20 20 27 27 27 27 21 21 21 21 22 22 22 22 23 23 23 23 20 20 20 20 18 20 20 20 25 25 25 25 22 22 22 22 19 19 19 19 22 22 22 22 22 22 22 22 23 23 23 23 22 22 22 22 21 21 21 21 20 20 20 20 25 25 25 25 20 20 20 20 20 20 20 20 19 19 19 19 25 25 25 25 26 26 26 26 21 21 21 21 23 23 23 23 23 23 23 23 20 20 20 20 24 24 24 24 25 25 25 25 18 18 19 19 21 21 21 21
5 × 105 20 22 20 27 21 22 23 21 20 25 22 20 22 22 23 22 21 20 25 20 20 19 25 26 21 26 23 20 24 25 19 21
Tabel B.54 Waktu Komputasi Simulasi Kedua Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 34.547 9 34.594 10 34.594 11 34.531 12 34.578 13
Waktu Uji ke 34.547 17 34.609 18 34.515 19 34.547 20 34.500 21
356
Waktu Uji ke 34.531 25 34.578 26 34.485 27 34.562 28 34.625 29
Waktu 34.610 34.640 34.703 34.641 34.609
Uji ke 6 7 8
Waktu Uji ke 34.734 14 34.562 15 34.641 16
Waktu Uji ke 34.563 22 34.594 23 34.609 24
Waktu Uji ke 34.610 30 34.594 31 34.563 32
Waktu 34.609 34.734 34.625
Tabel B.55 Mean Simulasi Ketiga di Jalur 1 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 × 105 30, 372.445 29, 732.762 30, 155.507 30, 365.918 30, 215.083 29, 985.339 29, 930.418 30, 353.381 29, 599.101 30, 499.193 30, 183.746 30, 425.241 30, 301.624 29, 666.210 30, 068.584 30, 056.659 30, 321.608 30, 276.129 30, 530.422 30, 348.268 29, 958.460 29, 881.198 29, 941.125 30, 222.978 29, 488.266 30, 026.785 30, 194.149 30, 736.130 29, 537.709 29, 470.792 29, 566.279 30, 090.582
2 × 105 60, 925.621 59, 741.577 60, 174.717 60, 855.750 60, 247.957 59, 737.949 60, 091.877 60, 235.129 59, 755.156 60, 899.971 60, 369.701 60, 847.254 60, 583.725 59, 930.092 59, 745.966 59, 834.498 60, 039.030 60, 395.879 60, 686.016 60, 328.283 59, 759.634 59, 988.009 59, 970.142 60, 294.801 59, 509.997 60, 182.706 60, 253.362 60, 782.125 59, 416.350 59, 735.100 59, 582.427 60, 280.888
Lama Simulasi 3 × 105 4 × 105 91, 126.814 121, 378.303 89, 653.998 119, 529.950 90, 182.719 120, 167.104 91, 111.220 121, 201.437 90, 249.692 120, 257.637 89, 521.952 119, 276.321 90, 321.521 120, 750.899 90, 185.859 120, 100.415 89, 872.445 119, 892.515 91, 116.629 121, 117.770 90, 272.670 120, 158.845 91, 065.680 121, 233.997 90, 900.246 120, 996.061 90, 372.566 120, 495.114 89, 573.170 119, 739.738 89, 835.122 119, 920.139 90, 128.568 120, 512.577 90, 617.730 120, 806.756 90, 688.569 120, 677.543 90, 177.759 120, 200.240 89, 443.377 119, 280.912 90, 051.533 120, 138.480 89, 885.670 119, 949.318 90, 260.148 120, 191.370 89, 440.597 119, 398.854 90, 155.811 119, 974.764 90, 251.334 120, 391.776 90, 792.297 120, 681.918 89, 506.921 119, 434.621 89, 745.634 119, 839.141 89, 694.522 119, 809.040 90, 231.282 120, 084.094
357
5 × 105 151, 598.340 149, 353.337 150, 176.389 151, 246.421 150, 198.439 149, 191.009 151, 237.786 150, 021.481 149, 963.944 151, 156.213 150, 120.018 151, 381.173 151, 051.123 150, 520.525 149, 874.577 149, 852.122 150, 702.283 150, 761.704 150, 776.465 150, 281.374 149, 198.466 150, 049.238 150, 141.867 150, 183.489 149, 402.758 149, 756.782 150, 504.568 150, 603.014 149, 355.303 149, 955.436 149, 948.312 149, 962.615
Tabel B.56 Mean Simulasi Ketiga di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 30, 073.179 29, 442.177 30, 500.692 29, 400.091 29, 687.622 30, 334.692 29, 621.963 30, 117.272 30, 253.705 29, 975.985 30, 319.300 30, 533.956 29, 818.057 30, 152.632 30, 011.298 29, 329.983 29, 733.526 30, 088.210 29, 665.804 29, 724.157 29, 916.752 30, 111.932 29, 783.308 30, 059.863 30, 035.007 30, 201.744 29, 931.622 30, 226.503 29, 677.717 29, 903.552 29, 895.540 30, 228.975
5
2 × 10 59, 885.813 59, 131.977 60, 383.952 59, 496.011 59, 571.617 60, 313.896 59, 525.929 60, 072.710 60, 439.282 60, 183.493 60, 436.268 60, 898.511 59, 778.898 60, 097.590 60, 458.354 58, 962.149 59, 863.869 60, 253.764 59, 361.997 59, 955.030 59, 873.833 60, 148.671 59, 679.107 59, 841.136 60, 096.906 60, 168.427 59, 852.975 60, 169.827 59, 918.120 59, 762.571 59, 949.308 60, 139.345
Lama Simulasi 3 × 105 4 × 105 89, 657.873 119, 585.518 88, 914.720 118, 963.183 90, 481.321 120, 523.981 89, 730.282 119, 986.612 89, 551.349 119, 534.475 90, 505.182 120, 501.717 89, 621.861 119, 581.910 90, 013.877 120, 036.971 90, 436.952 120, 448.321 90, 413.946 120, 460.649 90, 315.912 120, 243.168 91, 021.569 121, 025.735 89, 740.099 119, 752.411 89, 992.868 119, 858.556 90, 666.294 120, 791.205 88, 630.109 118, 510.274 89, 984.877 120, 336.031 90, 279.552 120, 345.961 89, 333.342 119, 287.596 90, 076.329 120, 118.840 89, 769.762 119, 781.641 90, 004.860 119, 772.815 89, 642.439 119, 424.118 89, 964.088 120, 065.757 90, 084.182 120, 039.732 89, 848.384 119, 542.761 89, 914.825 119, 968.885 90, 241.695 120, 229.800 89, 956.867 119, 988.573 89, 712.622 119, 514.222 90, 116.832 120, 342.502 89, 974.465 119, 885.552
358
5 × 105 149, 489.161 148, 982.561 150, 586.712 150, 166.838 149, 515.908 150, 426.327 149, 557.646 150, 072.432 150, 475.367 150, 492.351 150, 254.251 151, 142.337 149, 853.770 149, 837.548 150, 741.730 148, 399.119 150, 469.012 150, 345.473 149, 267.897 150, 048.481 149, 782.689 149, 675.683 149, 211.621 150, 115.574 149, 976.234 149, 446.725 149, 965.454 150, 412.407 150, 038.615 149, 383.295 150, 583.100 149, 694.304
Tabel B.57 Mean Simulasi Ketiga di Jalur 3 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 30, 047.563 30, 062.826 30, 212.419 30, 132.739 29, 996.505 29, 926.864 29, 857.299 29, 685.077 29, 765.363 30, 180.868 29, 657.859 29, 780.447 29, 907.858 30, 039.762 30, 007.231 29, 646.931 29, 557.904 29, 874.045 30, 001.055 30, 084.356 30, 046.867 30, 562.650 30, 503.241 29, 896.526 29, 597.989 30, 044.710 30, 215.258 29, 722.067 29, 519.570 30, 067.431 29, 684.765 29, 953.018
5
2 × 10 60, 058.150 60, 025.544 60, 308.649 60, 396.174 60, 100.910 60, 355.041 59, 848.019 59, 640.422 59, 677.317 60, 567.489 59, 577.683 59, 842.587 60, 206.472 60, 293.308 60, 074.433 59, 450.255 59, 003.062 59, 907.915 59, 719.946 60, 320.792 59, 637.478 60, 963.860 61, 067.989 60, 071.121 59, 513.793 60, 196.730 60, 358.963 59, 497.672 59, 193.847 60, 219.290 59, 360.765 59, 638.058
Lama Simulasi 3 × 105 4 × 105 89, 960.433 119, 989.435 90, 018.583 120, 006.699 90, 262.697 120, 284.848 90, 488.712 120, 500.522 89, 886.525 119, 661.409 90, 498.165 120, 459.281 89, 731.692 119, 715.827 89, 422.008 119, 113.638 89, 759.719 120, 014.693 90, 973.021 121, 337.587 89, 496.327 119, 354.625 89, 920.982 119, 986.875 90, 198.583 120, 267.630 90, 673.564 121, 057.700 89, 951.874 119, 869.542 89, 170.532 118, 949.869 88, 668.499 118, 568.334 90, 160.839 120, 246.234 89, 546.425 119, 321.197 90, 598.043 120, 745.729 89, 481.510 119, 426.970 90, 923.716 120, 770.459 91, 344.654 121, 408.648 90, 199.726 120, 258.165 89, 404.508 119, 293.932 90, 329.037 120, 390.365 90, 598.017 120, 683.386 89, 462.609 119, 290.935 89, 264.400 119, 351.452 90, 072.126 120, 028.428 89, 436.277 119, 572.064 89, 566.592 119, 669.848
359
5 × 105 149, 981.974 149, 991.705 150, 209.878 150, 609.860 149, 519.046 150, 493.089 149, 725.432 148, 860.368 150, 353.043 151, 531.036 149, 316.736 149, 960.138 150, 368.304 151, 217.698 149, 791.077 148, 709.320 148, 384.879 150, 292.716 149, 104.221 150, 680.263 149, 270.963 150, 565.502 151, 503.442 150, 354.542 149, 181.652 150, 518.522 150, 629.559 148, 998.761 149, 442.984 149, 988.356 149, 683.897 149, 794.760
Tabel B.58 Maksimum Simulasi Ketiga di Jalur 1 Berdistribusi Uniform Uji ke 1 × 105 1 60, 940 2 59, 928 3 60, 163 4 60, 726 5 60, 237 6 59, 728 7 60, 160 8 60, 374 9 59, 617 10 60, 717 11 60, 696 12 61, 224 13 60, 436 14 59, 698 15 59, 863 16 59, 802 17 60, 187 18 60, 340 19 60, 768 20 60, 712 21 59, 472 22 60, 240 23 60, 040 24 60, 411 25 59, 463 26 60, 384 27 60, 144 28 60, 987 29 58, 920 30 59, 451 31 59, 312 32 60, 387
Lama Simulasi 2 × 10 3 × 105 4 × 105 121, 765 181, 906 242, 226 119, 799 179, 665 238, 808 120, 216 180, 285 240, 368 121, 191 181, 504 241, 543 119, 997 180, 752 239, 772 119, 626 178, 700 238, 786 120, 499 181, 412 242, 896 120, 255 179, 703 239, 882 120, 212 179, 881 240, 392 121, 695 181, 455 240, 739 120, 583 179, 974 239, 973 121, 606 181, 818 242, 049 121, 564 181, 321 241, 065 120, 851 181, 480 240, 625 119, 519 179, 666 240, 357 119, 793 179, 922 239, 807 119, 437 181, 410 241, 644 121, 231 181, 381 241, 029 120, 595 180, 502 240, 688 119, 965 180, 007 240, 819 118, 982 179, 187 238, 660 120, 284 180, 531 240, 242 120, 100 179, 967 240, 387 120, 258 179, 986 240, 096 119, 763 179, 699 239, 067 120, 265 180, 005 239, 033 120, 432 180, 517 241, 245 120, 735 180, 699 240, 139 119, 427 179, 429 239, 138 120, 392 180, 130 240, 232 120, 002 180, 037 240, 517 120, 432 179, 586 239, 588 5
360
5 × 105 302, 340 298, 305 300, 273 301, 624 300, 237 298, 761 303, 308 299, 859 300, 295 301, 812 299, 682 302, 359 301, 342 300, 913 301, 067 299, 733 301, 253 300, 290 301, 830 300, 364 299, 080 299, 761 301, 558 299, 865 299, 332 298, 784 301, 121 300, 041 299, 334 300, 926 300, 838 300, 157
Tabel B.59 Maksimum Simulasi Ketiga di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 59, 970 58, 630 60, 144 59, 373 59, 425 60, 408 59, 820 60, 154 60, 603 59, 947 60, 601 61, 240 59, 831 60, 172 60, 701 58, 898 59, 992 60, 567 59, 120 60, 227 59, 877 60, 131 59, 636 59, 925 60, 170 60, 672 59, 773 60, 448 59, 778 60, 117 59, 689 60, 311
Lama Simulasi 2 × 10 3 × 105 4 × 105 118, 982 179, 177 239, 361 118, 733 178, 860 238, 885 120, 669 181, 061 240, 460 119, 744 180, 603 240, 728 119, 191 179, 332 239, 578 120, 558 180, 652 240, 339 119, 690 179, 590 239, 383 120, 077 180, 193 240, 041 120, 396 180, 644 240, 607 120, 680 180, 881 240, 323 120, 276 180, 061 240, 110 121, 361 181, 110 241, 060 119, 959 179, 572 240, 048 120, 252 179, 160 239, 817 121, 206 181, 439 240, 698 118, 290 178, 315 238, 074 120, 001 181, 020 241, 338 120, 477 180, 660 240, 289 118, 977 179, 285 239, 146 120, 315 180, 226 240, 326 119, 792 179, 388 239, 944 119, 835 179, 716 239, 301 119, 482 179, 254 238, 648 119, 877 180, 238 240, 163 120, 021 180, 069 239, 961 119, 836 178, 769 238, 721 119, 770 180, 113 240, 259 120, 046 180, 383 240, 790 120, 042 179, 955 240, 102 119, 688 179, 304 238, 466 120, 317 180, 612 241, 390 119, 897 180, 002 239, 171 5
361
5 × 105 298, 771 298, 658 300, 584 301, 353 299, 386 299, 945 299, 718 300, 154 301, 077 300, 828 300, 252 301, 670 300, 510 299, 793 300, 141 298, 042 300, 828 300, 121 299, 310 299, 513 299, 592 299, 219 297, 713 300, 560 299, 768 299, 286 299, 747 301, 527 300, 537 298, 784 301, 485 299, 252
Tabel B.60 Maksimum Simulasi Ketiga di Jalur 3 Berdistribusi Uniform Uji ke 1 × 105 1 60, 096 2 59, 931 3 60, 433 4 60, 288 5 60, 558 6 60, 297 7 59, 942 8 59, 865 9 59, 431 10 60, 384 11 59, 308 12 59, 721 13 60, 245 14 60, 270 15 60, 251 16 59, 266 17 59, 311 18 59, 582 19 59, 674 20 60, 151 21 59, 671 22 61, 223 23 61, 140 24 60, 093 25 59, 245 26 60, 192 27 60, 231 28 59, 534 29 58, 863 30 60, 432 31 59, 220 32 59, 541
Lama Simulasi 2 × 10 3 × 105 4 × 105 119, 701 179, 623 239, 983 120, 356 179, 967 239, 887 120, 217 180, 343 240, 384 120, 861 180, 610 240, 794 119, 597 179, 284 239, 184 120, 942 180, 763 240, 077 119, 727 179, 333 240, 081 119, 656 178, 644 238, 003 119, 843 180, 116 241, 270 121, 326 182, 401 242, 311 119, 787 178, 884 239, 142 119, 929 180, 422 239, 876 120, 254 179, 844 240, 569 121, 089 181, 837 242, 367 120, 232 179, 293 239, 873 118, 935 178, 395 238, 275 118, 172 177, 852 238, 190 120, 556 180, 927 240, 546 119, 055 179, 290 238, 255 120, 543 181, 404 240, 794 118, 740 179, 070 238, 904 121, 004 180, 765 239, 946 121, 933 181, 413 242, 001 120, 337 180, 468 240, 687 119, 386 178, 826 239, 001 120, 913 180, 270 240, 982 120, 958 181, 369 240, 918 119, 421 178, 997 238, 601 118, 947 179, 770 239, 672 120, 079 180, 038 240, 190 119, 327 179, 951 240, 016 119, 508 179, 670 240, 193 5
5 × 105 299, 936 299, 719 300, 031 301, 258 299, 023 300, 695 299, 784 297, 867 302, 730 302, 614 299, 521 299, 993 301, 070 301, 552 299, 280 297, 236 297, 142 300, 488 298, 254 299, 960 298, 521 299, 850 302, 274 300, 691 298, 477 300, 910 300, 321 297, 082 299, 820 299, 758 300, 175 299, 976
Tabel B.61 Waktu Komputasi Simulasi Ketiga Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 29.625 9 29.656 10 29.531 11 29.563 12 29.563 13
Waktu Uji ke 29.625 17 29.563 18 29.500 19 29.625 20 29.484 21
362
Waktu Uji ke 29.515 25 29.593 26 29.656 27 29.735 28 29.516 29
Waktu 29.469 29.547 29.484 29.578 29.594
Uji ke 6 7 8
Waktu Uji ke 29.625 14 29.563 15 29.594 16
Waktu Uji ke 29.484 22 29.532 23 29.578 24
Waktu Uji ke 29.516 30 29.547 31 29.516 32
Waktu 29.610 29.578 29.594
Tabel B.62 Mean Simulasi Keempat di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 7.309 7.282 7.283 7.266 7.248 2 7.213 7.175 7.164 7.187 7.176 3 7.228 7.300 7.289 7.277 7.294 4 7.191 7.242 7.262 7.266 7.269 5 7.155 7.159 7.197 7.226 7.249 6 7.135 7.175 7.200 7.217 7.216 7 7.226 7.213 7.235 7.225 7.212 8 7.236 7.268 7.240 7.248 7.259 9 7.132 7.192 7.215 7.169 7.182 10 7.217 7.259 7.302 7.275 7.258 11 7.242 7.219 7.170 7.205 7.222 12 7.288 7.303 7.308 7.275 7.259 13 7.264 7.303 7.288 7.297 7.285 14 7.199 7.216 7.226 7.214 7.224 15 7.266 7.202 7.209 7.216 7.216 16 7.265 7.310 7.279 7.278 7.291 17 7.189 7.187 7.223 7.207 7.222 18 7.291 7.204 7.226 7.252 7.253 19 7.202 7.199 7.206 7.203 7.205 20 7.235 7.270 7.258 7.277 7.265 21 7.176 7.230 7.244 7.229 7.205 22 7.312 7.303 7.317 7.264 7.268 23 7.296 7.315 7.306 7.304 7.304 24 7.242 7.211 7.226 7.243 7.237 25 7.258 7.238 7.252 7.228 7.206 26 7.313 7.195 7.230 7.210 7.232 27 7.161 7.174 7.172 7.175 7.201 28 7.252 7.249 7.225 7.218 7.209 29 7.172 7.155 7.149 7.156 7.177 30 7.249 7.261 7.242 7.217 7.212 31 7.286 7.311 7.306 7.293 7.304 32 7.212 7.227 7.236 7.259 7.239
363
Tabel B.63 Mean Simulasi Keempat di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 7.261 7.226 7.221 7.180 7.147 7.152 7.214 7.235 7.124 7.199 7.227 7.303 7.282 7.230 7.232 7.311 7.164 7.240 7.220 7.193 7.167 7.242 7.307 7.199 7.288 7.286 7.163 7.265 7.206 7.267 7.277 7.201
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 7.261 7.272 7.257 7.241 7.165 7.166 7.185 7.164 7.312 7.293 7.278 7.285 7.256 7.260 7.269 7.260 7.170 7.200 7.222 7.240 7.185 7.202 7.202 7.215 7.179 7.212 7.203 7.196 7.278 7.269 7.270 7.274 7.196 7.197 7.170 7.185 7.244 7.287 7.270 7.256 7.228 7.194 7.215 7.230 7.309 7.308 7.287 7.268 7.308 7.295 7.290 7.274 7.224 7.217 7.221 7.240 7.172 7.189 7.194 7.211 7.344 7.297 7.287 7.295 7.190 7.216 7.190 7.209 7.186 7.207 7.237 7.227 7.227 7.216 7.217 7.215 7.235 7.230 7.251 7.245 7.209 7.204 7.206 7.197 7.266 7.297 7.244 7.255 7.310 7.313 7.315 7.311 7.192 7.195 7.229 7.220 7.246 7.261 7.239 7.220 7.217 7.248 7.227 7.240 7.176 7.173 7.175 7.212 7.254 7.242 7.229 7.214 7.159 7.142 7.149 7.175 7.285 7.260 7.232 7.230 7.301 7.287 7.275 7.287 7.241 7.250 7.264 7.252
364
Tabel B.64 Mean Simulasi Keempat di Jalur 3 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 7.240 7.235 7.257 7.259 7.235 2 7.228 7.191 7.159 7.184 7.171 3 7.281 7.347 7.314 7.302 7.308 4 7.217 7.288 7.280 7.279 7.273 5 7.176 7.191 7.219 7.243 7.260 6 7.151 7.196 7.203 7.226 7.227 7 7.237 7.166 7.212 7.211 7.208 8 7.246 7.273 7.252 7.254 7.258 9 7.209 7.217 7.221 7.187 7.198 10 7.235 7.261 7.312 7.286 7.264 11 7.215 7.199 7.161 7.196 7.227 12 7.298 7.317 7.306 7.290 7.267 13 7.248 7.300 7.288 7.287 7.276 14 7.200 7.207 7.216 7.220 7.232 15 7.301 7.226 7.227 7.231 7.236 16 7.308 7.335 7.296 7.283 7.283 17 7.230 7.194 7.223 7.198 7.206 18 7.265 7.197 7.216 7.232 7.229 19 7.174 7.194 7.201 7.205 7.202 20 7.178 7.218 7.224 7.254 7.249 21 7.184 7.225 7.225 7.230 7.220 22 7.276 7.259 7.281 7.233 7.244 23 7.252 7.298 7.294 7.289 7.295 24 7.220 7.224 7.223 7.239 7.233 25 7.255 7.231 7.240 7.226 7.214 26 7.276 7.212 7.243 7.212 7.231 27 7.191 7.171 7.171 7.179 7.210 28 7.302 7.279 7.253 7.225 7.210 29 7.179 7.160 7.133 7.154 7.171 30 7.241 7.257 7.264 7.239 7.231 31 7.270 7.305 7.282 7.274 7.276 32 7.209 7.237 7.241 7.251 7.243
365
Tabel B.65 Maksimum Simulasi Keempat di Jalur 1 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 58 48 53 44 44 58 52 54 41 48 50 49 44 43 49 59 47 59 48 64 48 55 45 49 48 46 50 48 47 48 50 46
Lama Simulasi 2 × 105 3 × 105 4 × 105 58 58 58 57 57 57 53 53 53 45 53 53 48 48 52 58 58 58 52 52 52 54 54 57 57 57 57 56 56 56 50 50 50 66 66 66 55 55 55 48 48 49 51 51 51 59 59 59 49 49 49 59 59 59 48 48 55 64 64 64 54 54 54 57 57 57 61 62 62 52 52 58 51 60 60 46 48 49 50 50 50 49 49 49 52 52 55 61 61 61 53 53 53 48 48 48
366
5 × 105 58 57 53 53 52 58 52 57 57 56 51 66 55 49 56 60 49 59 55 64 54 57 62 63 60 49 50 49 59 61 53 48
Tabel B.66 Maksimum Simulasi Keempat di Jalur 2 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 51 54 54 54 54 2 51 52 52 54 54 3 51 51 51 51 51 4 56 56 56 56 56 5 49 49 49 67 67 6 44 45 45 48 48 7 49 49 49 49 53 8 48 52 52 52 52 9 43 51 59 59 59 10 50 50 50 50 50 11 50 51 51 58 58 12 45 55 55 55 55 13 45 51 56 56 56 14 45 50 50 50 57 15 41 49 49 49 49 16 54 54 54 54 64 17 43 52 52 52 52 18 52 52 52 52 52 19 49 49 49 53 53 20 48 48 54 56 56 21 45 53 53 53 53 22 48 48 56 56 56 23 51 56 56 56 56 24 54 54 54 54 54 25 52 52 75 75 75 26 62 62 62 62 62 27 49 49 49 52 52 28 43 46 46 48 48 29 53 53 53 53 53 30 61 61 61 61 61 31 50 50 50 50 50 32 43 50 50 51 52
367
Tabel B.67 Maksimum Simulasi Keempat di Jalur 3 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 49 50 50 45 48 49 47 51 43 54 42 45 56 44 45 63 51 58 46 47 54 58 53 47 48 57 48 49 48 47 45 47
Lama Simulasi 2 × 105 3 × 105 4 × 105 58 58 58 61 61 61 50 52 52 49 56 56 65 65 65 49 49 49 47 47 47 51 57 57 55 55 55 54 54 54 48 50 50 56 56 56 58 58 58 49 49 50 48 48 48 63 63 63 54 54 54 58 58 58 52 52 52 48 49 50 54 54 58 58 58 58 55 55 55 48 48 48 48 53 53 57 57 57 48 48 51 49 49 49 50 50 50 47 47 55 49 52 52 54 54 54
5 × 105 58 61 52 56 65 49 50 57 55 56 50 56 58 55 48 66 54 58 52 50 58 58 55 66 53 57 51 49 50 55 52 54
Tabel B.68 Waktu Komputasi Simulasi Keempat Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 35.625 9 35.656 10 35.531 11 35.532 12 35.672 13
Waktu Uji ke 35.672 17 35.563 18 35.515 19 35.578 20 35.578 21
368
Waktu Uji ke 35.750 25 35.578 26 35.594 27 36.000 28 35.672 29
Waktu 35.515 35.609 35.531 35.547 35.531
Uji ke 6 7 8
Waktu Uji ke 35.687 14 35.625 15 35.687 16
Waktu Uji ke 35.609 22 35.609 23 35.609 24
Waktu Uji ke 35.484 30 35.437 31 35.594 32
Waktu 35.484 35.640 35.594
Tabel B.69 Mean Simulasi Kelima di Jalur 1 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 10, 217.703 9, 926.951 9, 642.424 10, 188.277 9, 293.747 10, 686.705 10, 325.299 10, 575.492 9, 938.870 9, 088.943 10, 470.400 10, 721.035 9, 486.884 10, 057.720 10, 107.471 10, 180.376 10, 037.924 9, 333.726 9, 597.914 9, 384.258 10, 375.208 10, 439.908 9, 772.930 10, 564.641 9, 073.236 10, 472.157 9, 851.281 10, 159.474 10, 339.502 10, 754.232 9, 951.431 9, 932.216
Lama Simulasi 2 × 10 3 × 105 4 × 105 20, 544.847 31, 097.887 41, 257.101 19, 800.840 29, 799.183 40, 000.848 19, 621.173 29, 943.285 40, 274.402 20, 062.599 29, 781.445 39, 811.909 18, 760.158 28, 248.875 38, 055.977 20, 558.959 30, 352.176 40, 548.156 20, 587.664 31, 091.364 41, 425.665 20, 389.201 29, 997.815 39, 665.741 20, 154.175 30, 445.574 40, 807.871 17, 943.986 27, 655.806 37, 611.195 20, 103.038 29, 743.330 39, 350.888 20, 538.008 30, 503.732 40, 367.700 19, 284.089 29, 184.846 38, 990.021 19, 919.717 29, 797.440 40, 163.520 20, 340.444 30, 373.419 40, 446.455 20, 272.720 30, 621.041 40, 697.358 20, 000.725 30, 074.832 40, 138.430 19, 073.262 28, 840.677 38, 703.554 19, 691.047 29, 682.335 39, 718.228 19, 288.251 29, 307.144 39, 529.531 20, 397.096 30, 303.996 40, 300.177 20, 748.883 31, 013.910 41, 000.361 19, 844.679 29, 784.536 39, 605.375 20, 519.793 30, 472.177 40, 538.476 19, 341.473 29, 378.194 39, 405.868 20, 688.477 30, 749.060 41, 031.558 19, 669.563 29, 450.849 39, 317.306 20, 265.239 30, 392.747 40, 365.921 20, 436.534 30, 166.482 39, 861.863 20, 877.314 30, 922.541 40, 968.037 19, 471.884 28, 953.828 38, 537.879 20, 067.624 30, 147.206 40, 368.726 5
369
5 × 105 51, 298.765 50, 221.997 50, 446.730 49, 798.162 48, 104.948 50, 484.054 51, 473.912 49, 443.070 51, 196.985 47, 660.719 49, 103.330 50, 450.935 48, 964.700 50, 487.922 50, 376.444 50, 769.607 50, 162.875 48, 537.121 49, 731.680 49, 765.507 50, 234.750 50, 887.751 49, 379.240 50, 668.280 49, 412.950 51, 327.369 49, 363.857 50, 197.372 49, 599.023 50, 904.036 48, 268.251 50, 488.485
Tabel B.70 Mean Simulasi Kelima di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
1 × 105 10, 774.142 10, 084.502 10, 527.405 9, 970.017 10, 255.099 10, 131.476 10, 606.241 10, 033.655 9, 213.257 10, 327.112 10, 026.656 10, 206.352 9, 896.764 10, 206.296 10, 124.894 10, 039.969 9, 860.006 10, 655.363 10, 237.473 10, 559.992 10, 500.129 9, 830.813 9, 305.076 9, 938.633 10, 399.258 9, 777.949 10, 373.887 9, 583.882 10, 411.048 9, 847.998 9, 362.409 10, 041.147
2 × 105 21, 436.416 19, 705.802 20, 291.807 19, 881.634 19, 923.024 20, 036.324 20, 553.937 20, 412.864 19, 213.478 20, 386.919 20, 461.174 20, 133.401 19, 603.485 20, 371.678 20, 073.503 19, 800.665 19, 329.457 20, 828.341 19, 877.835 20, 463.032 19, 951.557 19, 461.982 19, 024.800 19, 913.123 20, 150.650 19, 320.295 20, 363.932 19, 689.788 20, 584.707 19, 602.366 19, 141.333 19, 825.073
Lama Simulasi 3 × 105 4 × 105 31, 919.881 42, 354.238 29, 495.975 39, 192.043 29, 926.872 39, 370.995 29, 898.840 39, 938.123 29, 831.419 39, 829.800 29, 995.291 39, 925.107 30, 241.757 39, 818.008 30, 351.594 40, 268.211 29, 502.833 39, 544.170 30, 111.148 39, 947.341 30, 644.919 40, 430.031 30, 251.323 40, 361.927 29, 723.265 39, 630.185 30, 751.519 41, 029.236 30, 349.935 40, 520.071 29, 996.671 40, 157.571 29, 098.731 39, 056.793 30, 861.532 40, 765.136 29, 641.563 39, 449.267 30, 485.047 40, 850.463 29, 934.621 40, 143.853 29, 666.557 39, 834.795 28, 570.373 37, 981.352 29, 729.050 39, 599.691 30, 431.420 40, 834.027 29, 259.669 39, 202.139 29, 870.363 39, 408.713 29, 647.772 39, 667.047 30, 932.383 41, 304.884 29, 180.400 39, 220.209 28, 756.748 38, 460.926 29, 619.573 39, 419.219
370
5 × 105 52, 752.742 49, 023.955 48, 860.375 49, 910.197 49, 912.149 49, 812.362 49, 698.898 50, 659.508 49, 428.550 50, 060.633 50, 313.443 50, 491.864 49, 518.126 51, 141.019 50, 772.497 50, 208.957 49, 012.418 50, 767.756 49, 288.758 51, 120.418 50, 267.919 49, 855.867 47, 465.025 49, 474.472 51, 109.969 49, 041.319 48, 879.418 49, 756.146 51, 477.757 49, 524.500 48, 384.359 49, 501.811
Tabel B.71 Maksimum Simulasi Kelima di Jalur 1 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 20, 605 41, 162 62, 411 81, 923 19, 743 39, 665 60, 574 80, 916 19, 540 40, 333 61, 744 81, 390 20, 085 40, 207 59, 363 79, 758 19, 046 37, 568 57, 105 77, 350 21, 014 39, 754 60, 235 81, 326 20, 295 41, 622 62, 600 82, 014 20, 846 39, 177 58, 708 78, 333 20, 054 40, 833 61, 837 82, 037 17, 504 37, 078 57, 072 77, 608 20, 545 39, 241 58, 567 78, 136 20, 784 40, 384 59, 831 80, 513 19, 088 39, 421 57, 853 78, 739 19, 743 38, 929 60, 325 81, 814 20, 599 40, 213 60, 712 80, 569 19, 988 41, 509 61, 091 80, 694 20, 200 39, 981 60, 459 80, 425 19, 165 38, 531 58, 851 78, 119 19, 518 40, 049 59, 787 80, 310 19, 380 39, 412 59, 647 80, 769 20, 686 39, 943 61, 019 79, 853 20, 928 41, 989 61, 162 80, 600 19, 843 40, 156 59, 618 78, 244 20, 682 40, 659 60, 542 81, 025 19, 047 39, 515 59, 883 80, 087 20, 551 40, 512 61, 200 82, 556 19, 229 39, 274 58, 715 79, 317 20, 516 41, 029 60, 415 79, 888 20, 707 40, 055 58, 765 78, 693 21, 439 41, 187 60, 944 80, 989 19, 432 38, 160 57, 610 77, 656 19, 721 39, 890 61, 071 81, 097
371
5 × 105 101, 321 101, 254 101, 098 99, 913 99, 050 99, 509 100, 868 98, 751 103, 681 98, 954 98, 628 101, 773 99, 555 101, 553 99, 689 101, 057 100, 271 98, 278 99, 587 100, 703 99, 855 100, 766 98, 314 101, 196 99, 835 102, 044 99, 532 99, 586 98, 703 101, 013 97, 215 101, 130
Tabel B.72 Maksimum Simulasi Kelima di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 21, 683 42, 587 63, 372 83, 883 19, 621 39, 293 58, 428 78, 773 20, 456 39, 526 58, 815 77, 219 19, 953 40, 027 59, 727 80, 353 20, 012 39, 941 59, 295 80, 407 19, 991 40, 252 59, 615 79, 073 20, 623 39, 952 59, 306 78, 540 20, 439 40, 389 60, 024 81, 230 18, 494 39, 332 60, 417 79, 178 20, 750 39, 915 59, 296 80, 343 20, 465 41, 091 60, 313 79, 642 20, 433 40, 200 60, 672 80, 848 19, 627 39, 481 59, 619 78, 497 19, 651 41, 366 61, 804 81, 804 20, 212 40, 658 60, 576 81, 466 19, 538 39, 603 60, 803 80, 790 19, 415 38, 571 58, 952 78, 924 21, 560 41, 171 60, 778 80, 518 19, 283 39, 897 59, 381 78, 346 20, 833 40, 553 60, 830 82, 493 19, 746 39, 465 60, 028 81, 107 19, 595 39, 745 60, 202 79, 439 18, 896 38, 382 57, 441 75, 289 19, 810 39, 288 59, 152 79, 262 19, 854 40, 473 61, 986 82, 343 18, 611 39, 110 59, 231 78, 820 20, 185 39, 985 58, 296 77, 621 19, 696 39, 746 60, 096 79, 309 20, 616 41, 180 62, 046 82, 128 20, 160 38, 805 58, 609 80, 150 19, 429 38, 270 57, 657 77, 717 19, 304 39, 773 57, 831 79, 189
5 × 105 104, 694 97, 326 96, 493 99, 618 99, 800 99, 800 100, 116 102, 208 99, 548 100, 857 100, 102 101, 291 99, 052 101, 631 101, 832 100, 303 98, 321 101, 371 99, 184 102, 112 100, 183 100, 663 95, 002 98, 452 102, 399 98, 021 96, 609 100, 445 102, 003 100, 805 98, 517 100, 311
Tabel B.73 Waktu Komputasi Simulasi Kelima Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 23.719 9 23.735 10 23.735 11 23.718 12 23.781 13
Waktu Uji ke 23.750 17 23.750 18 23.766 19 25.437 20 25.719 21
372
Waktu Uji ke 23.672 25 23.828 26 23.703 27 23.781 28 23.703 29
Waktu 23.687 23.719 23.672 23.687 23.656
Uji ke 6 7 8
Waktu Uji ke 23.719 14 23.734 15 23.735 16
Waktu Uji ke 25.234 22 23.703 23 23.687 24
Waktu Uji ke 24.219 30 23.734 31 23.703 32
Waktu 23.688 23.687 23.719
Tabel B.74 Mean Simulasi Keenam di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 20.925 21.008 21.057 21.107 20.978 2 20.797 20.809 20.771 20.706 20.764 3 21.091 21.054 20.972 20.987 20.965 4 20.494 20.753 20.967 20.965 21.065 5 20.612 20.654 20.987 20.933 20.807 6 21.407 21.008 21.014 20.944 20.911 7 20.592 20.483 20.566 20.678 20.697 8 21.435 21.092 21.037 21.050 20.884 9 20.930 20.663 20.731 20.868 20.850 10 21.174 21.211 21.122 20.970 20.887 11 21.105 20.771 20.695 20.825 20.862 12 20.780 20.693 20.999 20.937 20.883 13 21.412 21.026 20.868 20.758 20.833 14 20.782 20.596 20.859 20.828 20.764 15 21.344 21.245 21.100 21.250 21.213 16 20.869 20.816 20.717 20.717 20.616 17 20.937 20.860 20.798 20.897 20.834 18 20.751 20.707 20.862 20.657 20.780 19 20.763 21.084 20.974 20.970 20.958 20 21.107 20.890 20.803 20.836 20.878 21 21.022 20.762 20.756 20.750 20.814 22 21.095 21.018 20.930 21.007 21.000 23 20.667 20.578 20.691 20.765 20.835 24 19.846 20.605 20.705 20.621 20.696 25 20.659 20.741 20.590 20.615 20.617 26 21.025 21.142 21.241 21.288 21.300 27 21.046 20.924 20.963 20.994 20.901 28 20.897 20.895 20.718 20.858 21.011 29 21.078 21.065 21.086 20.869 20.791 30 20.834 20.817 20.802 20.770 20.780 31 21.107 20.788 21.003 20.920 20.782 32 20.611 20.711 20.751 20.808 20.949
373
Tabel B.75 Mean Simulasi Keenam di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 21.329 21.082 21.100 21.189 21.058 20.732 20.530 20.617 20.588 20.656 21.244 21.392 21.127 21.080 21.039 20.443 20.678 20.958 20.961 21.043 20.584 20.683 20.836 20.826 20.766 21.181 21.083 21.086 21.021 20.956 20.814 20.715 20.597 20.783 20.792 21.456 21.156 21.055 21.093 20.963 21.028 20.699 20.689 20.811 20.762 21.480 21.305 21.094 21.021 20.960 21.126 20.799 20.798 20.941 20.920 20.868 20.757 20.975 20.978 20.847 21.359 21.015 20.823 20.779 20.829 20.826 20.765 20.818 20.759 20.742 21.081 21.247 21.119 21.142 21.171 20.775 20.527 20.569 20.615 20.572 20.690 20.614 20.644 20.669 20.639 20.638 20.849 20.996 20.802 20.892 20.797 21.005 20.919 20.914 20.912 20.743 20.499 20.615 20.702 20.768 20.898 20.613 20.659 20.648 20.782 21.729 21.317 21.223 21.227 21.144 20.567 20.650 20.745 20.859 20.902 19.915 20.530 20.797 20.739 20.744 20.675 20.721 20.599 20.568 20.600 21.220 21.150 21.285 21.220 21.148 20.714 20.601 20.705 20.836 20.802 21.164 20.957 20.789 20.980 21.096 20.927 20.943 20.946 20.779 20.731 20.601 20.719 20.872 20.818 20.784 21.076 20.975 21.114 21.015 20.899 20.957 20.976 20.930 20.943 21.100
374
Tabel B.76 Maksimum Simulasi Keenam di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 91 109 109 109 109 2 100 105 137 137 137 3 110 110 110 110 110 4 100 107 107 112 117 5 90 90 107 107 107 6 107 107 107 107 107 7 96 96 96 109 109 8 136 136 136 136 136 9 115 115 122 122 122 10 113 113 113 113 113 11 112 112 112 112 112 12 103 103 115 115 115 13 108 108 108 108 110 14 93 95 116 116 116 15 117 117 130 130 130 16 93 110 117 117 117 17 104 104 115 115 115 18 101 101 118 118 118 19 91 97 102 103 110 20 118 118 118 118 138 21 111 111 111 123 123 22 93 93 93 96 106 23 112 112 112 112 112 24 91 111 111 111 111 25 100 102 103 105 105 26 97 127 127 127 127 27 129 129 129 129 129 28 96 96 96 104 104 29 95 115 115 115 120 30 125 125 125 125 125 31 107 107 111 111 111 32 96 98 98 111 111
375
Tabel B.77 Maksimum Simulasi Keenam di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Lama Simulasi 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 110 110 110 110 110 96 96 103 103 103 105 118 118 118 118 92 93 105 105 105 93 94 96 96 96 127 127 127 127 127 110 110 110 110 110 103 103 104 104 107 100 100 100 120 120 91 92 92 144 144 120 120 120 120 120 92 92 129 129 129 106 106 106 109 109 116 116 116 116 116 102 107 109 109 156 104 104 104 110 110 119 119 126 126 126 99 111 111 111 111 87 111 112 112 115 95 95 95 127 127 99 125 125 125 125 96 96 97 123 123 92 102 102 102 102 87 98 112 112 112 113 113 113 113 113 125 125 125 125 125 112 112 112 115 115 97 97 97 103 103 100 100 100 102 102 96 105 105 110 110 106 106 132 132 132 89 100 100 116 117
Tabel B.78 Waktu Komputasi Simulasi Keenam Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 26.063 9 26.281 10 26.047 11 26.031 12 26.078 13
Waktu Uji ke 26.079 17 26.062 18 26.016 19 26.062 20 26.016 21
376
Waktu Uji ke 26.125 25 26.188 26 26.110 27 26.266 28 26.188 29
Waktu 26.094 26.000 26.094 26.016 26.047
Uji ke 6 7 8
Waktu Uji ke 26.016 14 26.109 15 26.000 16
Waktu Uji ke 26.078 22 26.016 23 26.110 24
Waktu Uji ke 26.047 30 26.109 31 26.047 32
Waktu 26.000 26.109 26.078
Tabel B.79 Mean Simulasi Ketujuh di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 8.949 8.883 8.902 8.753 8.788 2 8.596 8.487 8.625 8.661 8.597 3 8.702 8.749 8.680 8.640 8.591 4 8.588 8.616 8.616 8.678 8.744 5 8.685 8.643 8.569 8.601 8.512 6 8.678 8.550 8.568 8.570 8.555 7 9.035 8.662 8.778 8.750 8.777 8 8.565 8.414 8.529 8.606 8.539 9 8.740 8.634 8.559 8.633 8.650 10 8.623 8.678 8.567 8.530 8.530 11 9.008 8.759 8.740 8.769 8.765 12 8.367 8.507 8.506 8.533 8.529 13 8.858 8.725 8.726 8.757 8.688 14 8.698 8.769 8.744 8.743 8.743 15 8.475 8.490 8.587 8.600 8.537 16 8.672 8.825 8.743 8.748 8.767 17 8.428 8.554 8.496 8.566 8.557 18 8.838 8.768 8.774 8.754 8.696 19 8.846 8.525 8.554 8.583 8.564 20 8.704 8.584 8.565 8.513 8.493 21 8.407 8.758 8.691 8.643 8.675 22 8.874 8.742 8.664 8.693 8.645 23 8.490 8.728 8.803 8.840 8.825 24 8.628 8.786 8.772 8.730 8.730 25 8.727 8.656 8.627 8.684 8.656 26 8.502 8.601 8.598 8.632 8.614 27 8.689 8.650 8.654 8.633 8.541 28 8.643 8.639 8.622 8.655 8.623 29 8.278 8.255 8.388 8.436 8.393 30 8.709 8.697 8.695 8.647 8.664 31 8.979 8.893 8.734 8.747 8.700 32 8.581 8.526 8.577 8.541 8.557
377
Tabel B.80 Mean Simulasi Ketujuh di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 8.997 8.599 8.633 8.703 8.643 8.686 8.932 8.635 8.661 8.619 8.912 8.415 8.822 8.817 8.369 8.723 8.361 8.805 8.833 8.718 8.423 8.815 8.481 8.649 8.698 8.471 8.788 8.682 8.250 8.608 8.873 8.642
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 8.922 8.876 8.744 8.775 8.462 8.586 8.643 8.586 8.732 8.671 8.630 8.582 8.657 8.608 8.645 8.719 8.615 8.550 8.602 8.516 8.568 8.567 8.589 8.585 8.618 8.758 8.753 8.788 8.470 8.550 8.633 8.579 8.551 8.480 8.555 8.592 8.642 8.554 8.511 8.536 8.696 8.673 8.696 8.720 8.590 8.550 8.564 8.559 8.686 8.671 8.731 8.669 8.851 8.797 8.763 8.747 8.415 8.547 8.568 8.507 8.864 8.753 8.773 8.782 8.491 8.479 8.548 8.556 8.800 8.803 8.757 8.696 8.520 8.518 8.567 8.568 8.597 8.585 8.524 8.510 8.772 8.683 8.604 8.621 8.710 8.651 8.707 8.646 8.715 8.775 8.819 8.815 8.792 8.802 8.759 8.756 8.621 8.589 8.697 8.651 8.546 8.575 8.620 8.592 8.677 8.651 8.619 8.534 8.591 8.593 8.637 8.609 8.259 8.378 8.430 8.400 8.643 8.652 8.602 8.632 8.885 8.761 8.774 8.720 8.562 8.611 8.576 8.599
378
Tabel B.81 Maksimum Simulasi Ketujuh di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 61 61 61 61 68 2 55 56 56 67 67 3 55 59 69 69 69 4 60 61 61 61 61 5 60 65 65 65 65 6 64 64 64 64 64 7 75 75 75 75 75 8 54 54 61 63 63 9 64 64 64 68 68 10 55 61 65 65 69 11 68 68 70 70 70 12 61 61 61 65 65 13 55 64 64 64 64 14 66 66 66 73 73 15 56 59 65 71 71 16 57 61 63 63 63 17 64 67 67 67 67 18 70 70 70 70 70 19 61 61 61 62 62 20 60 60 60 60 62 21 65 65 70 70 70 22 58 58 58 58 58 23 57 57 57 66 66 24 61 61 62 62 62 25 58 58 58 58 58 26 57 66 66 66 66 27 58 58 62 62 67 28 55 56 73 73 73 29 62 62 62 62 62 30 62 62 62 62 64 31 56 72 72 72 72 32 59 66 66 66 66
379
Tabel B.82 Maksimum Simulasi Ketujuh di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 54 55 58 66 64 69 69 53 67 56 59 58 53 61 59 58 57 62 53 60 63 61 64 60 55 56 65 58 51 60 58 56
Lama Simulasi 2 × 105 3 × 105 4 × 105 62 63 73 55 62 74 65 72 72 67 67 67 66 66 66 69 69 75 69 69 69 53 66 66 67 67 67 62 63 63 70 70 72 62 62 62 57 62 62 64 64 64 61 69 69 59 59 70 72 72 72 62 64 64 53 59 62 61 61 61 63 70 70 61 61 69 64 68 68 60 72 72 55 55 55 60 63 63 65 65 65 58 73 73 62 62 62 68 68 68 70 70 70 64 64 64
5 × 105 73 74 72 67 66 75 69 66 67 63 72 62 62 64 69 70 72 64 62 74 70 69 68 72 63 68 65 73 62 68 70 64
Tabel B.83 Waktu Komputasi Simulasi Ketujuh Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 27.297 9 27.250 10 27.312 11 27.234 12 27.328 13
Waktu Uji ke 27.313 17 27.282 18 27.329 19 27.250 20 27.203 21
380
Waktu Uji ke 27.297 25 27.297 26 27.328 27 27.359 28 27.250 29
Waktu 27.297 27.312 27.391 27.234 27.328
Uji ke 6 7 8
Waktu Uji ke 27.406 14 27.235 15 27.281 16
Waktu Uji ke 27.281 22 27.297 23 27.172 24
Waktu Uji ke 27.328 30 27.219 31 27.234 32
Waktu 27.235 27.265 27.312
Tabel B.84 Mean Simulasi Kedelapan di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi ke 1 × 105 2 × 105 3 × 105 4 × 105 5 × 105 1 57.460 33.377 25.378 21.465 19.131 2 66.732 38.078 28.804 23.925 21.040 3 53.913 31.791 24.520 20.776 18.571 4 48.596 29.038 22.590 19.376 17.396 5 51.134 30.391 23.458 20.190 18.211 6 53.895 31.799 24.396 20.646 18.368 7 59.900 34.565 26.144 21.861 19.368 8 51.216 30.060 23.167 19.634 17.621 9 62.158 35.943 27.178 22.571 19.954 10 45.616 27.354 21.362 18.372 16.634 11 81.693 45.669 33.441 27.572 24.030 12 42.097 25.805 20.436 17.637 15.990 13 66.019 37.485 28.115 23.722 20.862 14 47.473 28.574 22.307 19.280 17.319 15 68.146 39.095 29.223 24.291 21.317 16 68.143 38.647 29.140 24.220 21.251 17 56.885 33.261 25.246 21.307 18.946 18 59.119 34.447 26.031 21.953 19.442 19 42.533 26.292 20.843 18.239 16.450 20 51.407 30.380 23.371 19.838 17.760 21 62.848 36.098 27.159 22.881 20.108 22 67.478 38.339 28.629 23.927 21.173 23 58.111 33.750 25.573 21.680 19.342 24 71.266 40.197 29.948 24.775 21.740 25 71.109 40.214 29.807 25.095 21.990 26 54.238 31.880 24.348 20.698 18.494 27 67.725 38.559 28.896 24.230 21.306 28 49.638 29.473 22.837 19.577 17.592 29 63.820 36.786 27.757 23.175 20.421 30 61.381 35.430 26.734 22.588 20.033 31 63.540 36.567 27.505 22.936 20.140 32 65.179 37.663 28.212 23.390 20.593
381
Tabel B.85 Mean Simulasi Kedelapan di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 78.542 56.461 50.524 63.588 64.805 47.431 52.970 71.237 60.181 64.480 66.661 74.047 84.062 40.532 61.652 67.430 54.034 59.668 45.246 79.661 49.388 59.476 74.073 80.819 49.238 58.455 88.144 49.003 55.288 77.248 75.018 46.830
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 43.951 32.405 26.796 23.417 33.055 25.537 21.489 19.052 30.017 23.310 19.866 17.832 36.557 27.491 23.054 20.385 37.154 28.114 23.759 21.031 28.493 22.245 19.036 17.046 31.040 23.713 20.100 17.927 40.117 29.841 24.644 21.609 34.825 26.445 22.054 19.550 36.884 27.594 23.069 20.447 38.088 28.359 23.807 20.928 42.006 31.321 25.850 22.643 46.552 34.057 28.095 24.346 25.155 20.133 17.573 15.946 35.846 27.120 22.900 20.230 38.203 28.871 24.042 21.122 31.640 24.241 20.531 18.313 34.714 26.282 22.160 19.588 27.751 21.703 18.725 16.888 44.520 32.775 26.963 23.498 29.391 22.757 19.578 17.487 34.313 25.975 21.933 19.584 41.591 30.821 25.540 22.514 44.914 33.024 27.034 23.594 29.255 22.609 19.628 17.640 34.007 25.718 21.705 19.303 48.827 35.747 29.448 25.536 29.110 22.602 19.279 17.368 32.407 24.761 21.030 18.738 43.410 32.109 26.559 23.208 42.330 31.429 25.894 22.542 28.426 22.084 18.786 16.907
382
Tabel B.86 Maksimum Simulasi Kedelapan di Jalur 1 Berdistribusi Uniform Uji Lama Simulasi 5 ke 1 × 10 2 × 105 3 × 105 4 × 105 5 × 105 1 1, 000 75 76 72 95 2 1, 015 76 87 74 83 3 1, 000 71 79 78 69 4 1, 001 65 76 69 67 5 1, 002 86 82 94 80 6 1, 000 76 83 85 74 7 1, 003 94 81 72 68 8 1, 000 64 76 68 69 9 1, 007 71 71 61 79 10 1, 002 62 86 83 69 11 1, 000 99 72 97 88 12 1, 026 90 76 63 66 13 1, 020 66 73 92 76 14 1, 000 79 83 108 72 15 1, 006 87 72 70 64 16 1, 000 68 110 70 88 17 1, 002 85 68 83 74 18 1, 020 77 78 74 64 19 1, 000 89 85 137 70 20 1, 015 64 91 73 85 21 1, 044 91 87 90 63 22 1, 010 70 78 84 84 23 1, 013 101 76 101 81 24 1, 039 78 77 77 79 25 1, 006 88 69 117 70 26 1, 001 103 69 83 97 27 1, 011 76 71 79 85 28 1, 006 66 81 101 76 29 1, 000 76 80 72 70 30 1, 038 82 76 81 81 31 1, 008 93 76 69 61 32 1, 003 79 63 97 64
383
Tabel B.87 Maksimum Simulasi Kedelapan di Jalur 2 Berdistribusi Uniform Uji ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
5
1 × 10 1, 066 1, 015 1, 016 1, 019 1, 039 1, 029 1, 020 1, 063 1, 029 1, 032 1, 047 1, 018 1, 078 1, 020 1, 068 1, 040 1, 023 1, 020 1, 040 1, 084 1, 023 1, 037 1, 012 1, 030 1, 019 1, 019 1, 042 1, 040 1, 018 1, 087 1, 020 1, 028
Lama Simulasi 2 × 105 3 × 105 4 × 105 5 × 105 93 64 100 106 94 88 68 71 76 81 78 71 73 65 62 79 102 72 92 82 89 91 81 78 68 73 94 57 72 72 62 70 66 71 72 101 70 71 77 87 75 72 100 66 98 89 100 94 78 68 76 70 81 90 79 79 96 69 162 75 66 96 73 77 70 68 62 71 80 90 83 72 100 61 108 84 61 70 75 96 75 89 83 66 86 71 77 84 65 66 103 113 59 72 68 112 58 100 88 88 77 62 83 102 68 63 129 78 68 84 67 81 69 67 84 85 95 95 78 86 70 95 75 84 96 78 81 56
Tabel B.88 Waktu Komputasi Simulasi Kedelapan Berdistribusi Uniform Uji ke 1 2 3 4 5
Waktu Uji ke 26.859 9 26.859 10 26.953 11 26.953 12 26.938 13
Waktu Uji ke 26.968 17 27.047 18 27.000 19 27.000 20 26.906 21
384
Waktu Uji ke 26.984 25 26.969 26 26.984 27 26.953 28 26.953 29
Waktu 26.954 27.016 27.000 27.000 26.969
Uji ke 6 7 8
Waktu Uji ke 27.031 14 27.031 15 27.000 16
Waktu Uji ke 26.875 22 26.984 23 26.953 24
385
Waktu Uji ke 26.953 30 26.922 31 26.969 32
Waktu 26.860 27.047 27.015
386
DAFTAR PUSTAKA Allen, Linda J.S., (2003), An Introduction to Stochastic Processes with Applications to Biology, Pearson Education Inc, New Jersey. Cassandras, C.G., (1993), Discrete Event Systems: Modelling and Performance Analysis, Aksen Associates Incorporated Publishers, Boston. De Schutter, B. dan De Moor, B., (1998), ”Optimal traffic light control for a single intersection,” European Journal of Control, vol. 4, no. 3, pp. 260-276. Hanzalek, Z., Kutil, M., dan Cervin, A., (2006), ”Balancing the waiting times in a simple traffic intersection model”, IFAC. Shaffer, C.A., (1998), A Practical Introduction to Data Structures and Algorithm Analysis, Prentice Hall Inc., New Jersey.
387