Algoritma Genetika
Tujuan
Mahasiswa diharapkan dapat:
• Mahasiswa memahami cara kerja algoritma genetika.
• Mahasiswa dapat mengetahui dan mengenal contoh studi kasus yang dapat
diselesaikan dengan metode algoritma genetika.
• Mahasiswa mampu menerapkan metode algoritma genetika menggunakan bahasa
Python
Ringkasan Materi
1. Definisi Algoritma Genetika
Algorima genetika adalah algoritma optimasi yang meniru proses seleksi yang ada di alam.
Proses seleksi alam ini didasarkan pada Survival of the Fittest: proses di alam yang membuat
individu terbaik (hewan, tumbuhan, atau lainnya) bertahan hidup. Individu terkuat kemudian
bereproduksi, melahirkan generasi baru. Alam juga menambahkan sedikit keacakan dalam
bentuk mutasi pada genom. Generasi baru adalah campuran dari ciri individu yang kuat dan
lemah, tetapi yang kuat (fit) akan bertahan, kemudian kawin dan kemudian melahirkan generasi
baru. Hasilnya adalah peningkatan yang konsisten dari generasi ke generasi.
Tahapan dari Algoritma Genetika adalah seperti pada Gambar 1.
Gambar 1.Ilustrai Proses Algoritma Genetika
PRAKTIKUM
1) Algoritma genetika akan digunakan untuk menyelesaikan persamaan:
Y = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6
Nilai adalah x adalah sebagai berikut (x1,x2,x3,x4,x5,x6)=(4,-2,7,5,11,1). Pada praktikum ini
akan dicari nilai w1 hingga w6. Buat kode seperti berikut untuk mendefinisikan x1 sampai x6.
Pada tahap selanjutnya mendefinisikan populasi. Berdasarkan jumlah weight yang akan dicari
minimal ada 6 gen pada setiap kromosom. Jumlah individu pada populasi tidak ada yang
mengatur tentang hal tersebut.
Contoh hasil populasi dari code diatas adalah matriks berukuran 8x6, seperti berikut:
[[-2.19134006 -2.88907857 2.02365737 -3.97346034 3.45160502 2.05773249]
[ 2.12480298 2.97122243 3.60375452 3.78571392 0.28776565 3.5170347 ]
[ 1.81098962 0.35130155 1.03049548 -0.33163294 3.52586421 2.53845644]
[-0.63698911 -2.8638447 2.93392615 -1.40103767 -1.20313655 0.30567304]
[-1.48998583 -1.53845766 1.11905299 -3.67541087 1.33225142 2.86073836]
[ 1.14159503 2.88160332 1.74877772 -3.45854293 0.96125878 2.99178241]
[ 1.96561297 0.51030292 0.52852716 -1.56909315 -2.35855588 2.29682254]
[ 3.00912373 -2.745417 3.27131287 -0.72163167 0.7516408 0.00677938]]
Pada contoh ini terdapat 5 generasi . turunan yang akan degenerate. File ga.py terpadat pada
bagian akhir dokumen ini.
import ga
num_generations = 5
num_parents_mating = 4
for generation in range(num_generations):
# Measuring the fitness of each chromosome in the population.
fitness = ga.cal_pop_fitness(equation_inputs, new_population)
# Selecting the best parents in the population for mating.
parents = ga.select_mating_pool(new_population, fitness,
num_parents_mating)
for k in range(offspring_size[0]):
# Index of the first parent to mate.
parent1_idx = k%parents.shape[0]
# Index of the second parent to mate.
parent2_idx = (k+1)%parents.shape[0]
# The new offspring will have its first half of its genes taken from the first parent.
offspring[k, 0:crossover_point] = parents[parent1_idx, 0:crossover_point]
# The new offspring will have its second half of its genes taken from the second parent.
offspring[k, crossover_point:] = parents[parent2_idx, crossover_point:]
return offspring
File implementation_ga.py
import numpy
import ga
"""
The y=target is to maximize this equation ASAP:
y = w1x1+w2x2+w3x3+w4x4+w5x5+6wx6
where (x1,x2,x3,x4,x5,x6)=(4,-2,3.5,5,-11,-4.7)
What are the best values for the 6 weights w1 to w6?
We are going to use the genetic algorithm for the best possible values after a number
of generations.
"""
"""
Genetic algorithm parameters:
Mating pool size
Population size
"""
sol_per_pop = 8
num_parents_mating = 4
"""
new_population[0, :] = [2.4, 0.7, 8, -2, 5, 1.1]
new_population[1, :] = [-0.4, 2.7, 5, -1, 7, 0.1]
new_population[2, :] = [-1, 2, 2, -3, 2, 0.9]
new_population[3, :] = [4, 7, 12, 6.1, 1.4, -4]
new_population[4, :] = [3.1, 4, 0, 2.4, 4.8, 0]
new_population[5, :] = [-2, 3, -7, 6, 3, 3]
"""
best_outputs = []
num_generations = 1000
for generation in range(num_generations):
print("Generation : ", generation)
# Measuring the fitness of each chromosome in the population.
fitness = ga.cal_pop_fitness(equation_inputs, new_population)
print("Fitness")
print(fitness)
best_outputs.append(numpy.max(numpy.sum(new_population*equation_inputs, axis=1)))
# The best result in the current iteration.
print("Best result : ", numpy.max(numpy.sum(new_population*equation_inputs, axis=1)))
import matplotlib.pyplot
matplotlib.pyplot.plot(best_outputs)
matplotlib.pyplot.xlabel("Iteration")
matplotlib.pyplot.ylabel("Fitness")
matplotlib.pyplot.show()