Algoritma Particle Swarm Optimization PSO

Proses untuk mencari nilai minimum menggunakan algoritma PSO yaitu sebagai berikut : 1. Inisialisasi sekumpulan partikel secara acak atau random setiap partikel merepresentasikan solusi yang mungkin untuk masalah optimasi. 2. Inisialisasi posisi dari setiap partikel � dan kecepatan dari setiap partikel � . 3. Hitung nilai kesesuaian dari setiap partikel berdasarkan formula dan model yang telah ditentukan sesuai dengan masalah optimasinya. 4. Untuk setiap partikel, bandingkan nilai kesesuaian dengan nilai terbaiknya yang telah dicapai � � particle best, jika � � , maka � � diganti dengan . 5. Untuk setiap partikel, bandingkan nilai kesesuaian dengan nilai terbaik yang dicapai dalam populasi � � global best, jika � � , maka � � diganti dengan . 6. Berdasarkan bagian 4 dan 5, kecepatan � dan posisi dari partikel � diubah. Rumus pembaruan kecepatan � : � = � − + . . � � − � − + . . � � − � − Adapun rumus pembaruan posisi � adalah � = � − + � . 7. Jika telah mencapai kondisi akhir mencapai nilai iterasi optimum atau perulangan telah mencapai nilai yang konvergen ke nilai fungsi minimum maka perulangan berhenti dan nilai optimumnya didapatkan namun jika belum maka diulangi pada nomor 3. Berikut Pseudo code dari algoritma PSO : For setiap partikel Inisialisasi partikel End Repeat For setiap partikel Hitung nilai kesesuaian If nilai kesesuaian baru lebih baik daripada nilai kesesuian lama Perbarui nilai kesesuian dari partikel tersebut End End Pilih partikel dengan nilai kesesuaian terbaik diantara semua partikel tetangganya dan simpan nilai kesesuaian terbaik tersebut For setiap partikel Hitung kecepatan partikel menggunakan rumus pertama di atas Perbarui posisi pertikel menggunakan rumus kedua di atas End Until kriteria berhenti = True Berikut ini adalah diagram alir dari algoritma PSO: Tidak Ya Mulai Bangkitkan parameter dari PSO Inisialisasi posisi, kecepatan, dan ruang setiap partikel Evaluasi nilai kesesuian terbaik dari tiap partikel, dan pilih Pbest dan Gbest Hitung kembali nilai kesesuaian tiap partikel dan perbarui Pbest dan Gbest Apakah kriteria terpenuhi? Cetak nilai optimal dari variabel Bangkitkan iterasi dari t = 1 Perbarui posisi dan kecepatan setiap partikel Cara Kerja Algoritma Particle Swarm Optimization Misalkan kita mempunyai fungsi berikut: min fx dimana Prosedur PSO dapat dijabarkan dengan langkah-langkah sebagai berikut: 1. Asumsikan bahwa ukuran kelompok atau kawanan jumlah partikel adalah N. Untuk mengurangi jumlah evaluasi fungsi yang diperlukan untuk menemukan solusi, sebaiknya ukuran N tidak terlalu besar, tetapi juga tidak terlalu kecil, agar ada banyak kemungkinan posisi menuju solusi terbaik atau optimal. Jika terlalu kecil, sedikit kemungkinan menemukan posisi partikel yang baik. Terlalu besar juga akan membuat perhitungan jadi panjang. Biasanya digunakan ukuran kawanan adalah 20 sampai 30 partikel. 2. Bangkitkan populasi awal dengan rentang dan secara random sehingga didapat , , . . . , � . Setelah itu, untuk mudahnya, posisi partikel j dan kecepatannya pada iterasi i dinotasikan sebagai dan . Sehingga partikel-partikel awal ini dinotasikan , , ..., � dan kecepatan-kecepatan awal ini dinotasikan , , ..., � . Vektor , = , , … , disebut vektor koordinat dari partikel dan vektor , = , , … , disebut vektor koordinat dari kecepatan. Evaluasi nilai fungsi tujuan untuk setiap partikel dan nyatakan dengan f[ ], f[ ], ..., f[ � ]. 3. Hitung kecepatan dari semua partikel. Semua partikel bergerak menuju titik optimal dengan suatu kecepatan. Awalnya semua kecepatan dari partikel diasumsikan sama dengan nol. Set iterasi = . 4. Pada iterasi ke-i, temukan 2 parameter penting untuk setiap partikel j, yaitu: a. Nilai terbaik sejauh ini dari koordinat partikel j pada iterasi i dan untuk memudahkan penulisan, nyatakan saja sebagai P best,j , dengan nilai fungsi obyektif paling rendah kasus minimasi, f[ ], yang ditemui sebuah partikel j pada semua iterasi sebelumnya. Nilai terbaik untuk semua partikel yang ditemukan sampai iterasi ke-i, kita tuliskan saja sebagai G best , dengan nilai fungsi tujuan paling kecil atau minimum diantara semua partikel untuk semua iterasi sebelumnya, f[ ]. b. Hitung kecepatan partikel j pada iterasi ke-i dengan rumus sebagai berikut: = − + . . P best,j ⁡–⁡ − + . . G best ⁡–⁡ − ,⁡dengan = , , … , dimana dan masing-masing adalah learning rates untuk kemampuan individu cognitive dan pengaruh sosial group, dan dan bilangan acak random yang berdistribusi seragam uniform dalam interval 0 dan 1. Jadi parameter dan menunjukkan bobot dari memori position sebuah partikel terhadap memori position dari kelompok swarm. Nilai dari dan adalah 2 sehingga partikel-partikel akan mendekati target sekitar setengah selisihnya. c. Hitung posisi atau koordinat partikel j pada iterasi ke-i dengan cara = − + ; j = 1, 2, ..., N Evaluasi nilai fungsi tujuan untuk setiap partikel dan nyatakan sebagai f[ ], f[ ], ..., f[ � ]. 5. Cek apakah solusi yang sekarang sudah konvergen. Jika posisi semua partikel menuju ke satu nilai yang sama, maka ini disebut konvergen. Jika belum konvergen maka langkah 4 diulang dengan memperbarui iterasi ⁡ = ⁡ ⁡ + ⁡ , dengan cara menghitung nilai baru dari P best,j dan G best . Proses iterasi ini dilanjutkan sampai semua partikel menuju ke satu titik solusi yang sama. Biasanya akan ditentukan dengan kriteria penghentian stopping criteria, misalnya jumlah selisih solusi sekarang dengan solusi sebelumnya sudah sangat kecil. Contoh 2.3 Kerjakan soal berikut: min = ⁡– ⁡ dengan 60 ≤ x ≤ 120 Sebelum masuk ke dalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu: Tentukan dimensi permasalahan. Diasumsikan dalam kasus ini, dimensi bernilai 1 karena ada 1 variabel yang akan dicari nilainya. Kemudian tentukan jumlah partikel yang digunakan dalam perhitungan. Diasumsikan dalam kasus ini, jumlah partikel yang digunakan adalah 4 partikel. Tentukan jumlah iterasi yang digunakan oleh setiap partikel untuk melakukan proses. Diasumsikan dalam kasus ini, jumlah iterasi yang digunakan adalah 3 kali. Tentukan total posisi yang harus dicapai. Semua solusi yang ditemukan oleh masing-masing individu harus berjumlah sebanyak variabel ini. Diasumsikan dalam kasus ini, total nilai yang harus dicapai adalah sesuai fungsi obyektif atau fungsi tujuan dan memenuhi batasan nilai yang diberikan yaitu bernilai antara 60 dan 120. Tentukan kecepatan awal untuk perpindahan posisi partikel dalam setiap proses. Diasumsikan dalam kasus ini nilai kecepatan awal adalah 0. Kemudian bobot sosial dalam contoh soal ini diasumsikan = = . Langkah-langkah penggunaan algoritma ini adalah 1. Inisialisasi data, dengan jumlah partikel = seperti yang sudah ditentukan sebelumnya, didapat populasi awal secara acak random misalkan: = , = , = , = . 2. Hitung nilai fungsi untuk setiap partikel ⁡ untuk = , , , dan nyatakan dengan: = = , = = , = = , = = . 3. Seperti yang sudah dipaparkan di atas, ditentukan kecepatan awal = ⁡ = = = dan tetapkan iterasi pertama yaitu = . 4. Selanjutnya ditemukan nilai terbaik lokal sejauh ini yang merupakan posisi partikel terbaik dari partikel tersebut alias � � , serta nilai terbaik global yang merupakan posisi partikel terbaik dari seluruh kawanan � . � � , = , � � , = , � � , = , � � , = , � = . 5. Hitung dengan = = dan misalkan nilai bilangan acak random yang didapat = . dan = . dengan rumus: = − + . . P best,j ⁡–⁡ − + . . G best ⁡–⁡ − diperoleh: = + . . P best,1 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = = + . . P best,2 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = = + . . P best,3 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = − = + . . P best,4 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = . Sehingga nilai sebagai posisi partikel yang baru adalah: = + = , = + = , = − = , = + . = . 6. Hitung nilai fungsi sekarang pada partikel ⁡ untuk = , , , = = , = = , = = , = . = . Sedangkan pada iterasi sebelumnya kita dapatkan = = , = = , = = , = = 7. Nilai dari iterasi sebelumnya tidak ada yang lebih baik sehingga � � , baru untuk masing-masing partikel sama dengan nilai nya. � � , = , � � , = , � � , = , � � , = . , � = . Apakah solusi sudah konvergen, dimana nilai dari masing-masing nya sudah dekat? Belum. Maka, lanjutkan ke iterasi berikutnya yaitu = . 8. Hitung kecepatan baru dan misalkan nilai bilangan acak random selanjutnya yang didapat adalah = . dan = . maka diperoleh: = + . . P best,1 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = = + . . P best,2 ⁡–⁡ + . . G best ⁡–⁡ = + . − + . − = = + . . P best,3 ⁡–⁡ + . . G best ⁡–⁡ = − + . − + . − = − = + . . P best,4 ⁡–⁡ + . . G best ⁡–⁡ = . + . . − . + . − . = Sehingga nilai sebagai posisi partikel yang baru adalah: = + = , = + = , = − = , = . + = . 9. Hitung nilai fungsi sekarang pada partikel ⁡ untuk = , , , = = , = = , = = , = . = . 10. Jika dibandingkan dengan nilai dari iterasi sebelumnya, ada nilai yang lebih baik dari nilai sekarang yaitu = , sehingga � � , = , dan � akan dicari dari ⁡{ , , , . } = yang dicapai pada = . Sehingga untuk iterasi berikutnya, � � = { , , , . } dan � = . Cek kembali, apakah solusi sudah konvergen? Jika belum konvergen, set = , masuk ke iterasi berikutnya.lanjutkan ke langkah berikutnya dengan menghitung kecepatan baru dimana = ⁡; ⁡ = , , , dan ulangi langkah-langkah selanjutnya sampai mencapai suatu nilai yang konvergen. Hasil dari langkah-langkah di atas dapat disajikan dalam bentuk tabel: � � , � = = = = = = = = = = = = = = = = � � , = � � , = � � , = ⁡ � � , = 90 1 = = = = = = = = � � , = � � , = = = . = − = . = = = . = . � � , = ⁡ � � , = . 100 2 = = = = . = = = − = = = = = = = = . = . � � , = � � , = � � , = ⁡ � � , = . 100 Tabel 2.1 : Tabel hasil perhitungan PSO secara manual untuk contoh 2.3 Dan berikut adalah hasil perhitungan yang diproses dengan menggunakan MATLAB: run = 1 Iteration Best particle Objective fun 1 4 12.4323 2 4 12.4323 3 4 12.4323 4 1 6.3561 ----------------------------------------------------- run = 2 Iteration Best particle Objective fun 1 4 0.0000 2 4 0.0000 3 4 0.0000 4 4 0.0000 ----------------------------------------------------- Final Results-------------------------------------------- bestfun = bestrun = 2 best_variables = 100 Elapsed time is 0.155848 seconds. Berikut adalah grafik konvergensi yang ditampilkan dari best run: Gambar 2.3 : Gambar grafik konvergensi PSO pada run ke 2 Dalam implementasinya, ditemukan bahwa kecepatan partikel dalam PSO standar diperbarui update terlalu cepat dan nilai minimum fungsi tujuan yang dicari sering terlewati. Oleh karena itu, kemudian dilakukan modifikasi atau perbaikan terhadap algoritma PSO standar. Perbaikan itu berupa penambahan suatu bobot inersia untuk mengurangi kecepatan pada formula pembaruan update kecepatan seperti yang telah disinggung sebelumnya. Bobot inersia ini diusulkan oleh Yuhui Shi dan Erberhart pada tahun 1998 untuk meredam kecepatan selama iterasi, yang memungkinkan kawanan burung konvergen dalam artian menuju titik target secara lebih akuratdan efisien dibanding algoritma aslinya yaitu algoritma PSO standar. Biasanya nilai bobot inersia dibuat sedemikian hingga semakin besar iterasi yang dilalui, semakin mengecil kecepatan partikelnya. Nilai ini bervariasi secara linear dalam rentang 0.4 hingga 0.9. Secara matematis perbaikan PSO ini dapat dituliskan sebagai berikut: = . − + . . P best,j ⁡–⁡ − + . . G best ⁡–⁡ − ,⁡dengan = , , … , Formula tersebut adalah modifikasi terhadap formula sebelumnya, yaitu: = − + . . P best,j ⁡–⁡ − + . . G best ⁡–⁡ − ,⁡dengan = , , … , Perlu diketahui bahwa nilai bobot inersia yang tinggi menambah posisi pencarian global global exploration, sedangkan nilai bobot inersia yang rendah menambah posisi pencarian lokal local search. Oleh karena itu, supaya tidak terlalu menitikberatkan pada salah satu bagian dan tetap mencari area pencarian yang baru dalam ruang berdimensi tertentu, maka perlu dicari nilai bobot inersia yang secara imbang menjaga pencarian global dan lokal. Untuk mencapai itu dan mempercepat konvergensi, suatu bobot inersia yang mengecil nilainya dengan bertambahnya iterasi dapat dirumuskan: = − − 2.10 dimana dan masing-masing adalah nilai awal dan nilai akhir bobot inersia, adalah jumlah iterasi maksimum yang digunakan dan adalah iterasi saat ini sekarang. Biasanya digunakan nilai = . dan = . . Gambar pergerakan nilai fungsi tujuan = ⁡– ⁡ , untuk 50 iterasi ditunjukkan dalam gambar 2.2 sedangkan gambar pergerakan nilai fungsi tujuan = ⁡– ⁡ setelah dilakukan modifikasi terhadap PSO dengan menyertakan bobot inersia untuk 50 iterasi ditunjukkan dalam gambar 2.3. Terlihat bahwa dengan adanya modifikasi, pergerakan akan lebih cepat konvergen. Berikut ini diberikan hasil implementasi grafik konvergensi dua jenis PSO: Gambar 2.4 : Pergerakan nilai fungsi tujuan untuk PSO tanpa modifikasi Gambar 2.5 : Pergerakan nilai fungsi tujuan untuk PSO dengan modifikasi Dari kedua gambar di atas, dapat dibandingkan bagaimana pergerakan vektor solusi menuju solusi optimal atau melihat pergerakan nilai fungsi tujuannya dari PSO asli PSO standar maupun PSO yang sudah dimodifikasi disertai bobot inersia. Contoh 2.4 Contoh berikutnya yaitu bagaimana meminimalkan fungsi tujuan berdimensi lebih dari satu dan memiliki kendala constraint. Fungsi obyektif : min = − + − dengan kendala + = Langsung saja kita proses dengan bantuan MATLAB dan didapatkan hasilnya sebagai berikut: Final Results-------------------------------------------- bestfun = 1.8000 bestrun = 2 best_variables = 0.7993 2.4014 Elapsed time is 1.182401 seconds. Gambar 2.6 : Gambar grafik konvergensi PSO pada run ke 2 Untuk mendapatkan hasil tersebut, diperlukan dua script program MATLAB yang telah dimodifikasi dari script program asli yang telah dituliskan oleh Nabab Alam. File pertama mendefinisikan fungsi obyektif atau fungsi tujuan, dan file kedua dibangun program utama yang akan memecahkan masalah dengan menggunakan algoritma PSO. Script kode program terlampir. Untuk file pertama diberi nama ofun2.m. Kemudian file ke2 merupakan file program utama. Setelah script program tersebut dijalankan, diketahui nilai fungsi obyektif fungsi tujuan terbaik yang dihasilkan setelah 10 kali independent run adalah 1.8000 dan menghasilkan nilai variabel-variabel terbaik antara lain: x1 = 0.7993 dan x2 = 2.4014. Dari 10 run yang dilakukan, diketahui run yang memberikan hasil terbaik adalah run ke-2. Simulasi ini memerlukan waktu 1.182401 detik. Kita juga dapat melakukan perhitungan tanpa kendala dengan mengganti fungsi objektif pada file pertama. Sebagai contoh, kita akan kerjakan lagi contoh yang tadi tetapi tanpa kendala dan mengubah nama script ofun2.m menjadi ofun.m Kita juga harus mengubah kata ofun2 menjadi ofun pada baris 32 dan baris 73 pada file kedua program PSO utama. Script utuh dapat diperiksa pada lampiran. Hasilnya adalah sebagai berikut: Final Results-------------------------------------------- bestfun = bestrun = 2 best_variables = 2 3 Elapsed time is 0.501870 seconds. Tampilan grafik konvergensi pada best run adalah: Gambar 2.7 : Gambar grafik konvergensi PSO pada run ke 2 Jadi, PSO dapat digunakan untuk menyelesaikan masalah program linear maupun non linear, dengan atau tanpa kendala. 54

