Oke langsung saja ini dia contoh kasusnya...!!!
Amir adalah seorang mahasiswa informatika yang sangat rajin dan pandai. Suatu hari dia mendapatkan PR di kampus untuk mengerjakan soal itung - itungan tentang perceptron pada matakuliah kecerdasan buatan. Inti dari perceptron adalah melakukan perhitungan berulang - ulang sampai didaptkan nilai yang diinginkan. Ketika Amir melihat soal yang diberikan, entah mengapa Amir tiba-tiba merasa malas untuk mengerjakan. Pada saat itu ia sangat malas untuk melakukan perhitungan apalagi dengan jumlah yang banyak, apalagi perhitungan tersebut harus ia tulis di lembaran kertas folio. Amir ingin mencontek tapi ia tahu itu adalah perbuatan tercela dan dapat menimbulkan dosa. Akhirnya ia memiliki ide menyewa programmer untuk mengerjakan tugasnya. Ia ingin dibuatkan sebuah program yang dapat mengerjakan perhitungan perceptron dimana hasilnya akan ditampilkan di layar. Dengan program ini Amir bisa langsung menyalin tanpa harus menghitung secara manual. Berikut adalah aturan pada perceptron:
- Terdapat parameter x1,x2,xbias sebagai inputan, output / target, bobot yaitu w1, w2, dan wb(bobot bias), nilai threshold(teta) dan learningrate(alpha), yin, dan fungsi aktivasi.
-
Data ke x1 x2 xbias target 1 1 1 1 1 2 1 0 1 -1 3 0 1 1 -1 4 0 0 1 -1 - lakukan perhitungan yin = wb + jumlah(xi * wi).
- Hitung fungsi aktivasi: hasil (y) bernilai 1 jika yin > teta, y bernilai 0 jika -teta < yin < teta, dan y = -1 jika yin < teta.
- Kemudian hasil perhitungan fungsi aktivasi dibandingkan dengan variabel target.Apabila tidak sama maka semua bobot x dan bobot bias(w1, w2 dan w3) harus diupdate(no.6 dan no.7). Jika sama tidak diupdate.
- update / ganti bobot x lama dg yang baru => xi(baru) = bobot x ke-i yang lama + alpha * theta * target ke-i.
- update / ganti bobot bias lama dengan yg baru => wb(baru) = wb-lama + alpha * theta.
- Proses diatas (no.1-7) terus dilakukan sebanyak jumlah data inputan (dalam kasus ada 4 data).
- Langkah no.1 - no.8 disebut satu epoch (satu putaran). Putaran (no.1 - 8) akan terus dilakukan sampai dalam suatu putaran dimana data 1 sampai 4 tidak mengalami update lagi
Sekarang silahkan coba koding sendiri, kalau merasa kesulitan coba lihat kodingku dibawah ini, hehehe
Buat kelas Rules (Bukan kelas main..!!!)
public class Rules { private int[][] input = new int[4][2]; private int[] bias = new int[4]; private int[] target = new int[4]; private double[] weight = new double[3]; private double alpha,teta,yin; int epoch, valid, post; double temp; private boolean sukses = false; public Rules(int[][]input, int[]bias, int[] target, double[] weight, double alpha, double teta ){ this.input = input; this.bias = bias; this.target = target; this.weight = weight; this.alpha = alpha; this.teta = teta; valid = 0; post = 1; epoch = 1; } public void setYin(int data){ yin = weight[weight.length - 1] + (input[data][0] * weight[0]) + (input[data][1] * weight[1]); System.out.println ("yin = " + weight[weight.length - 1] + " + " + "(" + input[data][0] + " * " + weight[0] + ")" + " + " + "(" + input[data][1] + " * " + weight[1] + ")" + " = " + yin); } public double getYin(){ return yin; } public int ActFunc(){ if (yin > teta){ return 1; }else if (yin > -teta && yin < teta){ return 0; }else{ return -1; } } //bobot baru public void setWeight(int post){ for (int x = 0; x < 3; x++){ if (x == weight.length - 1){ temp = weight[weight.length - 1]; weight[weight.length - 1] += alpha * target[post]; System.out.println("weight b" + " = " + temp + " + " + alpha + " * " + target[post] + " = " + weight[weight.length - 1]); }else{ temp = weight[x]; weight[x] += alpha * target[post] * (double)input[post][x]; System.out.println("weight " + (x + 1) + " = " + temp + " + " + alpha + " * " + target[post] + " * " + (double)input[post][x] + " = " + weight[x]); } } } public double[] getWeight(){ return weight; } public void process(){ do { System.out.println ("epoch: " + epoch + "\n--------"); for (int x = 0; x < 4; x++){ System.out.println("DATA-" + (x+1)); setYin(x); if (ActFunc() == target[x]){ valid += 1; }else{ System.out.println("Target is " + target[x]); System.out.println("updating weight..."); valid += 0; setWeight(x); } } if (valid == 4){ sukses = true; }else { valid = 0; epoch ++; } System.out.println(""); }while (sukses == false); System.out.println("hasilnya:"); for (int x = 0; x < 3; x++){ if (x == 2){ System.out.println("weight b" + " => " + weight[x]); }else { System.out.println("weight " + (x+1) + " => " + weight[x]); } } } }
dan yang ini kelas main-nya:
public class MainRul { public static void main(String[] args) { // TODO Auto-generated method stub int input[][] = new int[4][2]; input [0][0] = 1; input [0][1] = 1; input [1][0] = 1; input [1][1] = 0; input [2][0] = 0; input [2][1] = 1; input [3][0] = 0; input [3][1] = 0; int[] bias = {1,1,1,1}; int[] target = {1,-1,-1,-1}; double[] weight = {0,0,0}; double alpha = 0.8; double teta = 0.5; Rules rule = new Rules(input, bias, target, weight, alpha, teta); rule.process(); } }
Oke gimana udah bisa jalan kodingnya? Mungkin itu aja tutorialnya semoga bermanfaat, terimakasih, wasalamualikum dulu ya daaah...
Sign up here with your email
ConversionConversion EmoticonEmoticon