Mix Integer Non Linear Programming Menggunakan SCIP

Untuk Mix Integer Non Linear Programming, kita akan ubah persamaan dari modul sebelumnya dengan syarat variable x adalah integer.

#objective function
max x + xy

#constraint
-x + 2xy <= 8
2x + y <= 14
2x - y <= 10
0 <= x <= 10
0 <= y <= 10

x integer
#import library yang diperlukan
from pyscipopt import Model

#inisialisasi mode
model = Model('namaModel')

#definisikan variable, perhatikan variable x didefinisikan sebagai integer.
#perhatikan juga untuk nonlinear programming, objective function harus didefinisikan dalam variable (variable z).

x = model.addVar('x', vtype='INTEGER')
y = model.addVar('y')
z = model.addVar('z')

#set objective function
model.setObjective(z, sense='maximize')

#definisikan constraint
model.addCons(z == x+y*x)
model.addCons(-x+2*y*x<=8)
model.addCons(2*x+y<=14)
model.addCons(2*x-y<=10)

model.optimize()

sol = model.getBestSol()

print('x=',sol[x])
print('y=',sol[y])
PS F:\Project\optimizationpy> python minlp_scip.py
feasible solution found by trivial heuristic after 0.0 seconds, objective value 0.000000e+00
presolving:

---
--- log truncated
---

presolved problem has 3 variables (0 bin, 1 int, 0 impl, 2 cont) and 4 constraints
      2 constraints of type <varbound>
      2 constraints of type <quadratic>
Presolving Time: 0.00

---
--- log truncated



---

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 1.00
Solving Nodes      : 8
Primal Bound       : +1.15000000000000e+01 (8 solutions)
Dual Bound         : +1.15000000000000e+01
Gap                : 0.00 %
x= 5.0
y= 1.3000000000000005

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.

Perbedaan dari code sebelumnya, untuk MINLP menggunakan scip, hanya pada model matematika dan deklarasi variable x sebagai integer.

Kesimpulan

Setelah mengikuti modul-modul dari tutorial Optimization, dapat kita bandingkan, library SCIP sangat mudah digunakan. Mampu menyelesaikan masalah linear dan nonlinear baik untuk mixed integer atau continous variable.

Namun kekurangan dari SCIP adalah kita tidak bisa menentukan solver yang akan digunakan.

Dengan berakhirnya modul ini, tutorial optimization menggunakan Python telah selesai. Anda dapat mempelajari lebih jauh mengenenai optiomzation dengan mengikuti tutorial dari Google OR-Tools di https://developers.google.com/optimization/introduction/overview

Sharing is caring:

Leave a Comment