Melanjutkan solving non linear problem, pada modul ini akan digunakan AML SCIP.
Persamaan yang digunakan masih sama dengan modul non linear sebelumnya.
#objective function
max x + xy
#constraint
-x + 2xy <= 8
2x + y <= 14
2x - y <= 10
0 <= x <= 10
0 <= y <= 10
#import library yang diperlukan from pyscipopt import Model #inisialisasi model model = Model('namamodel') #definisikan variable. Tambahkan variable z untuk menyimpan objective function x = model.addVar('x') y = model.addVar('y') z = model.addVar('z') #definisikan objective function model.setObjective(z, sense='maximize') #definisikan constraint, perhatikan persamaan dari objective function didefinsikan melalui 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('--------------------------------------------------------') print('x=',sol[x]) print('y=',sol[y])
F:\Project\optimizationpy> python nonlp_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, 0 int, 0 impl, 3 cont) and 4 constraints
2 constraints of type <linear>
2 constraints of type <quadratic>
Presolving Time: 0.00
transformed 1/1 original solutions to the transformed problem space
----
--- log truncated
-----
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 0.00
Solving Nodes : 1
Primal Bound : +1.24100732434056e+01 (2 solutions)
Dual Bound : +1.24100732434056e+01
Gap : 0.00 %
--------------------------------------------------------
x= 5.6067153622763275
y= 1.2134302245668338
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.
Yang perlu diperhatikan adalah, untuk programming non linear, persamaan objective function harus di definisikan dalam constraint.
z = model.addVar('z')
model.setObjective(z, sense='maximize')
model.addCons(z==x+y*x)