GA Chapter 3
Implementasi Algoritma Genetika dalam MATLAB
      DAFTAR ISI
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
  
        MATLAB berasal dari singkatan MATrix LABoratory, dimana
    aplikasi ini akan memudahkan pengguna dalam operasi matriks, terutama dalam
    pengimplementasiannya ke GA.
    
      
      
      
        
        
          
        
        
        
        
          
        
        
        
          
        
        
        
        
          
          
          
        
        
          
        
        
        
        
          
        
        
          
        
        2. Implementasi Algoritma Genetika [BACK] 
      
    
        
  
  - Pemograman MATLAB [BACK]
 - Dalam MATLAB, setiap variabel dianggap sebagai matriks.
 - Pembuatan program atau fungsi dalam MATLAB dapat dilakukan dengan file berekstensi .m. (nama fungsi harus sama dengan nama file)
 - MATLAB bersifat case sensitive, sehingga antara "A" dan "a" akan dibaca sebagai dua variabel yang berbeda.
 - i dan j merupakan tanda bilangan imajiner, sehingga perlu dihindari menggunakan variabel j dan i.
 
- 
          Diag
 
- Indeks Matriks
 - Penunjukan elemen matrik dapat dilakukan dengan berdasarkan indeksnya.
 - Remember! : Matriks(baris,kolom)
 - Contoh kasus :
 
- Membangkitkan Matriks
 - zeros (semua nol)
 - ones (semua satu)
 - rand (random dalam distribusi uniform)
 - randn (random dalam distribusi normal)
 
- Concatenation
 - Penggabungan beberapa matrik kecil menjadi sebuah matriks besar
 - Untuk menggabungkan matriks berdasarkan kolom, digunakan ";"
 - Untuk menggabungkan matriks berdasarkan baris, tidak perlu ada ";"
 - Jika matriks yang digabung memiliki jumlah baris/kolom yang berbeda, makan akan muncul error.
 
