# Dokumentasi Program MBKM Riset: Perancangan Prosesor Reinforcement Learning dalam System on Chip ## Identitas Nama: Dismas Widyanto NIM: 13218065 Repository: https://github.com/dismaswidyanto/MBKM Repository berisi file laporan, file desain, file kode, dan file pendukung pribadi lainnya. LinkDrive: https://drive.google.com/drive/u/2/folders/1EIqo_m8GQ5enJUDtouKYiQtjIgJRuBF3 Link drive berisi file proyek kelompok. ## **LOG** Log ini dapat diakses melalui tautan berikut https://hackmd.io/@dismaswidyanto/rkwswSqZF ### Minggu 1 30 Agustus 2021 - 3 September 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| | Senin, 30 Agustus 2021 |Membaca paper "An Efficient Hardware Implementation of Reinforcement Learning: The Q-Learning Algorithm".|Paper ini membahas perangkat keras yang digunakan sebagai implementasi *Reinforcement Learning* dengan *Q-Algorithm*. Arsitektur yang diajukan dalam paper ini memiliki 2 blok utama yaitu *Policy Generator (PG)* dan *Q-Learning accelerator*. Blok *Q-Learning accelerator* terdiri dari blok RAM, MUX, MAX, dan Q-Updater. Dalam paper ini dibahas juga beberapa teknik yang dapat digunakan untuk mengurangi kompleksitas operasi aritmatika.||| ||Memastikan aplikasi Matlab dan Modelsim yang sudah diinstall sebelumnya masih dapat digunakan.|Aplikasi Matlab dan Modelsim dapat dijalankan dan dapat digunakan dengan baik.||| |Selasa, 31 Agustus 2021|Mempelajari tutorial [LSI Design Contest Okinawa](http://www.lsi-contest.com/2021/shiyou_4-3e.html)|Tutorial ini menjelaskan prinsip kerja dari *Reinforcement Learning* menggunakan *Q-Algorithm*. Algoritma ini memanfaatkan matriks yang berisi *State* dan *Action* dari suatu masalah. Nilai dari sel-sel tersebut bisa didapatkan menggunakan model matematis. Perhitungan dilakukan secara iteratif hingga didapatkan nilai optimum.|Kendala yang dihadapai yaitu masih bingung proses iterasi untuk mendapat nilai optimum.|Rencana untuk Rabu, 31 Agustus 2021 membaca paper "Parallel Implementation of Reinforcement Learning Q-Learning Technique for FPGA"| |Rabu, 1 September 2021| Membaca paper "Parallel Implementation of Reinforcement Learning Q-Learning Technique for FPGA".|Pada paper ini dibahas implementasi algoritma *Reinforcement Learning* menggunakan arsitektur paralel. Metode ini akan memberikan waktu eksekusi yang lebih cepat atau konsumsi daya yang lebih rendah. Arsitektur ini terdiri dari blok *Action Draw*, *Update Module*, *Reward Function Module*, *Value Function Calculation Module*, dan *Future State Selection Module*. Hasil yang didapatkan menggunakan arsitektur ini bisa menghasilkan kecepatan yang lebih cepat dibanding arsitektur lainnya.||Rencana Kamis, 2 September 2021 menonton tutorial dari [HackMD](https://hackmd.io/@9pdDFiRHQXSVMjpONaIVgQ/H1u0FzR1F#Lecture-and-Tutorial) |Kamis, 2 September 2021|Mempelajari tutorial [Tutorial Singkat tentang Reinforcement Learning](https://youtu.be/KHOKV4YsHSU)|Tutorial ini membahas dasar dan elemen yang terdapat dalam *Reinforcement Learning*. Selain itu dibahas pula algoritma iteratif untuk *Q-Learning*. Pada algoritma tersebut dijelaskan pula mengenai metode pengambilan action.||| ||Mempelajari tutorial [Pengantar Reinforcement Learning](https://www.youtube.com/watch?v=ClJgvgUS_xw)|Mirip tutorial sebelumnya, tutorial ini menjelaskan mengenai dasar dan elemen dari *Reinforcement Learning*. Terlepas dari itu, tutorial ini juga menjelaskan paradigma *Reinforcement Learning* yang berbeda dari paradigma *Machine Learning* lainnya serta beberapa taksonomi *agent Reinforcement Learning*.||| ||Mempelajari tutorial [Tutorial Arsitektur Chip RL](https://www.youtube.com/watch?v=Kj4J-MdmCZo&list=PLkYjWBQDCTmD-4Vj12jzzDpi0i7pKHGHZ&index=16)|Tutorial ini memberikan penjelasan mengenai paper "An Efficient Hardware Implementation of Reinforcement Learning: The Q-Learning Algorithm" secara lebih jelas.||| |Jumat, 3 September 2021|Progress report kegiatan minggu ini|Mendapatkan informasi dan pandangan baru dari teman-teman yang lain||Rencana minggu depan yaitu berlatih menggunakan vivado, mempelajari kembali paper atau materi minggu ini, dan menonton kuliah VLSI serta Analisis IC Design di youtube Pak Trio.| ||Menginstall aplikasi Vivado|Aplikasi sudah terinstall||| ### Minggu 2 6 September 2021 - 10 September 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 6 September 2021|Menonton video kulian Perancangan Sistem VLSI oleh Prof. Trio|Dari video dijelaskan beberapa kategori IC. Saat ini IC lebih diminati karena memiliki beberapa keunggulan. Teknologi IC semakin lama semakin andal karena ukuran transistor yang makin kecil dan ukuran wafer yang makin luas sehingga mampu mengolah data lebih besar.||| |Selasa, 7 September 2021|Mengikuti tutorial verilog menggunakan VIVADO oleh Mas Wisnu (Engineer di tempat KP)|Mempelajari syntax yang digunakan pada VIVADO. Membuat rangkaian adder kemudian diimplementasikan pada FPGA board CMOD A7-35t||Melakukan tutorial VIVADO yaitu membuat rangkaian D flip-flop.| |Rabu, 8 September 2021| Melanjutkan tutorial verilog menggunakan VIVADO| Membuat rangkaian D flip-flop, JK flip-flop, dan counter.|Rangkaian counter yang dibuat belum dapat berjalan semestinya.|Membetulkan rangkaian counter agar dapat berjalan dengan baik| |Kamis, 9 September 2021| Melanjutkan tutorial verilog menggunakan VIVADO|Membuat protokol komunikasi UART||| |Jumat, 10 September 2021| Melanjutkan tutorial verilog menggunakan VIVADO|Melakukan uji coba komunikasi UART yang sudah dibuat pada Arduino.|Komunikasi dengan Arduino masih belum dapat dilakukan saat ini masih dalam proses mencari penyabab masalah tersebut.|| ### Minggu 3 13 September 2021 - 18 September 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 13 September 2021|Membuat testbench untuk rangkaian UART yang dibuat dan mencari tahu masalah.|Testbench bisa dibuat dan dapat menguji rangkaian UART. Penyebab rangkaian belum dapat dijalankan adalah counter yang digunakan masih 8bit, seharusnya lebih besar lagi karena perhitungannya lebih besar.||Menguji rangkaian yang sudah diperbaiki.| |Selasa, 14 September 2021|Menguji rangkaian UART yang sudah diperbaiki dengan Arduino.|Rangkaian UART yang dibuat mampu berkomunikasi dengan Arduino dan menampilkannya pada serial monitor.||| |Rabu, 15 September 2021|Menonton video kuliah Perancangan Sistem VLSI oleh Prof. Trio.|Industri chip terdiri dari beberapa lingkungan yaitu komponen, OEM/ODM, manufaktur, sistem integritas, dan retail. ||| |Kamis, 16 September 2021|Menjalankan simulasi MATLAB dari tutorial [LSI Design Contest Okinawa](http://www.lsi-contest.com/2021/shiyou_4-3e.html).|Perubahan nilai *alfa* akan berpengaruh pada banyaknya episode atau lamanya iterasi yang perlu dilakukan hingga *Q-matriks* mencapai konvergensi.||| |Jumat, 17 September 2021|Menjalankan simulasi MATLAB dari tutorial [LSI Design Contest Okinawa](http://www.lsi-contest.com/2021/shiyou_4-3e.html).|Perubahan nilai *gamma* akan mempengaruhi nilai konvergensi dari *Q-matriks*. Semakin kecil *gamma* konvergensinya akan menuju nilai yang lebih kecil. Selain itu juga memerlukan episode yang lebih besar.|Apakah ada konfigurasi atau pertimbangan untuk menentukan nilai *alfa* dan *gamma*?|| ### Minggu 4 20 September 2021 - 24 September 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 20 September 2021|Mengubah file MATLAB Action.m menjadi python Action.py|File tersebut berhasil diubah dan sudah lulus compile, namun belum dieksekusi.|Lupa syntax python karena sudah lama tidak menggunakan dan lebih sering menggunakan C, namun tutorial di internet sudah banyak serta cukup membantu.|Rencana akan mengubah semua file MATLAB dari tutorial [LSI Design Contest Okinawa](http://www.lsi-contest.com/2021/shiyou_4-3e.html) menjadi python terlebih dahulu.| |Selasa, 21 September 2021|Mengubah file MATLAB print_Qtable.m dan Routing.m menjadi file python.|File dapat diubah menjadi bahasa python dan lulus compile meskipun belum dicoba untuk eksekusi.||| |Rabu, 22 September 2021|Mengubah file MATLAB Search_Location.m menjadi python.|Kode berhasil diubah dan sudah lulus compile.||| |Kamis, 23 September 2021|Mengerjakan tutorial ZYBO modul 5.|Tutorial bisa diikuti dan dibuat.|Kendala pada tutorial ini adalah proses sintesis berlangsung sangat lama, kemungkinan ada tahapan yang kurang tepat.|| |Jumat, 24 September 2021|Mengubah file update_Qvalue.m menjadi file python.|Kode berhasil diubah dan lolos compile.||| ### Minggu 5 27 September 2021 - 1 Oktober 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 27 September 2021|Memperbaiki kode python yang dibuat sebelumnya.|Beberapa kesalahan berhasil diperbaiki.||| |Selasa, 28 September 2021|Memperbaiki kode python yang sudah dibuat sebelumnya.|Kode berhasil diperbaiki dan sudah dapat berjalan dengan baik.||| |Rabu, 29 September 2021|Mengerjakan modul 5, modul 6, dan modul BRAM.|Pengerjaan baru sampai simulasi pada VIVADO karena diperlukan aplikasi VITIS untuk membuat *software* yang diperlukan.|Aplikasi VITIS belum terinstall sebelumnya sehingga perlu diinstall terlebih dahulu.|| |Kamis, 30 September 2021|Melakukan installasi VITIS.|Aplikasi VITIS berhasil terinstalldan dapat berjalan.||Rencana selanjutnya yaitu menyelesaikan modul 5, modul 6, dan BRAM kemudian melakukan implementasi pada FPGA.| |Jumat, 1 Oktober 2021|Mengimplementasikan tutorial modul 5 dan modul 6 pada FPGA.|Tutorial modul 5 berhasil berjalan dengan baik sedangkan tutorial modul 6 masih belum memberikan hasil yang sesuai pada terminal.||| ### Minggu 6 4 Oktober 2021 - 8 Oktober 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 4 Oktober 2021|Memperbaiki dan melanjutkan tutorial modul 6.|Beberapa kode sudah dibuat ulang, namun belum dicoba pada FPGA.||| |Selasa, 5 Oktober 2021|Melanjutkan tutorial BRAM.|Kode sudah dibuat dan sudah dilakukan simulasi, namun implementasi pada FPGA belum dilakukan.||| |Rabu, 6 Oktober 2021|Melanjutkan tutorial BRAM.|Kode berhasil dibuat dan simulasi sudah berjalan dengan baik.||| |Kamis, 7 Oktober 2021|Mencoba implementasi tutorial BRAM ke FPGA.|Desain yang dibuat belum bisa memberikan hasil yang sesuai pada serial monitor.||Rencana kedepan mencari tahu penyebab dan mungkin membandingkan dengan teman yang sudah berhasil.| |Jumat, 8 Oktober 2021|Implemetasi tutorial modul 6 dan BRAM ke FPGA.|Desain berhasil dijalankan dengan baik dan memberikan tampilan yang sesuai pada serial monitor. Percobaan sebelumnya belum dapat memberikan hasil yang sesuai karena pengaturan prosesor ZYNQ yang digunakan kurang tepat.||| ### Minggu 7 11 Oktober 2021 - 15 Oktober 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 11 Oktober 2021|Menyusun laporan untuk perancangan *sytem on chip* sederhana.|Membuat bagian bab 1 pendahuluan dan bab 2 proses desain. Laporan tersebut berisi pengantar dari perancangan yang dilakukan dan proses desain dari *system on chip* yang dilakukan selama 5 minggu terakhir.||| |Selasa, 12 Oktober 2021|Menyusun laporan perancangan *system on chip* sederhana bagian bab 3 implementasi dan pengujian.|Implementasi dari desain yang dibuat dapat dijalankan dengan baik pada FPGA ZYNQ-7000. Sistem dapat menerima masukan dari perangkat lunak kemudian melakukan operasi dan menampilkannya pada serial monitor.||| |Rabu, 13 Oktober 2021|Menambahkan algoritma agar posisi demon atau obstacle dapat diletakkan secara random oleh sistem.|Ide yang digunakan dengan menggunakan fungsi random dari python. Posisi tersebut kemudian disimpan dalam matriks untuk diproses selanjutnya. Kode yang dibuat masih belum dapat berjalan dengan baik.||| |Kamis, 14 Oktober 2021|Memperbaiki kode yang dibuat sebelumnya.|Kode sebelumnya belum bisa dijalankan karena kondisi yang digunakan untuk mengatur posisi demon atau obstacle belum sesuai. Selain itu proses perhitungan *Q-value* memerlukan informasi posisi tersebut sehingga perlu diubah sedikit algoritma pada fungsi tersebut. Setelah melakukan perbaikan kode dapat berjalan dengan baik.||| |Jumat, 15 Oktober 2021|Menambahkan bagian kode python agar dapat menerika masukan posisi *start* dan *goal*.|Masukan posisi tersebut dilakukan dengan mengetikkan state yang sesuai. Kemudian pada matriks akan diberi tanda pada state tersebut. Kode saat ini bar bisa menerima masukan saja namun belum dapat melakukan perhitungan yang sesuai.||Menambahkan kode agar proses belajar dapat dilakukan untuk masukan *start* dan *goal* yang dinamis.| ### Minggu 8 18 Oktober 2021 - 22 Oktober 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 18 Oktober 2021|Menyelesaikan bagian perhitungan *Q-value* untuk algoritma dengan *start* dan *goal* sebagai masukan.|Kondisi pada fungsi-fungsi pendukung diubah menjadi variabel *start* dan *goal*. Variabel tersebut diteruskan lewat parameter dari fungsi terkait. Penambahan kode tersebut sudah berhasil menghasilkan jalur yang sesuai.|Pada proses pembuatan terdapat kesalahan penggunaan index sehingga hasilnya sedikit kacau. Setelah diperbaiki kode tersebut dapat berjalan dengan baik.|Mempelajari *library* pygame untuk memberikan UI.| |Selasa, 19 Oktober 2021|Membaca tutorial pygame untuk *user interface* dan menambahkan *user interface* pada kode yang dibuat sebelumnya.|Masukan berupa *start* dan *goal* serta posisi dari demon dapat divisualisasikan dengan memanfaatkan *library* pygame. Visualisasi menggunakan gambar yang letaknya diatur sesuai posisinya pada maze.||| |Rabu, 20 Oktober 2021|Tanggal Merah|||| |Kamis, 21 Oktober 2021|Mempelajari pygame untuk menggerakkan agen.|Fungsi-fungsi yang ada pada pygame sudah dibaca namun masih mengalami kesulitan untuk menggerakkan agen ketika selesai proses *learning*.||| |Jumat, 22 Oktober 2021|Mencari dan mempelajari tutorial untuk melakukan animasi pada pygame.|Mendapat beberapa informasi terkait malakukan animasi pada pyhton. Animasi bisa dilakukan dengan menggunakan beberapa gambar yang ditampilkan bergantian atau dilakukan dengan menekan tombol pada *keyboard*. Metode yang didapat masih belum sesuai karena tidak dapat dilakukan animasi secara otomatis dari perangkat lunak.||| ### Minggu 9 25 Oktober 2021 - 29 Oktober 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 25 Oktober 2021|Mempelajari tutorial UI pada python.|[Menonton](https://www.youtube.com/playlist?list=PLzMcBGfZo4-lB8MZfHPLTEHO9zJDDLpYj) pengantar mengenai library PyQt5 yang merupakan library untuk membuat UI. Struktur *syntax* bisa dipahami dari tutorial yang dilakukan. Beberapa fitur yang dapat dilakukan pada PyQt5 juga dapat dipahami dari tutorial tersebut.||| |Selasa, 26 Oktober 2021|Mempelajari tutorial UI pada python.|[Membaca](https://www.tutorialspoint.com/pyqt5/index.htm) lebih lanjut library PyQt5. Dari tutorial tersebut, didapatkan informasi mengenai kemampuan apa saja yang dapat dilakukan oleh PyQt5. Beberapa diantaranya yaitu dapat mengatur layout UI, dapat menambahkan *widget* untuk berinteraksi dengan pengguna, selain itu dapat diatur juga sinyal atau aksi yang dilakukan ketika pengguna melakukan sesuatu. Melalui tutorial ini juga dapat diketahui *method* dan *function* apa saja yang disediakan pada PyQt5.||| |Rabu, 27 Oktober 2021|Mempelajari tutorial UI pada python.|[Mempelajari](https://pythonbasics.org/pyqt/) contoh penggunaan library PyQt5. Melalui tutorial ini semakin jelas cara penggunaan library tersebut dan cara menuliskan *syntax*. Contoh yang dipelajari yaitu mengatur *widget* seperti `button`, `label`, `line edit`, dan `scroll`. Selain itu dipelajari pula contoh tentang mengatur layout.||| |Kamis, 28 Oktober 2021|Mempelajari tutorial UI pada python.|Mencoba menggunakan widget label dan line edit. Widget label dan line edit dapat dibuat dan ditampilkan pada *user interface* dengan baik.||| |Jumat, 29 Oktober 2021|Mempelajari tutorial UI pada python.|Mencoba mengatur layout dari widget yang sudah digunakan sebelumnya. Layout yang ada di PyQt5 dicoba semua yaitu `QBoxLayout`, `QGridLayout`, dan `QFormLayout`.||| ### Minggu 10 1 November 2021 - 5 November 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 1 November 2021|Mempelajari tutorial UI pada python.|Mencoba menambahkan widget scroll pada *user interface* yang dibuat. Widget tersebut dapat ditambahkan dan berfungsi dengan baik.||| |Selasa, 2 November 2021|Menambahkan bagian untuk mengubah ukuran maze.|Ukuran maze disimpan dalam sebuah variabel SIZE. Ukuran tersebut dapat diubah dengan mengubah nilai pada variabel SIZE agar ukuran maze sesuai dengan kebutuhan.||| |Rabu, 3 November 2021|Membaca dokumentasi pygame.|Beberapa syntax pygame sudah dibaca dan dipelajari bagaimana menggunakannya.||Melakukan pembuatan visualisasi *maze* dengan menggunakan pygame.| |Kamis, 4 November 2021|Mencoba menggunakan syntax pygame di python untuk visualisasi.|Beberapa sytax pygame dicoba dan dijalankan untuk mempelajari penggunaannya.||| |Jumat, 5 November 2021|Membuat visualisasi untuk *maze*.|Bagian object untuk mempermudah visualisasi berhasil dibuat. Object terdiri dari blok masing-masing state dan gambar maze.||| ### Minggu 11 8 November 2021 - 12 November 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 8 November 2021|Melanjutkan pembuatan visualisasi untuk *maze*.|Bagian untuk menampilkan maze berhasil dibuat. Maze yang digunakan berupa maze dinamis sesuai pengguna sehingga visualisasinya pun mengikuti.||| |Selasa, 9 November 2021|Melanjutkan pembuatan visualisasi untuk *maze*.|Bagian input posisi awal dan tujuan berhasil ditambahkan. Proses tersebut memanfaatkan event yang tersedia dari pygame.||| |Rabu, 10 November 2021|Melanjutkan pembuatan visualisasi untuk *maze*.|Bagian untuk menjalankan proses learning ditambahkan dan menampilkan hasil q-table pada monitor.||| |Kamis, 11 November 2021|Membuat model untuk *traffic control*.|Pembuatan model diawali dengan menentukan state dari kondisi lalu lintas. State dari model yang digunakan merepresentasikan kepadatan lalu lintas dari tiap simpang. Kondisi lalu lintas tersebut akan dibagi menjadi empat derajat kemacetan yaitu 0-3 untuk kondisi lancar hingga paling padat.||| |Jumat, 12 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Model dibuat dalam kode python dengan derajat kemacetan yang digunakan yaitu dua untuk mempermudah. Secara garis besar alur RL yang digunakan mirip dengan referensi dari LSI Design Contest Okinawa. Kode python secara garis besar sudah berhasil dibuat, namun implementasi fungsi yang digunakan belum dibuat.||Mengerjakan implementasi fungsi yang diperlukan.| ### Minggu 12 15 November 2021 - 19 November 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 15 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Fungsi `update_kondisi` dan `action` berhasil ditambahkan.|Fungsi `update_kondisi` masih belum dapat bekerja dengan baik. Keluaran dari fungsi ini selalu tidak tepat bagaimanapun algoritma yang digunakan. Value dari array yang diperlukan tidak dapat tersalin dengan baik.|| |Selasa, 16 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Mencari sumber masalah dari fungsi `update_kondisi`. Setelah membaca beberapa referensi ditemukan masalah yaitu untuk menyalin value dari suatu array di python perlu perlakuan khusus. Kode kemudian diubah agar sesuai dan sudah dapat bekerja dengan baik.||| |Rabu, 17 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Menambahkan implementasi fungsi `update_qvalue`.||| |Kamis, 18 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Merapikan kode dan menguji beberapa kali perhitungan. Q-table yang dihasilkan sudah memberikan hasil yang sesuai.||| |Jumat, 19 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Mengubah kode agar dapat digunakan untuk kondisi kepadatan yang dibagi menjadi tiga. Bagian yang diubah adalah fungsi `get_state`. Fungsi tersebut berhasil diubah dan berfungsi dengan baik.||| ### Minggu 13 22 November 2021 - 26 November 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 22 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Mengubah fungsi `update_qvalue` agar sesuai dengan kondisi kepadatan yang digunakan. Bagian yang perlu diubah adalah bagian *reward* karena kondisi kepadatannya lebih banyak sehingga perlu ditambahkan.||| |Selasa, 23 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Merapikan kode dan melakukan pengujian. Kode yang dibuat sudah dapat bekerja dengan baik dan memberikan hasil yang sesuai dengan kondisinya.||| |Rabu, 24 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Menambahkan bagian untuk menghitung banyaknya nyala lampu merah dalam satu jalan pada model dengan dua derajat kemacetan. Bagian tersebut diimplementasikan dengan menggunakan array `red_count` untuk menampung jumlah yang dihitung.||| |Kamis, 25 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Mengubah fungsi `update_kondisi` dan `update_qvalue` agar dapat mengolah informasi dari array `red_count`. Kedua fungsi tersebut berhasil diubah dan bisa bekerja dengan baik.||| |Jumat, 26 November 2021|Melanjutkan pembuatan model untuk *traffic control*.|Menguji model yang sudah dibuat sebelumnya. Hasil pengujian menunjukkan bahwa penambahan bagian untuk menghitung banyaknya nyala lampu merah tersebut tidak berdampak besar terhadap *q-table*. Nilai *q-table* yang dihasilkan tersebut masih sangat mirip dengan nilai *q-table* ketika belum ditambahkan bagian penghitung nyala lampu merah. Oleh karena itu, diputuskan untuk melanjutkan dengan model tanpa penambahan bagian untuk menghitung nyala lampu merah.||| ### Minggu 14 29 November 2021 - 3 Desember 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 29 November 2021|Membuat UI untuk *traffic control*.|Proses pembuatan diawali dengan memerinci apa saja yang perlu ditampilkan. Berikutnya dilakukan pembuatan sketsa tampilan yang akan digunakan. Tampilan yang akan digunakan akan terdiri dari 3 bagian yaitu bagian jalan, q-table, dan parameter. Pembuatan tampilan menggunakan python dengan bantuan library PyQt5.||Melanjutkan ke implementasi.| |Selasa, 30 November 2021|Membuat UI untuk *traffic control*.|Membagi tampilan menjadi 3 bagian sesuai dengan *layout* pada rancangan sebelumnya. Tampilan dapat diatur menjadi 3 bagian besar sesuai dengan rancangan.||| |Rabu, 1 Desember 2021|Membuat UI untuk *traffic control*.|Menambahkan bagian untuk memasukkan parameter yang diperlukan. Bagian tersebut berhasil diimplementasikan dengan menggunakan *widget* `line edit`.||| |Kamis, 2 Desember 2021|Membuat UI untuk *traffic control*.|Menambahkan tombol untuk menyimpan parameter hasil masukan dan tampilan parameter yang telah disimpan. Tombol dan tampilan dapat dibuat dan berfungsi dengan baik.||| |Jumat, 3 Desember 2021|Membuat UI untuk *traffic control*.|Menambahkan *widget* `scroll` pada tampilan q-table. `Scroll` digunakan untuk membatasi agar ukuran tampilan tidak terlalu besar dan dapat menampung ukuran state yang lebih besar.||| ### Minggu 15 6 Desember 2021 - 10 Desember 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 6 Desember 2021|Membuat UI untuk *traffic control*.|[Mempelajari](https://pythonbasics.org/pyqt-table/) cara menampilkan tabel dalam PyQt5. Tabel dapat ditampilkan dengan memanfaatkan `QTableWidget` yang disediakan pada PyQt5. Parameter yang diperlukan yaitu ukuran tabel dan data dari setiap sel. Data dari setiap sel akan dimasukkan ke sel yang sesuai dengan menggunakan perulangan.||| |Selasa, 7 Desember 2021|Membuat UI untuk *traffic control*.|Mencoba membuat contoh yang disediakan pada tutorial sebelumnya. Contoh tersebut dapat diikuti dan dipelajari dengan baik. Selain itu dapat dimodifikasi untuk mencoba beberapa fitur yang disediakan oleh PyQt5.||| |Rabu, 8 Desember 2021|Membuat UI untuk *traffic control*.|Membuat tampilan tabel pada UI. Tampilan tabel belum dapat memberikan hasil yang sesuai. Masih muncul masalah ketika program dijalankan.||| |Kamis, 9 Desember 2021|Membuat UI untuk *traffic control*.|Melakukan proses *debug* untuk mencari sumber masalah. Setelah membaca beberapa referensi ditemukan masalah yaitu bentuk data yang digunakan kurang tepat. Data yang digunakan sebelumnya merupakan data dari contoh yang diberikan. Setelah melakukan perubahan bentuk data tampilan tabel dapat bekerja dengan baik.||| |Jumat, 10 Desember 2021|Membuat UI untuk *traffic control*.|Menambahkan tombol reset untuk mengatur ulang nilai parameter yang digunakan. Tombol tersebut berhasil diimplementasikan dan dapat bekerja dengan baik.||| ### Minggu 16 13 Desember 2021 - 17 Desember 2021 | Hari,Tanggal | Kegiatan |Hasil|Kendala|Rencana| | ---------------------- | -------- |-----|-------|-------| |Senin, 13 Desember 2021|Menggabungkan program model dengan hardware.|Melakukan diskusi untuk membahas bagian mana saja dari model yang akan diproses pada hardware. Bagian yang akan diolah pada hardware adalah persamaan Bellman untuk memperbarui nilai pada q-table.||| |Selasa, 14 Desember 2021|Menggabungkan program model dengan hardware.|Mencoba mengubah model yang sudah dibuat ke bentuk yang sesuai menggunakan Jupyter notebook. Program tersebut belum dapat berfungsi dengan baik karena perlu disesuaikan dengan arsitektur hardware yang digunakan.||| |Rabu, 15 Desember 2021|Menggabungkan program model dengan hardware.|Membahas alamat dan bentuk data yang digunakan pada hardware. Bentuk data yang digunakan yaitu 32-bit untuk nilai yang diambil dari q-table dan 8-bit untuk data nilai parameter.||| |Kamis, 16 Desember 2021|Menggabungkan program model dengan hardware.|Melanjutkan konversi program dengan menyesuaikan bentuk data dan alamat. Program dapat diubah dan dapat berjalan.||| |Jumat, 17 Desember 2021|Menggabungkan program model dengan hardware.|Melakukan pengujian dari SoC yang sudah dibuat. Pengujian dapat memberikan nilai pada q-table yang mendekati hasil dari program model.|||