BAB III MASALAH PEMOTONGAN PERSEDIAAN

A. Masalah Pemotongan Persediaan Cutting Stock Problem

Masalah pemotongan persediaan pertama kali dijelaskan di awal era pemrograman linear. Gilmore dan Gomory 1961 adalah yang pertama merumuskan masalah pemotongan persediaan. Masalah dalam bentuk yang paling sederhana dapat digambarkan sebagai berikut: materi yang diberikan yang tersedia dalam berbagai bentuk dan ukuran tertentu, dipotong agar bisa menghasilkan bentuk dan ukuran tertentu yang diinginkan, sehingga dapat meminimalkan beberapa tujuan seperti biaya. Tergantung pada jenis bahan dan pola pemotongan berdasarkan pertimbangan, kita membedakan masalah pemotongan diantaranya satu, dua, dan tiga dimensi. Sebagai contoh, pemotongan kertas koran untuk panjang yang berbeda adalah masalah pemotongan satu dimensi. Karena lebar koran tetap sama, sementara hanya panjangnya yang bervariasi atau beragam. Pada makalah ini, hanya akan dibahas masalah pemotongan persediaan satu dimensi. Dalam suatu industri kertas, mesin kertas paper machine memproduksi rol kertas jumbo, dengan lebar maksimum yang sudah ditetapkan yang disebut dengan deckle. Kemudian rol jumbo melewati beberapa proses proses produksi dalam memenuhi pesanan. Salah satu proses produksi yang paling penting adalah pemotongan rol kertas jumbo menjadi rol yang lebih kecil atau potongan kertas persegi panjang. Proses pemotongan tersebut harus dapat meminimumkan jumlah rol jumbo yang akan dipotong dan juga dapat meminimumkan sisa pemotongan. Masalah pemotongan persediaan satu dimensi yang akan dibahas adalah tentang pemotongan rol jumbo menjadi potongan rol kecil dengan ukuran yang bervariasi. Berikut gambar pemotongan satu dimensi dari rol jumbo menjadi rol kecil. Gambar 3.1 : Pemotongan rol jumbo menjadi beberapa bagian rol kecil. Misalkan terdapat n kemungkinan pola pemotongan untuk rol jumbo dengan lebar , rol kecil memiliki lebar untuk = , … , , dan � adalah banyaknya rol kecil dengan lebar � bilangan bulat non negatif sehingga ∑ � = . Maka masalah pemotongan ini dapat diselesaikan dalam program linier sebagai berikut. Minimumkan = ∑ = 3.1 Dengan kendala ∑ � = 3.2 dan � adalah banyaknya rol kecil dengan lebar dalam pola pemotongan ke-j, adalah banyaknya permintaan rol kecil dengan lebar , variabel menunjukkan banyaknya rol jumbo yang dipotong pada jenis pemotongan ke- , variabel mewakili banyaknya variasi lebar kertas potongan rol kecil, variabel menunjukkan banyaknya kemungkinan pemotongan yang dapat dilakukan sesuai dengan variasi lebar kertas sesuai pesanan pola pemotongan. Contoh 3.1 Sebuah industri kertas menghasilkan rol jumbo dengan lebar 3 meter. Pelanggan menginginkan rol dengan lebar yang lebih kecil. Dari rol jumbo dapat dipotong ke dalam 2 rol dengan lebar 93 cm, 1 rol dengan lebar 108 cm, dan menyisakan rol dengan lebar 6 cm. Misalkan pesanan yang diterima adalah sebagai berikut. Banyak rol Lebar rol cm 97 135 610 108 395 93 211 42 Tabel 3.1 : Tabel pesanan yang diterima Permasalahannya menjadi bagaimana menentukan pola pemotongan rol jumbo agar pesanan dapat dipenuhi dengan banyaknya rol jumbo yang harus dipotong sesedikit mungkin. Ada 12 kemungkinan cara memotong rol jumbo ke dalam rol kecil sesuai pesanan dengan sisa pemotongan kurang dari 42 cm yaitu: Kemungkinan Lebar rol 135 108 93 42 1 2 2 1 1 1 3 1 1 1 4 1 3 5 2 2 6 1 2 7 1 1 2 8 1 4 9 3 10 2 2 11 1 4 12 7 Tabel 3.2 : Tabel pola pemotongan yang dibuat sesuai pesanan Pola 1 dari tabel di atas berarti 1 rol jumbo dengan lebar 3 meter akan dipotong menjadi 2 rol kecil dengan lebar 135 cm. Pola 2 berarti 1 rol jumbo akan dipotong menjadi 1 rol kecil dengan lebar 135, 1 rol kecil dengan lebar 108 dan 1 rol kecil dengan lebar 42 cm. Demikian seterusnya berlaku cara membaca data yang sama untuk pola-pola pemotongan yang lain. Untuk setiap kemungkinan pola � di atas, kita memperkenalkan variabel yang menunjukkan banyaknya rol jumbo yang harus dipotong menurut pola � . Dengan demikian, fungsi tujuan adalah meminimumkan jumlah rol jumbo yang dipotong yaitu ∑ = . Agar pesanan terpenuhi maka untuk setiap ukuran lebar yang dipesan ditambahkan 1 kendala. Sebagai contoh, untuk pesanan 395 rol dengan lebar 93 cm, maka fungsi kendala dapat dituliskan + + + + + yang berarti jumlah rol kecil dengan lebar 93 cm yang dihasilkan dengan memotong rol jumbo menurut berbagai pola pemotongan tidak boleh kurang dari 395 rol jumlah rol pesanan. Demikian seterusnya sehingga diperoleh masalah program linier berikut. Minimumkan ∑ = Dengan kendala + + + + + + + + + + + + + + + + + + + + Masalah tersebut dapat diselesaikan dengan program QM for Windows yang merupakan perangkat lunak digunakan untuk membantu proses perhitungan secara teknis pengambilan keputusan secara kuantitatif. Program ini menyediakan modul- modul dalam area pengambilan keputusan bisnis seperti assignment, forecasting, integer programming, linear programming, quality control, inventory, dan lain- lain. Berikut adalah hasil yang didapat menggunakan QM. Tabel 3.3: Hasil QM pada contoh 3.1