Paket 4 (GA)

logo 2.png


Cara Menggunakan Program

  1. Buka Google Colaboratory menggunakan akun anda
  2. Install library bila diperlukan
  3. Gunakan script code program di bawah menggunakan Google Colaboratory
  4. Modifikasi sesuai materi yang dipelajari

Program Algoritma Genetika

Tujuan

  • Mencari nilai maksimum dari fungsi y = x^2 + x dalam rentang nilai x dari -4 hingga 4.
  • Lakukan uji coba mengganti empat parameter tersebut dan pelajari pengaruhnya terhadap algoritma.
  • Kalian dapat mengganti fungsi objektifnya pula.

Parameter

  • Ukuran populasi 10
  • Jumlah generasi 100
  • Peluang crossover 0.5
  • Peluang mutasi 0.1

Tahapan

  1. Inisialisasi Populasi
  2. Evaluasi Fitness
  3. Selection
  4. Crossover
  5. Mutasi
  6. Evaluasi Fitness
  7. Penggabungan Populasi
import random
# Inisialisasi populasi
def create_population(size, min_value, max_value):
population = []
for i in range(size):
individual = {'x': round(random.uniform(min_value, max_value), 2)}
population.append(individual)
return population
# Evaluasi fitness
def evaluate_fitness(population):
for individual in population:
individual['fitness'] = round(individual['x']**2+individual['x'], 2)
return population
# Seleksi
def selection(population):
sorted_population = sorted(population, key=lambda ind: ind['fitness'], reverse=True)
return sorted_population[:int(0.5 * len(sorted_population))]
# Crossover
def crossover(selected_population, population_size):
new_population = []
while len(new_population) < population_size:
parent1 = random.choice(selected_population)
parent2 = random.choice(selected_population)
child = {'x': round(random.uniform(min(parent1['x'], parent2['x']), max(parent1['x'], parent2['x'])), 2)}
new_population.append(child)
return new_population
# Mutasi
def mutation(population, mutation_rate, min_value, max_value):
for individual in population:
if random.random() < mutation_rate:
individual['x'] = round(random.uniform(min_value, max_value), 2)
return population
# Algoritma genetika
def genetic_algorithm(population_size, min_value, max_value, num_generations):
# Inisialisasi populasi
population = create_population(population_size, min_value, max_value)
# Evaluasi fitness
population = evaluate_fitness(population)
for i in range(num_generations):
# Seleksi
selected_population = selection(population)
# Crossover
new_population = crossover(selected_population, population_size)
# Mutasi
new_population = mutation(new_population, 0.1, min_value, max_value)
# Evaluasi fitness
new_population = evaluate_fitness(new_population)
# Penggabungan populasi
population = selected_population + new_population
# Mencari individu terbaik
best_individual = max(population, key=lambda ind: ind['fitness'])
return best_individual
# Main program
if __name__ == '__main__':
population_size = 10
min_value = -4
max_value = 4
num_generations = 100
best_individual = genetic_algorithm(population_size, min_value, max_value, num_generations)
print("Nilai x terbaik:", best_individual['x'])
print("Nilai y terbaik:", best_individual['fitness'])

© Copyright 2023, Ganesha Operation. All Rights Reserved