Genetic Algorithm

9
Algoritma Genetika Analisis Numerik (Dosen: Kuntjoro Adji Sidarto) Muhaza Liebenlito(20912020) December 16, 2012 1 Kasus 1 Diberikan fungsi: f (x)= x 2 - 10 cos(2πx) + 10, -5 x 5. Kemudian akan dicari nilai minimum dari fungsi tersebut dengan menggunakan algoritma genetika. Jika di plot fungsi tersebut akan menghasilkan grafik seperti pada Figure 1, dimana nilai minimum dari fungsi tersebut sekitar 0.552288 di x = 0. Pada kasus ini, diambil banyaknya populasi adalah 25 kromosom, dimana jumlah gen Figure 1: Grafik Fungsi f (x)= x 2 - 10 cos(2πx) + 10, -5 x 5. pada masing-masing kromosom adalah 4, sedangkan program ini berhenti pada iterasi ke 1000. Seperti yang terlihat pada Figure 2 terdapat 25 kromosom awal yang dibangk- itkan dari bilangan acak kemdian setelah melalui proses seleksi, crossover, dan mutasi, dihasilkan 25 kromosom yang baru dan terbaik dan dicari gen mana yang akan meng- hasilkan nilai minimum dari fungsi. Sehingga aproksimasi nilai minimun dari fungsi tersebut adalah 1 dengan susunan gen terbaiknya yaitu 1 0 0 1 dan 0 1 1 0. 1

description

nilai minimum dari fungsi tersebut dengan menggunakan algoritmagenetika

