Kalau dulu multi objective diselesaikan dengan memberi bobot terhadap tiap-tiap fungsi objektif atau dengan hierarki, saat ini teknik tersebut mulai ditinggalkan dan diganti dengan non-dominate objectif atau dikenal dengan istilah pareto, yang diusulkan pertama kali oleh pareto pada tahun 1896. Jadi kita tidak memaksakan memberi bobot terhadap fungsi-fungsi objektif dan memberikan range tertentu terhadap hasil optimasi. Range tersebut makin luas makin baik (wide spread). Misalnya penjelasan yang dapat dilihat di situs ini, kita coba jalankan dengan Matlab.
Ada dua fungsi objektif yang akan dicari nilai optimalnya (biasanya nilai minimum). Perhatikan dua grafik ini yang memiliki dua nilai minimum tergantung fungsi mana yang digunakan.
Untuk melakukan optimasi terhadap dua objektif fungsi di atas (fungsi garis merah dan garis biru). Sebelumnya buka matlab editor untuk membuat satu fungsi baru dengan mengetik di command window:
>>edit simple_multiobjective
Ternyata Matlab sudah membuatkan fungsi tersebut, sepertinya untuk demonstrasi optimasi multiobjektif. Untuk mengoptimasinya, fungsi yang digunakan di Matlab adalah gamultiobj. Ketik atau copas kode ini ke command window:
-
FitnessFunction = @simple_multiobjective;
-
numberOfVariables = 1;
-
[x,fval] = gamultiobj(FitnessFunction,numberOfVariables);
Di sini disebutkan jumlah variabel 1, yaitu x saja. Kemudian di sebelah kiri sama dengan ada x dan fval sebagai hasil dari optimasinya. Untuk melihat isinya dapat kita ketik di command window x dan fval tersebut. Apa hasilnya?
Hasilnya adalah matlab memberikan beberapa hasil optimasi (berupa range) kombinasi dari cenderung optimal di fungsi satu hingga ke optimal di fungsi dua. Ketik di command window untuk melihat grafiknya:
>> plot(fval(:,1),fval(:,2),’*’)
Hasilnya berupa grafik pareto dari nilai optimal dua fungsi tersebut. Di sini bobot bervariasi dari kecenderungan ke fval pertama hingga ke fval kedua. Fval adalah nilai optimal fungsi-fungsi fitness nya.
Bagaimana jika tiga fungsi objektif? Tentu saja kalau ingin divisualisasikan nanti berupa grafik tiga dimensi. Bagaimana jika empat objektif? Seperti disertasi saya, tentu saja sulit digambarkan. Matlab juga menyediakan visualisasi yang bagus (running ketika program berjalan) dengan memasukan kode di command windows sebagai berikut:
-
A = []; b = [];
-
Aeq = []; beq = [];
-
lb = -1.5;
-
ub = 0;
-
x = gamultiobj(FitnessFunction,numberOfVariables,A,b,Aeq,beq,lb,ub);
-
options = gaoptimset(‘PlotFcns’,{@gaplotpareto,@gaplotscorediversity});
-
gamultiobj(FitnessFunction,numberOfVariables,[],[],[],[],lb,ub,options);
Satu respons untuk “Simple Pareto Front dengan Matlab (Multiobjective)”