Bab IV Perancangan dan Implementasi 4.1
Perancangan Pesan antar Agen
Perancangan pesan dalam sistem ini dibutuhkan untuk menjamin komunikasi antara agen dapat berjalan dengan baik dan seefektif mungkin. Komunikasi yang diterapkan pada perangkat lunak nantinya merupakan modifikasi dari protokol yang ditetapkan oleh FIPA, yaitu FIPA request, karena interaksi yang dilakukan antar agen merupakan interaksi yang meminta agen lainnya melakukan suatu aksi. Modifikasi dilakukan sehubungan dengan kebutuhan sistem untuk menangani bahwa data penting dalam pesan yang harus dipastikan sampai kepada agen penerima. Pada protokol FIPA request, aksi dapat saja gagal dilakukan meskipun agen penerima telah mengirimkan pesan agree. Modifikasi dilakukan untuk mengatasi masalah tersebut. Protokol interaksi antar agen dapat dilihat pada subbab 3.4.1 Interaksi yang ada pada perangkat lunak terdiri atas dua macam interaksi, yaitu interaksi antara agen pemungut dan agen penghitung dan interaksi antara agen penumpul dan agen penghitung. JADE menyediakan mekanisme untuk mengelola komunikasi antar agen. JADE menyediakan sebuah kelas, yaitu jade.lang.acl.ACLMessage yang dapat dimanipulasi untuk membentuk pesan yang akan dikirimkan. Setelah pesan ini diterima oleh agen, maka pesan diletakkan pada antrian pesan yang akan diproses oleh agen. Agen mengambil satu persatu pesan dari antrian ini untuk diproses. Pesan yang akan diproses juga dapat disaring berdasarkan field tertentu, misalkan pengirim, communicative acts ataupun field lainnya.
4.1.1 Interaksi Agen Penghitung Dengan Agen Pemungut. Terdapat satu jenis interaksi antara agen penghitung dan agen pemungut, yaitu interaksi dari agen pemungut untuk meminta agen penghitung menghitung suara yang baru didapat oleh agen pemungut. Interaksi antara agen pemungut dan agen penghitung terdiri dari beberapa langkah, sesuai dengan penjelasan pada subbab 3.4.1.1 langkah pertama agen pemungut mengirimkan request pada salah satu agen penghitung untuk melakukan penghitungan. Pesan request ini memiliki content sebagai aksi yang diminta. Pesan ini dapat dilihat dalam Pesan IV-1. IV-1
IV-2 (REQUEST :sender (agent-identifier :name cl1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CollectorAgent ) :receiver (set (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) ) ) :content "((action (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc) ) (COUNT-VOTE) ))" :reply-with 1189568271468 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-1 Request penghitungan Suara
Pada Pesan IV-1, dapat dilihat bahwa teks pertama yang tertulis ialah REQUEST, bagian ini menjelaskan communicative act dari pesan tersebut yang bermakna pesan ini ialah pesan yang meminta agen penerima melakukan suatu aksi tertentu. Selain communicative act terdapat sejumlah field lainnya, pertama ialah field :sender yang menyatakan identitas agen
pengirim,
di
mana
pada
pesan
tersebut
pengirim
adalah
agen
bernama
cl1@Reca:1099/JADE dengan alamat di http://167.205.35.156:7778/acc dan merupakan instans dari kelas voting.agent.CollectorAgent. Field berikutnya, :receiver, menyatakan identitas agen penerimanya. Field :content ialah isi dari pesan, di sini isi dari pesan ialah aksi yang akan dilakukan oleh agen penerima, yaitu aksi COUNTVOTE. Field :reply-with berguna sebagai identitas dari percakapan agen dan digunakan sebagai penyaring dalam memproses pesan balasan yang akan masuk. Field :language berisi bahasa yang digunakan dalam mengodekan isi pesan dan field :ontology menyatakan ontologi pesan yang digunakan.
IV-3 Jika agen penghitung memutuskan untuk menolak proses penghitungan suara dari agen pemungut, maka agen penghitung akan mengirimkan pesan failure seperti terlihat pada Pesan IV-2. (FAILURE :sender (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name cl1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CollectorAgent ) ) :reply-with 1189568271468 :in-reply-to 1189568271468 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-2 Pesan Gagal Memenuhi Request
Jika agen penghitung memutuskan untuk menerima proses penghitungan suara dari agen pemungut, maka agen penghitung akan mengirimkan pesan agree sebagaimana terlihat pada Pesan IV-3: Jika agen pemungut mendapatkan pesan agree, maka ia akan mengirimkan pesan inform untuk mengirimkan isi suara yang akan dihitung oleh agen penghitung. Pesan yang bersangkutan dapat dilihat pada Pesan IV-4 Terakhir, agen penghitung akan mengirimkan pesan inform yang berisi predikat pesan telah dihitung, seperti terlihat pada Pesan IV-5. Setelah pesan ini dikirim oleh agen penghitung dan diterima oleh agen pemungut, maka satu interaksi antara kedua agen selesai.
IV-4 (AGREE :sender (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name cl1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CollectorAgent ) ) :reply-with 1189568271468 :in-reply-to 1189568271468 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-3 Pesan Setuju Melakukan Request
IV-5 (INFORM :sender ( agent-identifier :name cl1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CollectorAgent ) :receiver (set ( agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) ) :content "((SEND-VOTE (VOTE :candidateList (sequence (CANDIDATE :ordinal 4 :name empat ) (CANDIDATE :ordinal 2 :name dua ) (CANDIDATE :ordinal 1 :name satu ) (CANDIDATE :ordinal 3 :name tiga ) ) ) ))" :reply-with 1189568271468 :in-reply-to 1189568271468 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-4 Inform Suara
IV-6 (INFORM :sender (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set (agent-identifier :name cl1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc) :X-JADE-agent-classname voting.agent.CollectorAgent ) ) :content "((VOTE-COUNTED (VOTE :candidateList (sequence (CANDIDATE :ordinal 4 :name empat) (CANDIDATE :ordinal 2 :name dua) (CANDIDATE :ordinal 1 :name satu) (CANDIDATE :ordinal 3 :name tiga) ) ) ))" :reply-with 1189568271468 :in-reply-to 1189568271468 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-5 Inform Suara Telah Dihitung
4.1.2 Interaksi Agen Pengumpul Dengan Agen Penghitung. Terdapat dua jenis interaksi antara agen pengumpul dengan agen penghitung, yang pertama yaitu interaksi dari agen pengumpul untuk meminta agen penghitung memberikan informasi hasil perhitungan voting sementara yang dimiliki agen tersebut atau dengan kata lain mengumpulkan hasil sementara yang telah dihitung. Interaksi yang kedua ialah agen
IV-7 pengumpul meminta agen penghitung untuk menghitung hasil sementara yang diterima oleh agen pengumpul. 4.1.2.1 Interaksi Mengumpulkan Hasil Sementara Interaksi antara agen pengumpul dengan agen penghitung terdiri dari beberapa langkah, pertama-tama agen pengumpul harus mengirimkan pesan ke beberapa agen penghitung untuk meminta persetujuan pemberian informasi hasil voting sementara. Pesan ini dapat dilihat pada Pesan IV-6. (REQUEST :receiver (set ( agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) ) ) :content "((action (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc) ) (ASK-NEW-RESULT) ))" :reply-with Ask-1189795942828 :language fipa-sl :ontology Voting-Ontology :conversation-id Ask-New-Result ) Pesan IV-6 Request Hasil Baru
Jika agen penghitung menolak untuk memberikan informasi hasil voting sementara, agen penghitung akan mengirimkan pesan failure kepada agen pengumpul, seperti terlihat pada Pesan IV-7 Jika agen penghitung memutuskan untuk menerima permintaan agen pengumpul, agen penghitung akan mengirimkan pesan agree kepada agen pengumpul, seperti terlihat pada Pesan IV-8
IV-8 (FAILURE :sender ( agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name a1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.AggregatorAgent ) ) :reply-with Ask-1189795942828 :in-reply-to Ask-1189795952843 :language fipa-sl :ontology Voting-Ontology :conversation-id Ask-New-Result ) Pesan IV-7 Pesan Kegagalan Memenuhi Request (AGREE :sender (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name a1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.AggregatorAgent ) ) :reply-with Ask-1189795942828 :in-reply-to Ask-1189795942828 :language fipa-sl :ontology Voting-Ontology :conversation-id Ask-New-Result ) Pesan IV-8 Pesan Setuju Memenuhi Request
IV-9 Setelah agen penghitung mengirimkan pesan agree, agen penghitung mengirimkan pesan lagi kepada agen pengumpul yang berisi informasi hasil voting sementara. Setelah menerima pesan hasil voting sementara, agen pengumpul akan menyimpan semua informasi hasil voting sementara yang berasal dari beberapa agen penghitung tersebut. Pesan ini dapat dilihat pada Pesan IV-9 (INFORM :sender ( agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name a1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.AggregatorAgent ) ) :content "((SEND-RESULT (RESULT :table (sequence (SCORE :candidate (CANDIDATE :ordinal 1 :name satu) :point 3.0) (SCORE :candidate (CANDIDATE :ordinal 2 :name dua) :point 1.5) (SCORE :candidate (CANDIDATE :ordinal 3 :name tiga) :point 0.0) ) ) ))" :reply-with Ask-1189795942828 :in-reply-to Ask-1189795942828 :language fipa-sl :ontology Voting-Ontology :conversation-id Ask-New-Result ) Pesan IV-9 Inform Hasil Sementara
IV-10 4.1.2.2 Interaksi Menghitung Hasil Sementara Pada intinya interaksi ini mirip dengan interaksi antara agen pemungut dan agen penghitung pada subbab 4.1.1. Namun pesan request dan inform memiliki content yang berbeda. Selain itu tentu saja perbedaan terletak pada nama agen pengirim dan penerima serta pada field reply-with dan in-reply-to. Pesan request dapat dilihat pada Pesan IV-10 sedangkan pesan inform terlihat seperti pada Pesan IV-11. (REQUEST :sender (agent-identifier :name a1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) :X-JADE-agent-classname voting.agent.AggregatorAgent ) :receiver (set (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc ) ) ) :content "((action (agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://167.205.35.156:7778/acc) ) (COUNT-RESULT) ))" :reply-with 1189568350877 :language fipa-sl :ontology Voting-Ontology ) Pesan IV-10 Request Hitung Suara
IV-11 (INFORM :sender ( agent-identifier :name c1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.CounterAgent ) :receiver (set ( agent-identifier :name a1@Reca:1099/JADE :addresses (sequence http://RECA:7778/acc ) :X-JADE-agent-classname voting.agent.AggregatorAgent ) ) :content "((COUNT-RESULT (RESULT :table (sequence (SCORE :candidate (CANDIDATE :ordinal 1 :name satu) :point 3.0) (SCORE :candidate (CANDIDATE :ordinal 2 :name dua) :point 1.5) (SCORE :candidate (CANDIDATE :ordinal 3 :name tiga) :point 0.0) ) ) ))" :reply-with 1189568350877 :in-reply-to 1189568350877 :language fipa-sl :ontology Voting-Ontology :conversation-id Ask-New-Result ) Pesan IV-11 Inform Hitung Hasil
4.2
Perancangan Perangkat Lunak
Berdasarkan analisis yang telah dilakukan, dapat dilakukan perancangan perangkat lunak untuk sistem voting berbasis sistem multiagen. Perancangan perangkat lunak dilakukan dengan membuat diagram kelas dan perancangan antarmuka.
IV-12
4.2.1 Perancangan Kelas dan Paket Sistem ini terdiri atas tiga paket utama yaitu paket agent, paket behaviours, serta paket ontology. Paket agent berisi kelas-kelas yang merepresentasikan agen-agen yang terlibat dalam sistem ini, yaitu agen pengumpul, agen pemungut dan agen penghitung. Daftar nama agen dan kelas perancangannya dapat dilihat pada Tabel IV-1. Tabel IV-1 Kelas-Kelas Paket Agent
No
Jenis Agen
Kelas
1
Agen Pengumpul
AggregatorAgent
2
Agen Pemungut
CollectorAgent
3
Agen Penghitung
Counter Agent
Paket behaviours terdapat di dalam paket agent, terdiri atas behaviour yang dimiliki oleh agen-agen. Isi dari paket ini dapat dilihat pada Tabel IV-2 Tabel IV-2 Kelas-Kelas Paket Behaviour
No.
Behaviour
Agen
Kelas
Pengguna 1
Mengumpulkan hasil suara
Agen Pengumpul
AggregatorBehaviour
2
Meminta Hitung Hasil
Agen Pengumpul
AggregatorCountNewResultBehaviour
3
Menangani Pesan Masuk
Agen Penghitung
CollectorBehaviour
4
Melayani Permintaan Menghitung Suara
Agen Penghitung
CounterCountVoteBehaviour
5
Melayani Permintaan Menghitung Hasil
Agen Penghitung
CounterCountResultBehaviour
Agen Penghitung
AskedNewResultBehaviour
Agen Pemungut
CollectorBehaviour
Sementara 6
Melayani Permintaan Mengirimkan Hasil Sementara
7
Memungut suara dan mengirimkannya ke agen penghitung
Paket ontology, terdiri atas tiga sub-paket, yaitu concept, action dan predicate, yang masing-masing mewakili komponen ontologi sesuai dengan yang dijelaskan pada subbab 3.4.3. pada perancangannya, isi paket ini dapat dilihat pada Tabel IV-3
IV-13 Tabel IV-3 Kelas-Kelas Paket Ontology
No
ontologi
Jenis ontologi
Kelas
Paket
1
Kandidat
Konsep
Candidate
ontology.concept
2
Hasil Sementara
Konsep
Result
ontology.concept
3
Suara
Konsep
Vote
ontology.concept
4
Nilai
Konsep
Score
ontology.concept
5
Suara Baru
Predikat
SendVote
ontology.predicate
6
Hasil Baru
Predikat
SendNewResult
ontology.predicate
7
Suara Telah
Predikat
VoteCounted
ontology.predicate
Dihitung 8
Minta Hasil Baru
Aksi
AskNewResult
ontology.action
9
Hitung Suara Baru
Aksi
CountVote
ontology.action
10
Hitung Hasil
Aksi
CountResult
ontology.action
Sementara
4.2.2 Perancangan Antarmuka Terdapat tiga antarmuka dalam sistem ini. Antar muka pertama ialah antar muka bagi peserta voting untuk memberikan suara mereka, sedangkan antarmuka lainnya ialah antarmuka bagi admin untuk mengelola kandidat dan melihat hasil voting. 4.2.2.1 Antarmuka Peserta Antarmuka ini berguna bagi peserta untuk memberikan suaranya. Antarmuka bagi peserta dapat dilihat pada Gambar IV-1. Peserta dapat mengatur urutan kandidat pada suaranya dengan memilih salah satu peserta pada daftar peserta dan mengklik tombol up atau down untuk mengubah urutannya pada daftar kandidat. Jika urutan kandidat telah sesuai dengan yang diinginkan, maka peserta harus mengklik tombol vote! Untuk memberikan suaranya. 4.2.2.2 Antarmuka Lihat Hasil Sementara Antarmuka ini berfungsi untuk menampilkan hasil voting sementara kepada admin. Antarmuka untuk melihat hasil sementara dapat dilihat pada Gambar IV-2. Terdapat tabel hasil voting yang terdiri atas kolom kandidat dan kolom nilai.
IV-14 4.2.2.3 Antarmuka Pengelolaan Kandidat Antarmuka ini berguna untuk mempermudah admin dalam mengelola daftar kandidat. Antarmuka Pengelolaan Kandidat dapat dilihat pada Gambar IV-3. Untuk menambahkan kandidat, nama kandidat baru diisi pada field Candidate’s Name lalu mengklik tombol Add Candidate. Kandidat yang baru ditambahkan akan muncul pada daftar kandidat. Untuk menghapus seorang kandidat dari dalam daftar, pilih kandidat yang akan dihapus, lalu klik tombol Remove Candidate. Daftar kandidat juga dapat disimpan ke dalam file dengan mengklik tombol Save, lalu untuk membukanya kembali dapat dilakukan dengan mengklik tombol Load,
Gambar IV-1 Antarmuka Peserta
Gambar IV-2 Antarmuka Lihat Hasil Sementara
Gambar IV-3 Antarmuka Pengelolaan Kandidat
IV-15
4.3
Implementasi Perangkat Lunak
4.3.1 Lingkungan Implementasi Sistem Voting Elektronis Berbasis Sistem Multiagen ini dibangun dalam bahasa pemrograman Java menggunakan framework JADE (Java Agent Development Environment). Pemilihan ini didasari oleh kemampuan Java untuk dijalankan dalam berbagai platform serta ketersediaan dokumentasi yang baik. Sedangkan JADE dipilih karena alasan bahwa JADE memenuhi spesifikasi FIPA. Selain itu perangkat lunak yang digunakan dalam implementasi yaitu Netbeans IDE 5.5 menggunakan Java SDK versi 1.5. Penggunaan Netbeans ialah untuk mempermudah pengkodean dan debugging. Berikut adalah lingkungan perangkat keras yang digunakan selama implementasi : 1. Notebook dengan spesifikasi: a. Prosesor
: AMD Turion 64 2.0 GHz
b. Memori
: 512 MByte
c. Network Adapter
: Realtek RTL8139
2. PC dengan spesifikasi a. Prosesor
: Intel Pentium 4 E 3.0 GHz
b. Memori
: 512 MByte
c. Network Adapter
: Realtek RTL8169/8110
4.3.2 Implementasi Kelas dan Paket Masing-masing kelas diimplementasikan dalam sebuah file java. Kelas-kelas yang terdapat dalam satu paket terletak dalam satu folder dengan nama sesuai dengan paketnya di dalam folder voting/ sebagai folder root-nya. Penjelasan mengenai implementasi kelas dapat dilihat pada Tabel IV-4 dan penjelasan mengenai paket pada Tabel IV-5
IV-16 Tabel IV-4 Implementasi Kelas
No
Kelas
File
Paket
1
AggregatorAgent
AggregatorAgent.java
voting.agent
2
CollectorAgent
CollectorAgent.java
voting.agent
3
CounterAgent
CounterAgent.java
voting.agent
4
AggregatorBehaviour
AggregatorBehaviour.java
voting.agent.behaviour
5
AggregatorCountNewResultBeha
AggregatorCountNewResultBehaviour.
voting.agent.behaviour
viour
java
6
CollectorBehaviour
CollectorBehaviour.java
voting.agent.behaviour
7
CounterAskNewResultBehaviour
CounterAskNewResultBehaviour.java
voting.agent.behaviour
8
CounterBehaviour
CounterBehaviour.java
voting.agent.behaviour
9
CounterCountResultBehaviour
CounterCountResultBehaviour.java
voting.agent.behaviour
10
CounterVoteResultBehaviour
CounterVoteResultBehaviour.java
voting.agent.behaviour
11
VotingOntology
VotingOntology.java
voting.ontology
12
AskNewResult
AskNewResult.java
voting.ontology.action
13
CountResult
CountResult.java
voting.ontology.action
14
CountVote
CountVote.java
voting.ontology.action
15
Candidate
Candidate.java
voting.ontology.concept
16
Result
Result.java
voting.ontology.concept
17
Score
Score.java
voting.ontology.concept
18
Vote
Vote.java
voting.ontology.concept
19
SendNewResult
SendNewResult.java
voting.ontology.predicate
20
SendVote
SendVote.java
voting.ontology.predicate
21
VoteCounted
VoteCounted.java
voting.ontology.predicate
22
CandidatesEditor
CandidatesEditor.java
voting.gui
23
CollectorAgentGUI
CollectorAgentGUI.java
voting.gui
24
ResultGUI
ResultGUI.java
voting.gui
25
AgentCommon
AgentCommon.java
voting.util
IV-17 Tabel IV-5 Implementasi Paket
No
Paket
Folder
1
voting.agent
voting/agen/
2
voting.agent.behaviour
voting/agen/behaviour
3
voting.ontology
voting/ontology
4
voting.ontology.concept
voting/ontology/concept
5
voting.ontology.action
voting/ontology/action
6
voting.ontology.predicate
voting/ontology/predicate
7
voting.gui
voting/gui
8
voting.util
voting/util