Transcript of Genetic Algorithm

  • Algoritma Genetika

    Analisis Numerik(Dosen: Kuntjoro Adji Sidarto)

    Muhaza Liebenlito(20912020)

    December 16, 2012

    1 Kasus 1

    Diberikan fungsi:f(x) = x2 10 cos(2pix) + 10,5 x 5.

    Kemudian akan dicari nilai minimum dari fungsi tersebut dengan menggunakan algoritmagenetika. Jika di plot fungsi tersebut akan menghasilkan grafik seperti pada Figure 1,dimana nilai minimum dari fungsi tersebut sekitar 0.552288 di x = 0.

    Pada kasus ini, diambil banyaknya populasi adalah 25 kromosom, dimana jumlah gen

    Figure 1: Grafik Fungsi f(x) = x2 10 cos(2pix) + 10,5 x 5.

    pada masing-masing kromosom adalah 4, sedangkan program ini berhenti pada iterasi ke1000. Seperti yang terlihat pada Figure 2 terdapat 25 kromosom awal yang dibangk-itkan dari bilangan acak kemdian setelah melalui proses seleksi, crossover, dan mutasi,dihasilkan 25 kromosom yang baru dan terbaik dan dicari gen mana yang akan meng-hasilkan nilai minimum dari fungsi. Sehingga aproksimasi nilai minimun dari fungsitersebut adalah 1 dengan susunan gen terbaiknya yaitu 1 0 0 1 dan 0 1 1 0.

    1

  • Figure 2: Kromosom Kasus 1.

    2 Kasus 2

    Diberikan fungsi:

    f(x1, x2) =2

    i=1

    x2i 10 cos(2pixi) + 10,5 xi 5.

    Kemudian akan dicari nilai minimum dari fungsi tersebut dengan menggunakan algoritmagenetika. Jika di plot fungsi tersebut akan menghasilkan grafik seperti pada Figure 3.Pada kasus ini, diambil banyaknya populasi adalah 25 kromosom, dimana jumlah genpada masing-masing kromosom adalah 8, sedangkan program ini berhenti pada iterasi ke1000. Masing-masing gen pada tiap-tiap kromosom dipecah menjadi 2 bagian yang berisijumlah gen yang sama besar, untuk menginisialisasi nilai dari x1 dan x2. Seperti yangterlihat pada Figure 4 terdapat 25 kromosom awal yang dibangkitkan dari bilangan acakkemdian setelah melalui proses seleksi, crossover, dan mutasi, dihasilkan 25 kromosomyang baru dan terbaik dan dicari gen mana yang akan menghasilkan nilai minimum darifungsi. Sehingga aproksimasi nilai minimum dari fungsi tersebut adalah 20.6111 dengansusunan gen terbaiknya yaitu 0 1 1 0 1 1 1 0.

    2

  • Figure 3: Grafik Fungsi f(x1, x2) =2

    i=1 x2i 10 cos(2pixi) + 10,5 xi 5.

    Figure 4: Kromosom Kasus 2.

    3 Kasus 3

    Diberikan fungsi:

    f(x1, x2) =2

    i=1

    1

    2(x4i 16x2i + 5xi),4 xi 4.

    Kemudian akan dicari nilai minimum dari fungsi tersebut dengan menggunakan algoritmagenetika. Jika di plot fungsi tersebut akan menghasilkan grafik seperti pada Figure 5.Pada kasus ini, diambil banyaknya populasi adalah 25 kromosom, dimana jumlah genpada masing-masing kromosom adalah 8, sedangkan program ini berhenti pada iterasi ke1000. Masing-masing gen pada tiap-tiap kromosom dipecah menjadi 2 bagian yang berisi

    3

  • Figure 5: Grafik Fungsi f(x1, x2) =2

    i=112(x4i 16x2i + 5xi),4 xi 4.

    jumlah gen yang sama besar, untuk menginisialisasi nilai dari x1 dan x2. Seperti yangterlihat pada Figure 6 terdapat 25 kromosom awal yang dibangkitkan dari bilangan acakkemdian setelah melalui proses seleksi, crossover, dan mutasi, dihasilkan 25 kromosomyang baru dan terbaik dan dicari gen mana yang akan menghasilkan nilai minimum darifungsi. Sehingga aproksimasi nilai minimum dari fungsi tersebut adalah -71.7461 dengansusunan gen terbaiknya yaitu 1 0 0 0 0 1 0 0 .

    Figure 6: Kromosom Kasus 3.

    4

  • 4 Souce Code Dalam C++

    Listing 1: Algoritma Genetika

    1 #include 2 #include 3 #include 4 #include 5 #include 6

    7

    8 #define POPULASI 259 #define NVAR 4

    10 #define SIMULATE 100011

    12 using namespace std;13

    14 int a=-5.,b=5.; //batas bawah dan atas15 double Pc=0.8,Pm=0.1; //Prob Xover dan Mutasi16 ofstream out;17

    18 struct kromosom{19 double gen[NVAR];20 double fitness;21 double rfitness;22 double cfitness;23 };24

    25 struct kromosom populasi[POPULASI+1];26 struct kromosom newpopulasi[POPULASI+1];27

    28 void inisial();29 int random();30 double unirandom();31 void evaluasi();32 void the_best();33 void seleksi();34 void crossover();35 void xover(int,int);36 void swap(double *, double *);37 void mutasi();38 void report();39 double findmax();40 double findmin();41

    42 double fungsi(double x){43 return pow(x,2) - 10*cos(2*M_PI*x) + 10;44 }45

    46 double fungsi1(double x){47 return x*sin(10*M_PI*x)+1;48 }49

    50 int random(){51 return rand()%2;52 }53

    54 double unirandom(){

    5

  • 55 return (double)rand()/RAND_MAX;56 }57

    58 void inisial(){59 for(int i=0;i=0;j--){61 populasi[i].gen[j] = ceil(random());62 }63 }64 }65

    66 void evaluasi(){67 int sum;68 double x[POPULASI];69

    70 for(int i=0;i=0;j--){73 sum = sum + populasi[i].gen[j]*pow(2,j);74 }75 x[i] = a + sum*((b - a)/(pow(2,NVAR)-1));76 populasi[i].fitness = fungsi(x[i]);77 out

  • 112 }113 }114

    115 for(int i=0;i

  • 170 populasi[i].gen[j] = 1;171 }172 else if(populasi[i].gen[j] == 1){173 populasi[i].gen[j] = 0;174 }175 }176 }177 }178 }179

    180 double findmax(){181 double max = populasi[0].fitness;182 for(int i=1;i max){184 max = populasi[i].fitness;185 }186 }187 return max;188 }189

    190 double findmin(){191 double min = populasi[0].fitness;192 for(int i=1;i

  • 228

    229 Gen