Menyelesaikan Permasalahan Linear Programming Menggunakan Python PuLP
Hallo para pembaca yang budiman, ini adalah kali pertama Saya membuat artikel di Medium. Jadi harap maklum jika artikel yang Saya buat masih terdapat kesalahan maupun kekurangan.
Oke, jadi apa itu PuLP? PuLP adalah pustaka yang ditulis dengan bahasa python untuk menyelesaikan permasalahan Linear Programming. Library PuLP ini setahu Saya tidak bisa digunakan untuk kasus Non Linear Programming. Untuk menyelesaikan permasalahan Non Linear Programming, Anda dapat menggunakan library SciPy, Pyomo, atau Pyopt.
Saat ini banyak software untuk menyelesaikan permasalahan Linear Programming seperti Lindo, Microsoft Excel (Solver), ORSTAT dan masih banyak lagi. Penggunaan python ditambah dengan library PuLP adalah alternatif lain selain software di atas. Supaya dapat menggunakan PuLP, yang kita perlukan yaitu software python serta library PuLP. Anda dapat mencobanya dengan menggunakan IDLE python atau Jupyter Notebook. Saya lebih suka menggunakan Jupyter Notebook.
Setelah PuLP terinstall, kemudian kita import library PuLP nya dengan mengetik “from pulp import *”. Fungsi dari tanda asterisk (*) adalah supaya kita dapat mengakses semua fungsi dan method pada PuLP tanpa menuliskan kata pulp di awal fungsi. Misalkan kita ingin memanggil fungsi untuk mendefinisikan variabel cukup menuliskan “LpVariable()” tidak perlu “pulp.LpVariable()”.
#import library pulp
from pulp import *
Oke, selanjutnya kita akan mencoba menyelesaikan permasalahan Linear Programming berikut:
"""
merumuskan masalah, LpMinimize untuk minimasi, LpMaximize untuk maksimasi. Penulisan dalam tanda kutip bebas asalkan jangan menggunakan spasi(bisa menggunakan tanda _, contoh Minimize_Cost)."""problem = LpProblem("Minimize", LpMinimize)
Selanjutnya kita tentukan variable yang akan digunakan. Ada dua cara untuk menentukan variable, dapat menggunakan LpVariable() atau dengan tambahan LpVariable.dicts(). LpVariable.dicts() lebih efisien karena dapat digunakan untuk mendefinisikan banyak variable hanya dalam satu baris kode.
#mendefinisikan variabel (4 variabel)X = LpVariable.dicts(name="X", indexs=[i for i in range(0,4)], lowBound=0, upBound=None, cat='Continuous')#out: {0: X_0, 1: X_1, 2: X_2, 3: X_3}"""
Keterangan:-name = nama variabel-indexs = jumlah variable, saya menggunakan list comprehension, jika misal 100 variable cukup dengan [i for i in range(0,100). Variabel pertama dimulai dari X_0-lowBound = batas bawah variabel, karena semua variabel >=0 maka batas bawahnya 0-upBound = batas atas variabel, jika tidak ada tidak perlu dimasukkan-cat = jenis variabel, ada tiga kategori yaitu "Continous"(pecahan), "Integer"(bulat), "Binary"(1/0)Jika tipe variabelnya tidak sama dapat dipisah, misal ternyata ada satu variabel yang berbeda bisa dengan menambahkan LpVariable()yang di-assign ke dalam sebuah variable yang berbeda. Contoh X2 = LpVariable()"""
Setelah mendefinisikan variabel, kemudian kita dapat menambahkan fungsi tujuan maupun constrain. Untuk mengakses variabel dilakukan dengan cara mengakses key yang tersimpan dalam dictionary X.
#menambahkan fungsi tujuan
problem += 50*X[0] + 20*X[1] + 30*X[2] + 80*X[3]#menambahkan constrain, tidak harus rapi
problem += 400*X[0] + 200*X[1] + 150*X[2] + 500*X[3] >= 500
problem += 3*X[0] + 3*X[1] >= 6
problem += 2*X[0] + 2*X[1] + 4*X[2] + 4*X[3] >= 10
problem += 2*X[0] + 4*X[1] + X[2] + 5*X[3] >= 8
Setelah semua constrain dan fungsi tujuan dimasukkan, langkah selanjutnya yaitu menyelesaikan permasalahan dengan menggunakan method .solve()
#selesaikan problem
problem.solve()
Tampilannya kurang lebih seperti ini
#mengecek nilai fungsi tujuan
print(f"Nilai tujuan: {value(problem.objective)}")#out: 85.0#menampilkan semua nilai variabel, agak sedikit tricky
for v in problem.variables():
print(f"{v} = {value(v)}" )#output
#X_0 = 0.0
#X_1 = 2.0
#X_2 = 1.5
#X_3 = 0.0
Permasalahan di atas sudah terselesaikan, Anda dapat mencoba untuk menyelesaikan permasalahan Linear Programming lainnya. Kunjungi https://coin-or.github.io/pulp/ untuk melihat dokumentasi serta meningkatkan pemahaman mengenai library PuLP. Selamat Mencoba :)