BAB III HASIL DAN PEMBAHASAN
E. Penyelesaian Permasalahan Produksi Menggunakan Python
Python merupakan bahasa pemrograman komputer yang dapat digunakan untuk membantu menyelesaikan permasalahan matematika. Di dalam bahasa pemrograman ini terdapat banyak sekali modul atau library yang dapat digunakan untuk menyelesaikan permasalahan matematika. Begitu pula dengan permasalahan program linear bilangan bulat yang juga dapat dibantu dengan bahasa pemrograman ini yang dapat digunakan untuk menyelesaikan permasalahan ini. Modul yang digunakan ialah modul PuLP yang dapat digunakan untuk menyelesaikan permasalahan program linear bulat. Aplikasi yang digunakan untuk menuliskan script program ialah aplikasi Thonny.
Berikut langkah-langkah dalam pembuatan script program di Thonny dengan bantuan modul PuLP.
1. Mengidentifikasi model permasalahan serta memilih PuLP classes yang akan digunakan
Setelah menginstal library yang akan digunakan, maka tahap awal dalam penulisan script program ialah memanggil library yang akan digunakan lalu dilanjutkan dengan memilih PuLP classes yang akan digunakan. Seperti yang diketahui bahwa kelas dalam PuLP terdapat 6 kelas yang bisa dipilih, karena permasalahan ini yang merupakan permasalahan program linear bilangan bulat, maka PuLP classes yang digunakan ialah LpProblem dan LpVariable. Kemudian kita juga perlu memanggil pulp constant yang akan digunakan untuk menunjukkan kondisi akhir perhitungan permasalahan yang akan di dapatkan, maka perlu memanggil LpStatus.
Setelah memanggil semua hal yang diperlukan, maka dilanjutkan dengan memilih model permasalahan yang akan digunakan. Untuk memodelkan permasalahan yang ada, akan digunakan perintah LpProblem sebagai langkah untuk merepresentasikan permasalahan yang akan dipilih dalam kesempatan ini. Penulisan perintahnya sebagai berikut:
Model = LpProblem (name=’ ‘ , sense = )
Penulisan parameter name digunakan untuk memberikan nama permasalahan yang ada, kemudian untuk penulisan parameter sense untuk memilih akan melakukan perhitungan minimasi (LpMinimize atau 1) atau akan melakukan perhitungan maksimasi (LpMaximize atau -1), pemilihan ini akan memberikan efek untuk hasil akhir nanti. Perlu diketahui, ketika tidak menuliskan parameter sense maka secara langsung model akan dikenal sebagai model meminimalkan. Kemudian untuk penulisan kata model merupakan bukan keharusan harus “model” namun dapat diganti dengan kata lain. Berikut contoh penulisan perintah menggunakan LpProblem.
Gambar 3. 1 Memanggil library dan penggunaan LpProblem 2. Menentukan variabel keputusan.
Setelah memanggil pustaka dan mengidentifikasikan model permasalahan yang akan digunakan, yaitu LpMaximize, maka akan dilanjutkan dengan menentukan variabel keputusan. Dalam penulisan variabel keputusan akan digunakan PuLP classes yang sudah dipanggil, yaitu LpVariable. Penulisan perintahnya ialah sebagai berikut:
LpVariable(name, lowBound=None, upBound=None, cat=' ', e=None) Penulisan parameter nama digunakan untuk memberikan penamaan kepada variabel keputusan yang akan digunakan, apabila akan memberikan nama variabel dengan lebih dari satu kata, lebih baik pemberian nama diberikan menggantikan spasi dengan “_” agar mengantisipasi terjadinya error. Kemudian, untuk parameter lowBound dan upBound merupakan tempat untuk mengisikan batas atas atau batas bawah dari variabel keputusan yang ada sesuai dengan permasalahan yang diberikan. Apabila, menuliskan batas bawah atau batas atas none maka tidak ada batasan (tak hingga) untuk hasil akhir nantinya. Untuk mempersingkat penulisan, ketika tidak adanya batas atas atau batas bawah untuk hasil akhir, maka tanpa menuliskan parameter upBound atau lowBound sudah diartikan bahwa batas atas atau batas bawahnya ialah tak hingga. Namun, karena permasalahan ini merupakan permasalahan produksi maka diperlukan batas bawah yaitu 0, karena tidak mungkin hasil produksi merupakan bernilai negatif. Kemudian, untuk parameter cat atau category merupakan kategori hasil variabel keputusan yang ada. Terdapat 3 pilihan kategori untuk variabel keputusan, yaitu integer, binary, atau continuous. Apabila, tidak menuliskan parameter cat pada program, maka akan didefinisikan hasil variabel keputuan berupa continuous. Terakhir,
untuk parameter e digunakan apabila model permasalahan ialah berbasis kolom yang berkaitan dengan keberadaan variabel dalam fungsi dan batasan tujuan. Tanpa menuliskan parameter e maka akan terdefinisikan sebagai permasalahan yang bukan bebasis kolom. Berikut contoh penulisan menggunakan LpVariable
Gambar 3. 2 Penulisan variabel dalam PuLP
Pada gambar 3.2 ditunjukkan bahwa nama variabel yang digunakan ialah donat reguler untuk variabel x dan donat baby untuk variabel y. Kemudian untuk kedua variabel memiliki batas bawah ialah 0 dikarenakan tidak akan mungkin memproduksi donat sebanyak bilangan negatif, sedangkan untuk batas atas yang dipilih ialah None atau tidak ada dengan kata lain batas atas untuk produksi kedua donat ialah tak hingga.
Lalu untuk kategori yang dipilih ialah Integer atau bilangan bulat karena tidak dimungkinkan untuk membuat donat dengan pecahan.
3. Identifikasi fungsi tujuan dan fungsi kendala
Setelah mendefinisikan model dan variabel keputusan yang akan dipakai, maka langkah selanjutnya yang akan digunakan ialah menuliskan fungsi tujuan dan kendala dari permasalahan yang akan diselesaikan.
Dalam menuliskan fungsi tujuan dan kendala, kita tidak memerlukan pulp classes atau memanggil perintah lainnya dalam PuLP atau bahkan menuliskan daftar atau matriks dari kendala yang ada, karena library ini akan mengenal mana yang menjadi fungsi tujuan dan mana yang akan menjadi kendala berdasarkan operator pembanding yang digunakan.
Sehingga, apabila kombinasi angka yang dikenakan operator aritmetika dan operator pembanding, maka PuLP akan mengetahui bahwa ekspresi tersebut ialah kendala. Dalam menuliskan kendala dan fungsi tujuan, diawali dengan menuliskan satu kata sebelum tanda += yang seragam dengan satu kata yang dituliskan pada pengidentifikasian model
permasalahan. Untuk menuliskan fungsi tujuan dan kendala menggunakan tanda += yang berarti menambahkan nilai yang besarnya sama dengan ekspresi yang dituliskan pada model matematika yang ditentukan. Untuk operator pembanding, terdapat 3 pilihan yaitu: >=,<=, dan ==. Dengan adanya kemampuan memilih salah satu operator pembanding yang ada, sehingga tidak perlu melakukan pengubahan operator pembanding pada kendala yang tidak memiliki tanda kurang dari sama dengan (<=). Ketika dilakukan perkalian antara variabel keputusan dengan sebuah skalar atau membuat kombinasi linear dari beberapa variabel keputusan maka akan didapati tampilan perintah LpAffineExpression yang mewakili ekspresi linear. Selanjutnya, dapat juga dilakukan penggabungan ekspresi linear, variabel, dan skalar dengan operator pembanding yang akan menghasilkan tampilan LpConstaint yang merepresentasikan batasan linear dari model yang ada.
Berikut merupakan contoh penulisan fungsi tujuan pada PuLP.
Penulisan fungsi tujuan dan fungsi kendala ialah sebagai berikut.
Gambar 3. 3 Penulisan fungsi tujuan dan kendala dalam PuLP 4. Menuliskan PuLP solver dan PuLP constant serta merapikan luaran.
Penyelesaian masalah dalam menggunakan library Pulp ialah menggunakan metode default atau metode standar yang sudah disediakan yaitu CBC atau metode COIN Cut Branch. Berikut akan ditunjukkan cara penggunaan perintah solver default yaitu CBC.
PULP_CBC_CMD(mip=True, msg=True, timeLimit=None, frac Gap=None, maxSeconds=None, gapRel=None, gapAbs=None, presolve
=None, cuts=None, strong=None, options=None, warmStart=False, kee pFiles=False, path=None, threads=None, logPath=None, mip_start=Fa lse)
Pada penulisan perintah untuk menjalankan perintah ini memiliki banyak parameter yang dapat dituliskan. Akan tetapi, semua parameter tidak perlu dituliskan semua, sesuai dengan kebutuhan atau sesuai dengan input yang dibutuhkan. Karena di dalam parameter tersebut semuanya sudah memiliki isian, tinggal mengikuti apa yang sekiranya ingin diubah untuk menjalankan program. Biasanya untuk parameter yang dipilih hanya 3 terdepan yaitu, parameter mip yang merupakan parameter berjenis Boolean yang apabila kita mengisikan “true” berarti permasalahan tersebut permasalahan integer, kemudian untuk parameter msg yang merupakan parameter berjenis data Boolean yang bertujuan untuk menunjukkan keterangan langkah-langkah pekerjaan yang apabila diisi
“False” akan mempersingkat hasil luaran, lalu yang terakhir ialah parameter timeLimit yang bertujuan untuk memberikan batas waktu dalam detik kepada library dalam menyelesaikan permasalahan yang ada. Akan tetapi, apabila memang tidak ada kriteria khusus dalam penggunaan parameter dan tidak akan mengubah parameter yang sudah teratur seperti diatas, maka tidak menuliskan parameter juga merupakan hal yang sah.
Selanjutnya, akan di tunjukkan luaran status penyelesaian permasalahan yang ada. Akan digunakan dokumentasi PuLP yang lainnya, yaitu PuLP constant yang berupa perintah LpStatus. Setelah dipanggil maka untuk menampilkan luaran LpStatus ialah dengan menuliskan perintah seperti contoh berikut ini.
print(f"status: {model.status}, {LpStatus[model.status]}")
Menggunakan perintah print untuk menuliskan secara rapi luaran LpStatus. Perintah model.status akan menghasilkan luaran berupa angka yang mewakili kondisi hasil akhir, sedangkan LpStatus[model.status] akan
menghasilkan luaran berupa kata yang menggambarkan kondisi hasil akhir.Berikut adalah cara menuliskan perintah solver dan LpStatus dalam PuLP.
Gambar 3. 4 Penulisan perintah menampilkan output dalam PuLP
Pada gambar 3.4, penulisan perintah model.solve ialah untuk menyelesaikan permasalahan yang telah dituliskan. Kemudian, metode yang digunakan ialah metode standar yaitu PULP_CBC_CMD yang ditambahkan perintah mip yaitu perintah yang menunjukkan bahwa permasalahan ini ialah memiliki hasil integer dan timeLimit untuk memberikan perintah batasan waktu yang diberikan pada metode untuk menyelesaikan masalah. Kemudian untuk menampilkan luaran hasil perhitungan ialah menggunakan perintah x.varValue dan y.varValue untuk menampilkan hasil akhir variabel. Kemudian, untuk mudah dibaca maka ditambahkan perintah print untuk menuliskan pengantar pembaca untuk membaca hasil akhir yang ada. Lalu, untuk perintah LpStatus digunakan untuk mengetahui apakah sudah optimal hasil yang keluarkan oleh program yang dibuat. Apabila sudah optimal, maka hasil perhitungan sudah benar, dan bisa diberikan perintah model.objective.value untuk mengetahui nilai fungsi tujuan yang didapatkan dari kombinasi produk yang didapatkan.
5. Tampilan luaran yang didapatkan
Setelah menyelesaikan penulisan script untuk program yang akan digunakan, maka dapat dilanjutkan dengan menjalankan program dan melihat hasil akhir program. Menjalankan program dapat menekan
perintah Run atau F5. Hasil program akan muncul di layar Shell (bawah layar untuk menuliskan script). Maka hasil akhir program menjadi seperti berikut ini.
Gambar 3. 5 Tampilan luaran program yang disusun.
Pada gambar diatas ditujukan bahwa hasil luaran yang dihasilkan sama dengan hasil yang dihitung secara manual. Kombinasi produk yang harus dihasilkan ialah 30 kotak donat reguler dan 0 kotak donat baby yang akan menghasilkan keuntungan sebesar Rp 344.900. Untuk total time yang ditunjukkan di atas merupakan waktu yang dibutuhkan oleh library untuk menentukan hasil akhir dan total iterasi ialah banyaknya pengulangan algoritma yang digunakan untuk menentukan hasil akhir. Ditunjukkan pada gambar bahwa waktu yang dibutuhkan ialah 0.01 detik dan iterasi yang digunakan ialah 0 kali. Kemudian, status akhir dari penggunaan library PuLP untuk menentukan hasil akhir ialah 1 yang berarti hasil akhir sudah optimal.
Dengan hasil ini menunjukkan bahwa hasil perhitungan manual dan perhitungan berbantu metode PuLP memiliki hasil yang sama ialah produsen harus menghasilkan 30 kotak donat reguler untuk mendapatkan hasil yang maksimal sebesar Rp 344900. Hasil ini menunjukkan persamaan dengan produksi yang dilakukan pada tanggal 1 sampai 7 Maret 2021. Pada minggu itu, produsen hanya memproduksi 15 kotak donat reguler, sehingga keuntungan pada minggu tersebut kurang maksimal.
Selain hal itu, terdapat kendala faktor produksi yang membatasi bahan baku masih ada yang tersisa. Bahan baku kentang dalam periode satu minggu memiliki stok 5000 gram ternyata masih memiliki sisa stok sebanyak 3500 gram. Bahan baku gula pasir dalam periode satu minggu memiliki stok 3000 gram ternyata masih memiliki sisa stok sebanyak 2400 gram. Bahan baku fermipan atau pengembang dalam periode satu minggu memiliki stok 80 gram ternyata masih memiliki sisa stok sebanyak 20 gram. Bahan baku susu dalam periode satu minggu memiliki stok 500 gram ternyata masih memiliki sisa stok sebanyak 200 gram. Bahan baku mentega dalam periode satu minggu memiliki stok 1000 gram ternyata masih memiliki sisa stok sebanyak 550 gram. Bahan baku kuning telur dalam periode satu minggu memiliki stok 5120 gram ternyata masih memiliki sisa stok sebanyak 1280 gram. Sedangkan untuk bahan baku tepung terigu sudah optimal. Sehingga dengan adanya hal ini, pengusaha perlu memperhitungkan kembali dalam penyediaan bahan baku yang digunakan. Sehingga, dengan membeli bahan baku sesuai dengan perhitungan yang tepat maka akan meminimalisir pengeluaran untuk membeli bahan baku.