Mixed Integer Linear Programming Menggunakan Pyomo

Mixed integer problem terjadi jika ada variable yang diharuskan menggunakan bilangan bulat.

Menggunakan persamaan sebelumnya, kita modifikasi 1 persamaan, yaitu -x + 2y <= 8 menjadi -x + 2y <= 7. Agar menghasilkan nilai optimal dengan angka desimal.

#objective function

  max x + y

#constraint

  -x + 2y <= 7
  2x + y <= 14
  2x - y <= 10
  0 <= x <= 10
  0 <= y <= 10

x integer

Dikarenakan x harus integer, maka nilai optimal yang didapatkan harus untuk x harus bilangan bulat. (lihat gambar dibawah).

#import library yang digunakan
import pyomo.environ as pyo
from pyomo.environ import *
from pyomo.opt import SolverFactory

model = pyo.ConcreteModel()

#definisikan variable
model.x = pyo.Var(within=Integers, bounds=(0,10))
model.y = pyo.Var(bounds=(0,10))
x = model.x
y = model.y

#definisikan constraint
model.C1 = pyo.Constraint(expr= -x+2*y<=7)
model.C2 = pyo.Constraint(expr= 2*x+y<=14)
model.C3 = pyo.Constraint(expr= 2*x-y<=10)

#definisikan objective function
model.obj = pyo.Objective(expr= x+y, sense=maximize)

#pilih solver dan lakukan solving
opt = SolverFactory('glpk')
opt.solve(model)

model.pprint()

print('x:', pyo.value(x))
print('y:', pyo.value(y))
2 Var Declarations
    x : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain  
        None :     0 :   4.0 :    10 : False : False : Integers
    y : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain  
        None :     0 :   5.5 :    10 : False : False :  Reals  

1 Objective Declarations
    obj : Size=1, Index=None, Active=True
        Key  : Active : Sense    : Expression
        None :   True : maximize : x + y

3 Constraint Declarations
    C1 : Size=1, Index=None, Active=True
        Key  : Lower : Body      : Upper : Active
        None :  -Inf : - x + 2*y :   7.0 :   True
    C2 : Size=1, Index=None, Active=True
        Key  : Lower : Body    : Upper : Active
        None :  -Inf : 2*x + y :  14.0 :   True
    C3 : Size=1, Index=None, Active=True
        Key  : Lower : Body    : Upper : Active
        None :  -Inf : 2*x - y :  10.0 :   True

6 Declarations: x y C1 C2 C3 obj
x: 4.0
y: 5.5

Pembahasan Code

Silakan lihat komentar pada code diatas untuk melihat penjelasan program. Dapat Anda perhatikan, proses dan logika coding tidak ada yang berubah dengan linear programming sebelumnya.

Perbadaanya saat mendefinisikan variable x.

model.x = pyo.Var(within=Integers, bounds=(0,10))
Sharing is caring:

Leave a Comment