IV-1
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.
(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 COUNT-VOTE. 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.
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.
(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 )
(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 )
(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
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
(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 )
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 )
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 )
(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.
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
Pengguna
Kelas
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
Sementara
Agen Penghitung CounterCountResultBehaviour
6 Melayani Permintaan Mengirimkan Hasil Sementara
Agen Penghitung AskedNewResultBehaviour
7 Memungut suara dan mengirimkannya ke agen penghitung
Agen Pemungut CollectorBehaviour
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
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
Dihitung
Predikat VoteCounted ontology.predicate
8 Minta Hasil Baru Aksi AskNewResult ontology.action
9 Hitung Suara Baru Aksi CountVote ontology.action
10 Hitung Hasil
Sementara
Aksi CountResult ontology.action
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.
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
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
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
viour
AggregatorCountNewResultBehaviour. java
voting.agent.behaviour
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
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