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(['--------------------------------------------------------']);
VIDEO SIMULASI:
- Source Code Simulasi (click here)
- Materi HTML (click here)
- Video Simulasi (click here)
Tidak ada komentar:
Posting Komentar