alexa-tracking
Kategori
Kategori
Home / FORUM / All / Tech / ... / Programmer Forum /
Linear Programming and Simplex
KASKUS
51
244
https://www.kaskus.co.id/thread/5dc1b6048012ae79693fcfbd/linear-programming-and-simplex

Linear Programming and Simplex

Linear Programming and Simplex


Linear Programming and Simplex

Yuk coba library untuk memecahkan kasus-kasus seperti Linear Programming dan Simplex dengan menggunakan GLPK https://www.gnu.org/software/glpk/

Salah satunya optlang yang merupakan interface terhadap GLPK, mari kita coba bandingkan dengan scipy. Agar lebih mudah, penulis langsung comot contoh kasus Linear Programming dan Simplex dari situs yang sudah ada sehingga bagi kalian yang belum paham apa itu Linear Programming dan Simplex bisa sekalian belajar dasar-dasarnya, terutama bagi kalian yang ambil Mata Kuliah Riset Operasi (Operations research).

Linear Programming
Contoh sederhana pada linear programming bisa diambil di link berikut


http://materi-kuliah-13.blogspot.com...ogramming.html
PT. LUNATEKSTIL memiliki sebuah pabrik yang akan memproduksi 2 jenis  produk, yaitu kain sutera dan kain wol. Untuk  memproduksi  kedua produk  diperlukan bahan baku benang sutera, bahan baku benang wol dan tenaga  kerja. Maksimum penyediaan benang sutera adalah 60 kg per  hari, benang wol 30 kg per hari dan tenaga kerja 40 jam per hari. Kebutuhan setiap unit produk akan bahan baku dan  jam  tenaga kerja dapat dilihat dalam  tabel berikut:

Linear Programming and Simplex


Kedua jenis produk memberikan keuntungan  sebesar Rp  40  juta  untuk  kain sutera dan Rp 30 juta untuk kain wol. Masalahnya adalah bagaimana menentukan jumlah unit setiap jenis produk yang akan diproduksi setiap hari agar keuntungan yang diperoleh bisa maksimal?

Linear Programming and Simplex

Penulis menggunakan library ada 2 yaitu optlang dan scipy, untuk library optlang bisa download di https://github.com/biosustain/optlang;  kalau mau belajar cara install python bisa beli buku penulis di http://www.softscients.web.id/2018/1...on-dengan.html;


Code:
from optlang import Model, Variable, Constraint, Objective


x1 = Variable('x1',lb=1)
x2 = Variable('x2',lb=1)


c1 = Constraint(4*x1+3*x2,ub=240)
c2 = Constraint(2*x1+x2,ub=100)
obj = Objective(700*x1+500*x2,direction='max')
model = Model(name='Linear Programming')
model.objective = obj
model.add([c1, c2])


status = model.optimize()

print("Status:", model.status)
print("Fungsi Objektif:", model.objective.value)
print("----------")
for var_name, var in model.variables.iteritems():
    print(var_name, "=", var.primal)




Hasil


Code:
Status: optimal
Fungsi Objektif: 41000.0
----------
x1 = 30.0
x2 = 40.0




Kalau menggunakan scipy agak sedikit berbeda, seperti berikut
https://docs.scipy.org/doc/scipy-0.1...e.linprog.html


Code:
import numpy as np
from scipy.optimize import linprog


c = np.array([700,500])
A = np.array([[4,3],[2,1]])
b = np.array([240,100])
x1_bound = (0,None)
x2_bound = (0,None)


#LP pada scipy hanya support pada fungsi minimisasi saja
#This LP problem has a maximize objective function and linprog supports minimize problems. To solve it:
res = linprog(-c, A_ub=A, b_ub=b, bounds=(x1_bound,x2_bound),method='simplex',options={"disp": True})
print(res)
print('\n')
print(f'x1 = {res.x[0]}, x2 = {res.x[1]}, z = {res.fun*-1}')




Hasil


Code:
Optimization terminated successfully.
        Current function value: -41000.000000
        Iterations: 2
    con: array([], dtype=float64)
    fun: -41000.0
message: 'Optimization terminated successfully.'
    nit: 2
  slack: array([0., 0.])
  status: 0
success: True
      x: array([30., 40.])


x1 = 30.0, x2 = 40.0, z = 41000.0





Simplex
Pada kasus simplex bisa ditemui di https://duniakumu.com/program-linier...etode-simplek/

Linear Programming and Simplex
Kamu bisa menggunakan optlang sesuai dengan kode berikut


Code:
from optlang import Model, Variable, Constraint, Objective


x1 = Variable('x1',lb=0)
x2 = Variable('x2',lb=0)


c1 = Constraint(2*x1,ub=8)
c2 = Constraint(3*x2,ub=15)
c3 = Constraint(6*x1+5*x2,ub=30)
obj = Objective(3*x1+5*x2,direction='max')
model = Model(name='Simple model')
model.objective = obj
model.add([c1, c2,c3])


status = model.optimize()

print("status:", model.status)
print("objective value:", model.objective.value)
print("----------")
for var_name, var in model.variables.iteritems():
    print(var_name, "=", var.primal)



Hasil

Code:
status: optimal
objective value: 27.5
----------
x1 = 0.8333333333333334
x2 = 5.0



Atau menggunakan scipy

Code:
import numpy as np
from scipy.optimize import linprog


c = np.array([3,5])
A = np.array([[2,0],[0,3],[6,5]])
b = np.array([8,15,30])
x1_bound = (0,None)
x2_bound = (0,None)



res = linprog(-c, A_ub=A, b_ub=b, bounds=(x1_bound,x2_bound),method='simplex',options={"disp": True})
print(res)
print('\n')
print(f'x1 = {res.x[0]}, x2 = {res.x[1]}, z = {res.fun*-1}')




Code:
Optimization terminated successfully.
        Current function value: -27.500000 
        Iterations: 3
    con: array([], dtype=float64)
    fun: -27.5
message: 'Optimization terminated successfully.'
    nit: 3
  slack: array([6.33333333, 0.        , 0.        ])
  status: 0
success: True
      x: array([0.83333333, 5.        ])


x1 = 0.8333333333333335, x2 = 5.0, z = 27.5




Sangat mudah bukan?

ref: https://www.softscients.web.id/2019/...d-simplex.html


GDP Network
© 2019 KASKUS, PT Darta Media Indonesia. All rights reserved
Ikuti KASKUS di