- 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,JumGenadalahNvar * 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
iidari 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
jjdari 1 hinggaNbit. Untuk setiap bit, kita mengakumulasi nilai biner yang terkode dalam variabelx(ii):Kromosom((ii-1)*Nbit+jj)mengambil bit ke-jjdari kromosom yang mengkodekan variabel ke-ii.2^(-jj)mengonversi bit ke-jjmenjadi 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 barisKromosomyang 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;Nvaradalah jumlah variabel yang ingin didekodekan, yaitu 2 variabel.Nbitadalah jumlah bit yang mengkodekan setiap variabel, yaitu 10 bit per variabel.Raadalah batas atas rentang nilai real yang diinginkan untuk variabel, yaitu 5.12.Rbadalah batas bawah rentang nilai real yang diinginkan untuk variabel, yaitu -5.12.
Panggilan Fungsi
DekodekanKromosom:x = DekodekanKromosom(Kromosom, Nvar, Nbit, Ra, Rb);- Fungsi
DekodekanKromosomakan mengubah kromosom binerKromosommenjadi 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,xdiharapkan sebagai vektor dengan setidaknya dua elemen (misalnyax = [x1, x2]), di manax1danx2adalah nilai-nilai yang diperoleh dari proses dekode kromosom atau input lain.BilKecil: Parameter tambahan yang digunakan untuk menghindari nilai fitness menjadi terlalu kecil. Biasanya,BilKeciladalah 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:BilKecilditambahkan 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);
BilKecildiatur sebagai0.1, digunakan untuk stabilisasi dalam fungsi fitnessEvaluasiIndividu.fitnessmenghitung fitness individuxmenggunakan 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
Populasidan mendekodifikasinya ke nilai realxdenganDekodekanKromosom. - Menghitung fitness dari individu tersebut dan menyimpannya dalam
Fitness(1). MaxFdanMinFdiinisialisasi dengan fitness individu pertama, sehingga saat iniMaxFdanMinFsama dengan fitness individu pertama.IndeksIndividuTerbaikdiatur ke 1, menandakan bahwa individu pertama adalah yang terbaik saat ini.
for ii = 2:UkPopKromosom = 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 = 2hinggaUkPop. - 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, updateMaxFdanIndeksIndividuTerbaik, serta simpanxsebagaiBestX(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
TemPopulasiadalah salinan dariPopulasiyang 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
IterasiMulaike 3. Salin individu terbaik ke baris pertama dan kedua dariTemPopulasi. - Jika tidak genap, set
IterasiMulaike 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);SFadalah vektor nilai fitness yang telah diurutkan dari yang terkecil hingga terbesar.IndFadalah indeks yang menunjukkan urutan dari nilai fitness dalam vektor asli.IndFdigunakan 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));endLFRadalah vektor hasil yang berisi nilai fitness baru berdasarkan skala linear.Loop
for rr = 1:UkPopmengiterasi melalui setiap individu dalam populasi.rradalah 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.0Untuk
rr = 2:LFR(IndF(5 - 2 + 1)) = LFR(4) = MaxF - (MaxF - MinF) * ((2 - 1) / (4)) = 0.75Untuk
rr = 3:LFR(IndF(5 - 3 + 1)) = LFR(3) = MaxF - (MaxF - MinF) * ((3 - 1) / (4)) = 0.5Untuk
rr = 4:LFR(IndF(5 - 4 + 1)) = LFR(2) = MaxF - (MaxF - MinF) * ((4 - 1) / (4)) = 0.25Untuk
rr = 5:LFR(IndF(5 - 5 + 1)) = LFR(1) = MaxF - (MaxF - MinF) * ((5 - 1) / (4)) = 0.0Hasil:
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);JumFitnessadalah total dari semua nilai fitness dalamLinearFitness.- Ini digunakan untuk menghitung probabilitas kumulatif masing-masing individu.
Inisialisasi Variabel:
KumulatifFitness = 0;RN = rand;ii = 1;KumulatifFitnessmenyimpan jumlah kumulatif fitness yang akan dibandingkan dengan angka acak.RNadalah angka acak yang dihasilkan dari distribusi uniform [0,1], digunakan untuk menentukan individu yang terpilih.iiadalah 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 (
iidari 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 / JumFitnessadalah probabilitas kumulatif yang menggambarkan berapa bagian dari total fitness yang telah "dilewati" saat mengiterasi. - Pemilihan Individu: Angka acak
RNmembagi 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.65Iterasi dan Kumulatif Fitness:
Individu 1:
KumulatifFitness = 10KumulatifFitness / JumFitness = 10 / 100 = 0.10(0.10 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 2:
KumulatifFitness = 10 + 20 = 30KumulatifFitness / JumFitness = 30 / 100 = 0.30(0.30 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 3:
KumulatifFitness = 30 + 30 = 60KumulatifFitness / JumFitness = 60 / 100 = 0.60(0.60 < 0.65)- Lanjutkan ke individu berikutnya.
Individu 4:
KumulatifFitness = 60 + 40 = 100KumulatifFitness / 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 kromosomBapakdanIbu.
Proses dalam Fungsi
Membangkitkan Titik Potong:
TP = 1 + fix(rand * (JumGen - 1));TP: Titik potong untuk crossover, yang ditentukan secara acak antara1danJumGen-1. Titik ini adalah tempat di mana kromosom akan dipotong dan digabungkan.randmenghasilkan angka acak antara 0 dan 1.fix(rand * (JumGen - 1))menghasilkan angka acak bulat antara 0 danJumGen - 2.- Menambahkan
1memastikan titik potong berada dalam rentang1hinggaJumGen-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
Bapakhingga titik potongTPdengan bagian belakang dariIbusetelah titik potongTP.Bapak(1:TP)mengambil gen dari posisi1hinggaTPdari kromosomBapak.Ibu(TP+1:JumGen)mengambil gen dari posisiTP+1hingga akhir kromosomIbu.Anak(1, :)menyimpan hasil gabungan ini sebagai kromosom pertama dari anak.
Anak 2: Menggabungkan bagian depan dari
Ibuhingga titik potongTPdengan bagian belakang dariBapaksetelah titik potongTP.Ibu(1:TP)mengambil gen dari posisi1hinggaTPdari kromosomIbu.Bapak(TP+1:JumGen)mengambil gen dari posisiTP+1hingga 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
BapakhinggaTP:[1, 2, 3, 4] - Bagian belakang dari
IbusetelahTP:[5, 4, 3, 2, 1] - Gabungan:
[1, 2, 3, 4, 5, 4, 3, 2]
- Bagian depan dari
Anak 2:
- Bagian depan dari
IbuhinggaTP:[8, 7, 6, 5] - Bagian belakang dari
BapaksetelahTP:[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)

.png)
.png)
.png)
.png)
Tidak ada komentar:
Posting Komentar