- Operasi-operasi Matriks
 - + (penjumlahan)
 - - (pengurangan)
 - *(perkalian matriks)
 - .*(perkalian elemen per elemen)
 - ./ (pembagian elemen per elemen, variabel kiri dibagi kanan)
 - .\ (pembagian elemen per elemen, variabel kanan dibagi kiri)
 - .^ (perpangkatan elemen per elemen)
 
        Pada penjelasan berikut akan diterapkan GA untuk mencari nilai
    dari fungsi h:
  
  - Tujuan fungsi ini untuk membangkitkan populasi yang berisi sejumlah kromosom.
 
                  Bertujuan untuk mengodekan
        sebuah kromosom yang berisi bilangan biner menjadi individu x yang
        bernilai real dalam interval yang diinginkan, berdasarkan persamaan
        berikut:
      
      
      
      
                  Fungsi ini bertujuan untuk
        menghitung nilai fitness dari suatu individu x
      
      
      
      
                  Untuk menghindari
        kecenderungan konvergen pada optimum lokal, maka digunakaan penskalaan
        nilai fitness yang bertujuan untuk mendapatkan nilai fitness yang lebih
        baik, bervariansi tinggi.
      
      
                  Untuk menampilkan grafis 2D
        dari AG.
      
      
                  Syntax-nya sebagai berikut
        :
      
      
      
      
      
      
      
      
          Terdapat tiga variabel utama yang harus ditentukan oleh
      user, yaitu: 
    
    - UkPop (30-1000)
 - Psilang (0,6-0,9)
 - Pmutasi (1/jumlah gen)
 
          Nvar        = 2;         
              % Jumlah variabel pada fungsi yang dioptimasi
        
        
          Nbit        = 10;       
               % Jumlah bit yang mengkodekan satu variabel
        
        
          JumGen      = Nbit*Nvar;      % Jumlah
          gen dalam kromosom
        
        
          Rb          = -5.12;     
              % Batas bawah interval
        
        
          Ra          = 5.12;     
               % Batas atas interval
        
        
          Psilang     = 0.8;         
            % Probabilitas pindah silang
        
        
          MaxJumInd   = 60000;          %
          Jumlah individu maksimum yang dievaluasi
        
        
          BilKecil    = 10^-1;          %
          Digunakan untuk menghindari pembagian dengan 0
        
        
          Fthreshold  = 1/BilKecil;     % Threshold untuk
          nilai Fitness
        
        
          Bgraf       = Fthreshold;     %
          Untuk menangani tampilan grafis
        
        
          ObUkPop = [50 100 200 400];       % Ukuran
          populasi yang diobservasi
        
        
          ObPmutasi = [0.01 0.05 0.1 0.2];  % Probabilitas mutasi yang
          diobservasi
        
        
          ObData = [];               
            % Data hasil observasi
        
        for ukp=1:length(ObUkPop),
            UkPop = ObUkPop(ukp);
            MaxG = fix(MaxJumInd/UkPop);
            for pm=1:length(ObPmutasi),
                Pmutasi = ObPmutasi(pm);
                for observasi=1:10,
        
                      UkPop, Pmutasi, observasi
        
        
                      % Inisialisasi populasi
        
        
                      Populasi =
          InisialisasiPopulasi(UkPop,JumGen);
        
                    % Loop evolusi
        
                      for generasi=1:MaxG,
        
        
                         x =
          DekodekanKromosom(Populasi(1,:),Nvar,Nbit,Ra,Rb);
        
        
                         Fitness(1) =
          EvaluasiIndividu(x,BilKecil);
        
        
                         MaxF =
          Fitness(1);
        
        
                         MinF =
          Fitness(1);
        
        
                       
           IndeksIndividuTerbaik = 1;
        
        
                         for ii=2:UkPop,
        
        
                           Kromosom
          = Populasi(ii,:);
        
        
                           x =
          DekodekanKromosom(Kromosom,Nvar,Nbit,Ra,Rb);
        
        
                         
           Fitness(ii) = EvaluasiIndividu(x,BilKecil);
        
        
                           if
          (Fitness(ii) > MaxF),
        
        
                             
          MaxF = Fitness(ii);
        
        
                             
          IndeksIndividuTerbaik = ii;
        
        
                             
          BestX = x;
        
        
                           end
        
        
                           if
          (Fitness(ii) < MinF),
        
        
                             
          MinF = Fitness(ii);
        
        
                           end
        
                       end
        
                         TempPopulasi =
          Populasi;
        
        
                         % Elitisme:
        
        
                         % - Buat satu
          kopi kromosom terbaik jika ukuran populasi ganjil
        
        
                         % - Buat dua
          kopi kromosom terbaik jika ukuran populasi genap
        
        
                         if
          mod(UkPop,2)==0,           % ukuran
          populasi genap
        
        
                           
          IterasiMulai = 3;
        
        
                           
          TempPopulasi(1,:) = Populasi(IndeksIndividuTerbaik,:);
        
        
                           
          TempPopulasi(2,:) = Populasi(IndeksIndividuTerbaik,:);
        
        
                         else 
                             
              % ukuran populasi ganjil
        
        
                           
          IterasiMulai = 2;
        
        
                           
          TempPopulasi(1,:) = Populasi(IndeksIndividuTerbaik,:);
        
                       end
        
                         LinearFitness =
          LinearFitnessRanking(UkPop,Fitness,MaxF,MinF);
        
        
                         %
          Roulette-wheel selection dan pindah silang
        
        
                         for
          jj=IterasiMulai:2:UkPop,
        
        
                           IP1 =
          RouletteWheel(UkPop,LinearFitness);
        
        
                           IP2 =
          RouletteWheel(UkPop,LinearFitness);
        
        
                           if (rand
          < Psilang),
        
        
                             
          Anak = PindahSilang(Populasi(IP1,:),Populasi(IP2,:),JumGen);
        
        
                             
          TempPopulasi(jj,:) = Anak(1,:);
        
        
                             
          TempPopulasi(jj+1,:) = Anak(2,:);
        
        
                           else
        
        
                             
          TempPopulasi(jj,:) = Populasi(IP1,:);
        
        
                             
          TempPopulasi(jj+1,:) = Populasi(IP2,:);
        
        
                         
           end    
        
                       end
        
                         % Mutasi
          dilakukan pada semua kromosom
        
        
                         for
          kk=IterasiMulai:UkPop,
        
        
                         
           TempPopulasi(kk,:) = Mutasi(TempPopulasi(kk,:),JumGen,Pmutasi);
        
        
                         end 
           
        
        
                         % Generational
          Replacement: mengganti semua kromosom sekaligus
        
        
                         Populasi =
          TempPopulasi;
        
        
                         if MaxF >=
          Fthreshold,
        
        
                           
          JumIndData(observasi) = generasi*UkPop;
        
        
                           
          MaxFData(observasi) = MaxF;
        
        
                            break;
        
                       else
        
                            if
          generasi == MaxG,
        
        
                             
           JumIndData(observasi) = MaxG*UkPop;
        
        
                             
           MaxFData(observasi) = MaxF;
        
        
                            end
        
                       end
        
                      end  % loop evolusi
        
                end % loop observasi
        
                  ObData = [ObData ; [UkPop Pmutasi
          mean(MaxFData) mean(JumIndData)]];
        
            end
        end
        save ObData.mat ObData
        clc  % me-refresh layar
        
          disp(['Mencari nilai optimal: Ukuran Populasi dan Prob. Mutasi ']);
        
        
          disp(['Jumlah maksimum individu yang dievaluasi adalah ',
          num2str(MaxJumInd)]);
        
        
          disp(['                 
                             
                            ']);
        
        
          disp(['--------------------------------------------------------']);
        
        
          disp(['Ukuran      Probabilas     
          Rata-rata      Rata-rata    ']);
        
        
          disp(['Poulasi      mutation       
          Fitness     Jumlah individu']);
        
        
          disp(['--------------------------------------------------------']);
        
        for ii=1:length(ObData(:,1)),
        
            disp(['   ', num2str(ObData(ii,1)),'   
                ', num2str(ObData(ii,2)), ... 
        
        
            '            ',
          num2str(ObData(ii,3)),'           ',
          num2str(ObData(ii,4))]);
        
        end
        
          disp(['--------------------------------------------------------']);
        
      - Program untuk Bab III (click here)
 - Materi HTML (click here)
 - Video Simulasi (click here)
 

Komentar
Posting Komentar