- 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.
- Matriks
- Merupakan sekumpulan angka berbentuk persegi.
- Sum, Transpose, dan diag
- Sum
- Transpose
- 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)
InisiasiPopulasiCoba1
Hasil Akhir:
Populasi
adalah matriks berukuran 200 x 20, di mana setiap elemen adalah 0 atau 1. Matriks ini sering digunakan dalam konteks algoritma genetik atau studi lain di mana populasi individu (baris-baris dalam matriks) diwakili oleh gen-gen (kolom-kolom dalam matriks), dan setiap gen bisa bernilai 0 atau 1.
Fungsi DekodekanKromosom
:
function x = DekodekanKromosom(Kromosom, Nvar, Nbit, Ra, Rb)
Deskripsi:
Kromosom
: Matriks biner ukuran 1 xJumGen
, yang merupakan kromosom yang akan didekodekan. Di sini,JumGen
adalahNvar * Nbit
, yaitu jumlah total bit yang mengkodekan semua variabel.Nvar
: Jumlah variabel yang ingin didekodekan dari kromosom.Nbit
: Jumlah bit yang digunakan untuk mengkodekan setiap variabel.Ra
: Batas atas interval di mana nilai real hasil dekode akan berada.Rb
: Batas bawah interval di mana nilai real hasil dekode akan berada.
Proses Dekode:
Inisialisasi Loop Variabel:
for ii = 1:Nvarx(ii) = 0;- Loop pertama mengiterasi melalui setiap variabel
ii
dari 1 hinggaNvar
. Untuk setiap variabel, kita akan menghitung nilai real yang sesuai dari bagian kromosom yang mengkodekan variabel tersebut.
- Loop pertama mengiterasi melalui setiap variabel
Dekode Kromosom:
for jj = 1:Nbitx(ii) = x(ii) + Kromosom((ii-1)*Nbit+jj) * 2^(-jj);end- Loop kedua mengiterasi melalui setiap bit
jj
dari 1 hinggaNbit
. Untuk setiap bit, kita mengakumulasi nilai biner yang terkode dalam variabelx(ii)
:Kromosom((ii-1)*Nbit+jj)
mengambil bit ke-jj
dari kromosom yang mengkodekan variabel ke-ii
.2^(-jj)
mengonversi bit ke-jj
menjadi nilai desimal sesuai posisinya dalam sistem biner.- Dengan menambahkan nilai ini ke
x(ii)
, kita membangun representasi desimal dari bit-bit biner.
Transformasi ke Rentang Real:
x(ii) = Rb + (Ra - Rb) * x(ii);- Setelah mendapatkan nilai desimal dari bit biner, kita mengubahnya ke dalam rentang [Rb, Ra] dengan menggunakan rumus:
Rb + (Ra - Rb) * x(ii)
- Di sini,
x(ii)
berada dalam rentang [0, 1] setelah dekode biner, dan rumus ini mengubahnya ke rentang [Rb, Ra].
Contoh Penggunaan:
Misalnya, jika Kromosom
adalah [1 0 1 1 0 0 1 0]
, Nvar
adalah 2, Nbit
adalah 4, Ra
adalah 10, dan Rb
adalah 5, maka:
- Untuk variabel pertama (4 bit pertama), kromosom
[1 0 1 1]
diubah menjadi nilai desimal1*(2^(-1)) + 1*(2^(-2)) + 0*(2^(-3)) + 1*(2^(-4)) = 0.8125
. - Nilai ini kemudian diubah ke rentang [5, 10]:
5 + (10 - 5) * 0.8125 = 5 + 5 * 0.8125 = 5 + 4.0625 = 9.0625
.
Hasil Akhir:
Fungsi ini mengembalikan x
, sebuah vektor yang berisi nilai real hasil dekode dari setiap variabel dalam kromosom, sesuai dengan rentang yang ditentukan.
Ringkasan:
Fungsi DekodekanKromosom
mengubah kromosom biner menjadi nilai real dalam rentang tertentu dengan mengonversi setiap bagian dari kromosom yang mewakili variabel menjadi angka desimal, kemudian menskalakannya ke dalam rentang [Rb, Ra].
Program
Kromosom Generation:
Kromosom = randi([0 1], 1, 20);randi([0 1], 1, 20)
menghasilkan vektor barisKromosom
yang berisi 20 bilangan biner (0 atau 1) secara acak. Ini adalah kromosom biner yang akan didekodekan.- Contoh hasilnya bisa berupa:
[1 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 1 1]
.
Parameter Dekode:
Nvar = 2;Nbit = 10;Ra = 5.12;Rb = -5.12;Nvar
adalah jumlah variabel yang ingin didekodekan, yaitu 2 variabel.Nbit
adalah jumlah bit yang mengkodekan setiap variabel, yaitu 10 bit per variabel.Ra
adalah batas atas rentang nilai real yang diinginkan untuk variabel, yaitu 5.12.Rb
adalah batas bawah rentang nilai real yang diinginkan untuk variabel, yaitu -5.12.
Panggilan Fungsi
DekodekanKromosom
:x = DekodekanKromosom(Kromosom, Nvar, Nbit, Ra, Rb);
- Fungsi
DekodekanKromosom
akan mengubah kromosom binerKromosom
menjadi nilai real sesuai dengan parameterNvar
,Nbit
,Ra
, danRb
.
- Fungsi
Proses Dekode
Fungsi DekodekanKromosom
mengonversi kromosom biner menjadi nilai real dalam rentang [Rb, Ra] dengan langkah-langkah berikut:
Inisialisasi Hasil Dekode:
x(ii) = 0;
- Untuk setiap variabel (dalam hal ini ada 2 variabel),
x(ii)
diinisialisasi ke 0.
- Untuk setiap variabel (dalam hal ini ada 2 variabel),
Dekode Bit ke Desimal:
for jj = 1:Nbitx(ii) = x(ii) + Kromosom((ii-1)*Nbit + jj) * 2^(-jj);end- Untuk setiap bit dalam kromosom yang mewakili variabel, bit-bit ini dikonversi menjadi nilai desimal berdasarkan posisi bit dalam bilangan biner.
- Contohnya, jika variabel pertama mengacu pada 10 bit pertama dari
Kromosom
, maka fungsi ini mengonversi 10 bit tersebut menjadi nilai desimal antara 0 dan 1.
Transformasi ke Rentang Real:
x(ii) = Rb + (Ra - Rb) * x(ii);
- Setelah mendapatkan nilai desimal dari bit biner, nilai ini diubah ke dalam rentang [Rb, Ra] dengan menggunakan rumus linear:
x(ii) = Rb + (Ra - Rb) * x(ii)
- Ini menskalakan nilai desimal ke dalam rentang yang diinginkan.
Contoh Penghitungan
Misalkan Kromosom
adalah [1 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 1 1]
. Untuk Nvar = 2
dan Nbit = 10
:
Variabel Pertama:
Mengambil 10 bit pertama dari
Kromosom
:[1 0 1 0 1 1 0 1 0 0]
Menghitung nilai desimal dari bit ini.
Misalkan hasil desimalnya adalah
0.6234
(hanya contoh, hasil aktual akan bergantung pada bit).Mengubah nilai desimal ke rentang [Rb, Ra]:
x(1) = -5.12 + (5.12 - (-5.12)) * 0.6234 = -5.12 + 10.24 * 0.6234 ≈ -5.12 + 6.39 ≈ 1.27
Variabel Kedua:
- Mengambil 10 bit berikutnya dari
Kromosom
:[0 1 0 0 1 0 1 0 1 1]
- Menghitung nilai desimal dan mengubahnya ke rentang yang sama dengan proses di atas.
- Mengambil 10 bit berikutnya dari
Hasil Akhir:
Vektor x
berisi dua nilai real yang merupakan hasil dekode dari dua variabel biner dari kromosom biner ke rentang [Rb, Ra].
Penjelasan Parameter dan Fungsi
Parameter:
x
: Vektor yang berisi nilai-nilai individu yang akan dievaluasi. Dalam konteks ini,x
diharapkan sebagai vektor dengan setidaknya dua elemen (misalnyax = [x1, x2]
), di manax1
danx2
adalah nilai-nilai yang diperoleh dari proses dekode kromosom atau input lain.BilKecil
: Parameter tambahan yang digunakan untuk menghindari nilai fitness menjadi terlalu kecil. Biasanya,BilKecil
adalah nilai kecil positif yang ditambahkan untuk menghindari pembagi nol atau nilai fitness yang terlalu kecil.
Fungsi Fitness:
fitness = 1 / ((1000 * (x(1) - 2 * x(2))^2 + (1 - x(1))^2) + BilKecil);- Fungsi fitness dihitung dengan formula:
fitness = 1 / (f(x) + BilKecil)
Di manaf(x)
adalah fungsi objektif yang dinyatakan dalam kurung:f(x) = 1000 * (x(1) - 2 * x(2))^2 + (1 - x(1))^2
Interpretasi Fungsi Fitness
Fungsi Objektif
f(x)
:f(x)
adalah fungsi kuadrat yang dihitung dari elemen-elemen vektorx
:1000 * (x(1) - 2 * x(2))^2
: Mengukur seberapa jauh kombinasix(1)
danx(2)
dari kondisi idealx(1) = 2 * x(2)
.(1 - x(1))^2
: Mengukur seberapa jauhx(1)
dari nilai ideal 1.
- Fungsi ini biasanya digunakan dalam masalah optimasi di mana kita ingin meminimalkan nilai
f(x)
.
Penambahan
BilKecil
:BilKecil
ditambahkan pada penyebut untuk menghindari pembagi nol atau menghindari nilai fitness yang menjadi sangat besar jikaf(x)
mendekati nol.- Ini membantu memastikan bahwa fitness tetap dalam rentang yang dapat diterima dan stabil selama evaluasi.
Fitness Function:
- Fitness didefinisikan sebagai invers dari nilai
f(x) + BilKecil
:- Ketika
f(x)
rendah (mendekati nol), fitness akan tinggi, yang berarti individu tersebut dianggap baik. - Ketika
f(x)
tinggi, fitness akan rendah, yang menunjukkan individu tersebut kurang baik.
- Ketika
Contoh:
Misalkan x = [1.5, 0.5]
dan BilKecil = 1e-6
:
Hitung
f(x)
:f(x) = 1000 * (1.5 - 2 * 0.5)^2 + (1 - 1.5)^2= 1000 * (1.5 - 1)^2 + (-0.5)^2= 1000 * (0.5)^2 + 0.25= 1000 * 0.25 + 0.25= 250 + 0.25= 250.25Hitung fitness:
fitness = 1 / (250.25 + 1e-6)≈ 1 / 250.250001≈ 0.00399
Ringkasan:
Fungsi EvaluasiIndividu
mengevaluasi fitness individu berdasarkan fungsi objektif f(x)
dan parameter tambahan BilKecil
. Fitness diukur sebagai invers dari nilai fungsi objektif ditambah BilKecil
. Ini membantu memastikan bahwa individu dengan nilai fungsi objektif yang lebih rendah memiliki fitness yang lebih tinggi, yang menunjukkan bahwa individu tersebut lebih baik dalam konteks masalah optimasi yang sedang dipecahkan.
Penjelasan Kode
BilKecil = 0.1;
fitness = EvaluasiIndividu(x, BilKecil);
BilKecil
diatur sebagai0.1
, digunakan untuk stabilisasi dalam fungsi fitnessEvaluasiIndividu
.fitness
menghitung fitness individux
menggunakan parameterBilKecil
.
x = DekodekanKromosom(Populasi(1,:), Nvar, Nbit, Ra, Rb);
Fitness(1) = EvaluasiIndividu(x, BilKecil);MaxF = Fitness(1);MinF = Fitness(1);IndeksIndividuTerbaik = 1;
- Mengambil kromosom pertama dari
Populasi
dan mendekodifikasinya ke nilai realx
denganDekodekanKromosom
. - Menghitung fitness dari individu tersebut dan menyimpannya dalam
Fitness(1)
. MaxF
danMinF
diinisialisasi dengan fitness individu pertama, sehingga saat iniMaxF
danMinF
sama dengan fitness individu pertama.IndeksIndividuTerbaik
diatur ke 1, menandakan bahwa individu pertama adalah yang terbaik saat ini.
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;endif (Fitness(ii) < MinF)MinF = Fitness(ii);endend
- Loop ini iterasi melalui setiap individu dalam populasi dari
ii = 2
hinggaUkPop
. - Untuk setiap individu:
- Ambil kromosom individu dan dekode menjadi nilai real
x
. - Hitung fitness individu tersebut dan simpan di
Fitness(ii)
. - Jika fitness individu lebih tinggi dari
MaxF
, updateMaxF
danIndeksIndividuTerbaik
, serta simpanx
sebagaiBestX
(individu terbaik). - Jika fitness individu lebih rendah dari
MinF
, updateMinF
.
- Ambil kromosom individu dan dekode menjadi nilai real
TemPopulasi = Populasi;
if mod(UkPop, 2) == 0IterasiMulai = 3;TemPopulasi(1, :) = Populasi(IndeksIndividuTerbaik, :);TemPopulasi(2, :) = Populasi(IndeksIndividuTerbaik, :);elseIterasiMulai = 2;TemPopulasi(1, :) = Populasi(IndeksIndividuTerbaik, :);end
TemPopulasi
adalah salinan dariPopulasi
yang mungkin akan digunakan dalam iterasi berikutnya atau untuk tujuan lain dalam algoritma.- Cek apakah
UkPop
(ukuran populasi) adalah genap denganmod(UkPop, 2) == 0
:- Jika genap, set
IterasiMulai
ke 3. Salin individu terbaik ke baris pertama dan kedua dariTemPopulasi
. - Jika tidak genap, set
IterasiMulai
ke 2. Salin individu terbaik ke baris pertama dariTemPopulasi
.
- Jika genap, set
Hasil
Fungsi LinearFitnessRanking
ini digunakan dalam algoritma genetik untuk melakukan pemeringkatan individu berdasarkan nilai fitness mereka. Tujuan dari fungsi ini adalah untuk menyesuaikan fitness individu dengan skala linear sehingga individu dengan fitness lebih tinggi mendapatkan nilai fitness yang lebih tinggi dalam skala baru, sedangkan individu dengan fitness lebih rendah mendapatkan nilai fitness yang lebih rendah. Fungsi ini membantu dalam pemilihan individu untuk proses reproduksi.
function LFR = LinearFitnessRanking(UkPop, Fitness, MaxF, MinF)
UkPop
: Jumlah individu dalam populasi.Fitness
: Vektor yang berisi nilai fitness asli dari setiap individu dalam populasi.MaxF
: Nilai fitness maksimum yang diinginkan dalam skala baru.MinF
: Nilai fitness minimum yang diinginkan dalam skala baru.
Proses dalam Fungsi
Mengurutkan Fitness:
[SF, IndF] = sort(Fitness);
SF
adalah vektor nilai fitness yang telah diurutkan dari yang terkecil hingga terbesar.IndF
adalah indeks yang menunjukkan urutan dari nilai fitness dalam vektor asli.IndF
digunakan untuk mengetahui posisi individu dalam urutan fitness yang telah diurutkan.
Penyesuaian Fitness Linear:
for rr = 1:UkPopLFR(IndF(UkPop - rr + 1)) = MaxF - (MaxF - MinF) * ((rr - 1) / (UkPop - 1));endLFR
adalah vektor hasil yang berisi nilai fitness baru berdasarkan skala linear.Loop
for rr = 1:UkPop
mengiterasi melalui setiap individu dalam populasi.rr
adalah iterasi saat ini, yang juga menunjukkan urutan individu dalam daftarSF
(fitness terurut).IndF(UkPop - rr + 1)
mendapatkan indeks individu asli yang sesuai dengan urutan fitnessrr
.LFR(IndF(UkPop - rr + 1))
mengatur fitness baru untuk individu tersebut.
Skala Linear:
- Nilai fitness baru dihitung dengan rumus:
LFR(IndF(UkPop - rr + 1)) = MaxF - (MaxF - MinF) * ((rr - 1) / (UkPop - 1))
- Rumus ini mengubah fitness asli menjadi nilai baru yang terdistribusi secara linear antara
MaxF
(fitness maksimum) danMinF
(fitness minimum). - Individu dengan fitness terbaik mendapatkan nilai mendekati
MaxF
, sedangkan individu dengan fitness terburuk mendapatkan nilai mendekatiMinF
.
Contoh
Misalkan kita memiliki 5 individu dalam populasi dengan fitness yang diukur sebagai berikut:
- Fitness:
[10, 15, 20, 25, 30]
- UkPop:
5
- MaxF:
1.0
- MinF:
0.0
Langkah-langkah dalam fungsi:
Urutkan Fitness:
SF
=[10, 15, 20, 25, 30]
IndF
=[1, 2, 3, 4, 5]
(indeks asli)
Hitung Fitness Linear:
Untuk
rr = 1
:LFR(IndF(5 - 1 + 1)) = LFR(5) = MaxF - (MaxF - MinF) * ((1 - 1) / (4)) = 1.0
Untuk
rr = 2
:LFR(IndF(5 - 2 + 1)) = LFR(4) = MaxF - (MaxF - MinF) * ((2 - 1) / (4)) = 0.75
Untuk
rr = 3
:LFR(IndF(5 - 3 + 1)) = LFR(3) = MaxF - (MaxF - MinF) * ((3 - 1) / (4)) = 0.5
Untuk
rr = 4
:LFR(IndF(5 - 4 + 1)) = LFR(2) = MaxF - (MaxF - MinF) * ((4 - 1) / (4)) = 0.25
Untuk
rr = 5
:LFR(IndF(5 - 5 + 1)) = LFR(1) = MaxF - (MaxF - MinF) * ((5 - 1) / (4)) = 0.0
Hasil:
LFR
=[0.0, 0.25, 0.5, 0.75, 1.0]
Program Coba
Fungsi RouletteWheel
ini merupakan implementasi dari metode pemilihan berbasis roda roulette, yang digunakan dalam algoritma genetik untuk memilih individu dari populasi berdasarkan nilai fitness mereka. Metode ini memberikan probabilitas pemilihan yang lebih tinggi kepada individu dengan fitness yang lebih tinggi.
Mari kita bahas setiap bagian dari kode tersebut:
function Pindex = RouletteWheel(UkPop, LinearFitness)
UkPop
: Jumlah individu dalam populasi.LinearFitness
: Vektor yang berisi nilai fitness baru dari setiap individu, hasil dari proses skala linear.
Proses dalam Fungsi
Hitung Jumlah Fitness:
JumFitness = sum(LinearFitness);
JumFitness
adalah total dari semua nilai fitness dalamLinearFitness
.- Ini digunakan untuk menghitung probabilitas kumulatif masing-masing individu.
Inisialisasi Variabel:
KumulatifFitness = 0;RN = rand;ii = 1;KumulatifFitness
menyimpan jumlah kumulatif fitness yang akan dibandingkan dengan angka acak.RN
adalah angka acak yang dihasilkan dari distribusi uniform [0,1], digunakan untuk menentukan individu yang terpilih.ii
adalah indeks yang digunakan untuk iterasi melalui populasi.
Pemilihan Berdasarkan Roda Roulette:
while ii <= UkPopKumulatifFitness = KumulatifFitness + LinearFitness(ii);if (KumulatifFitness / JumFitness) > RNPindex = ii;break;endii = ii + 1;end- Loop: Iterasi melalui setiap individu dalam populasi (
ii
dari 1 sampaiUkPop
).- Tambahkan nilai fitness individu saat ini (
LinearFitness(ii)
) keKumulatifFitness
. - Hitung proporsi kumulatif fitness terhadap total fitness (
KumulatifFitness / JumFitness
). - Jika proporsi kumulatif ini melebihi angka acak
RN
, individu saat ini (ii
) dipilih dan loop dihentikan denganbreak
. - Jika tidak, lanjutkan ke individu berikutnya (
ii = ii + 1
).
- Tambahkan nilai fitness individu saat ini (
Penjelasan Metode Roda Roulette
- Roda Roulette: Metode ini bekerja seperti roda roulette dalam permainan kasino, di mana bagian dari roda sesuai dengan probabilitas proporsional individu dalam populasi.
- Proporsi Kumulatif:
KumulatifFitness / JumFitness
adalah probabilitas kumulatif yang menggambarkan berapa bagian dari total fitness yang telah "dilewati" saat mengiterasi. - Pemilihan Individu: Angka acak
RN
membagi total fitness menjadi beberapa segmen. Jika proporsi kumulatif melebihiRN
, individu yang terpilih adalah individu yang saat ini sedang diiterasi.
Contoh
Misalkan ada 4 individu dengan nilai fitness sebagai berikut:
LinearFitness
:[10, 20, 30, 40]
UkPop
:4
Hitung Total Fitness:
JumFitness = sum([10, 20, 30, 40]) = 100;
Generate Random Number:
RN = rand; % Misalkan RN = 0.65
Iterasi dan Kumulatif Fitness:
Individu 1:
KumulatifFitness = 10
KumulatifFitness / JumFitness = 10 / 100 = 0.10
(0.10 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 2:
KumulatifFitness = 10 + 20 = 30
KumulatifFitness / JumFitness = 30 / 100 = 0.30
(0.30 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 3:
KumulatifFitness = 30 + 30 = 60
KumulatifFitness / JumFitness = 60 / 100 = 0.60
(0.60 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 4:
KumulatifFitness = 60 + 40 = 100
KumulatifFitness / JumFitness = 100 / 100 = 1.00
(1.00 > 0.65)- Individu 4 terpilih karena proporsi kumulatif melebihi
RN
.
Ringkasan
Fungsi RouletteWheel
memilih individu dari populasi berdasarkan nilai fitness mereka menggunakan metode pemilihan berbasis roda roulette. Individu dengan fitness lebih tinggi memiliki probabilitas lebih besar untuk dipilih. Metode ini memungkinkan setiap individu dalam populasi memiliki kesempatan untuk dipilih sesuai dengan kontribusi fitness mereka.
Fungsi PindahSilang
ini merupakan implementasi dari operasi crossover (atau pemindahan silang) dalam algoritma genetik. Tujuannya adalah untuk menghasilkan individu baru (anak) dengan menggabungkan bagian-bagian dari dua individu orang tua (Bapak dan Ibu). Operasi ini merupakan langkah penting dalam algoritma genetik untuk menciptakan variasi genetik dan mengeksplorasi solusi baru.
Mari kita bahas kode fungsi PindahSilang
secara rinci:
function Anak = PindahSilang(Bapak, Ibu, JumGen)
Bapak
: Kromosom individu pertama (orang tua) yang akan digunakan dalam crossover.Ibu
: Kromosom individu kedua (orang tua) yang akan digunakan dalam crossover.JumGen
: Jumlah gen dalam setiap kromosom, yang merupakan panjang dari kromosomBapak
danIbu
.
Proses dalam Fungsi
Membangkitkan Titik Potong:
TP = 1 + fix(rand * (JumGen - 1));
TP
: Titik potong untuk crossover, yang ditentukan secara acak antara1
danJumGen-1
. Titik ini adalah tempat di mana kromosom akan dipotong dan digabungkan.rand
menghasilkan angka acak antara 0 dan 1.fix(rand * (JumGen - 1))
menghasilkan angka acak bulat antara 0 danJumGen - 2
.- Menambahkan
1
memastikan titik potong berada dalam rentang1
hinggaJumGen-1
.
Menghasilkan Anak dari Crossover:
Anak(1, :) = [Bapak(1:TP) Ibu(TP+1:JumGen)];Anak(2, :) = [Ibu(1:TP) Bapak(TP+1:JumGen)];Anak 1: Menggabungkan bagian depan dari
Bapak
hingga titik potongTP
dengan bagian belakang dariIbu
setelah titik potongTP
.Bapak(1:TP)
mengambil gen dari posisi1
hinggaTP
dari kromosomBapak
.Ibu(TP+1:JumGen)
mengambil gen dari posisiTP+1
hingga akhir kromosomIbu
.Anak(1, :)
menyimpan hasil gabungan ini sebagai kromosom pertama dari anak.
Anak 2: Menggabungkan bagian depan dari
Ibu
hingga titik potongTP
dengan bagian belakang dariBapak
setelah titik potongTP
.Ibu(1:TP)
mengambil gen dari posisi1
hinggaTP
dari kromosomIbu
.Bapak(TP+1:JumGen)
mengambil gen dari posisiTP+1
hingga akhir kromosomBapak
.Anak(2, :)
menyimpan hasil gabungan ini sebagai kromosom kedua dari anak.
Contoh
Misalkan kita memiliki dua kromosom orang tua berikut:
- Bapak:
[1, 2, 3, 4, 5, 6, 7, 8]
- Ibu:
[8, 7, 6, 5, 4, 3, 2, 1]
- JumGen:
8
Membuat Titik Potong:
Misalkan
TP = 4
.Menghasilkan Anak:
Anak 1:
- Bagian depan dari
Bapak
hinggaTP
:[1, 2, 3, 4]
- Bagian belakang dari
Ibu
setelahTP
:[5, 4, 3, 2, 1]
- Gabungan:
[1, 2, 3, 4, 5, 4, 3, 2]
- Bagian depan dari
Anak 2:
- Bagian depan dari
Ibu
hinggaTP
:[8, 7, 6, 5]
- Bagian belakang dari
Bapak
setelahTP
:[6, 7, 8]
- Gabungan:
[8, 7, 6, 5, 6, 7, 8, 1]
- Bagian depan dari
Ringkasan
Fungsi PindahSilang
menggunakan metode crossover satu titik untuk menggabungkan gen dari dua individu orang tua (Bapak
dan Ibu
) untuk menghasilkan dua individu anak. Titik potong dipilih secara acak, dan gen sebelum titik potong diambil dari satu orang tua, sedangkan gen setelah titik potong diambil dari orang tua lainnya. Ini memungkinkan eksplorasi solusi baru dalam ruang pencarian algoritma genetik dan memperkenalkan variasi dalam populasi.
- UkPop (30-1000)
- Psilang (0,6-0,9)
- Pmutasi (1/jumlah gen)
Vidio Penjelasan mengenai AG
- Source Code Simulasi (click here)
- Materi HTML (click here)
- Video Simulasi (click here)
Tidak ada komentar:
Posting Komentar