import random
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
def evaluate_fitness(population):
for individual in population:
individual['fitness'] = round(individual['x']**2+individual['x'], 2)
return population
def selection(population):
sorted_population = sorted(population, key=lambda ind: ind['fitness'], reverse=True)
return sorted_population[:int(0.5 * len(sorted_population))]
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
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
def genetic_algorithm(population_size, min_value, max_value, num_generations):
population = create_population(population_size, min_value, max_value)
population = evaluate_fitness(population)
for i in range(num_generations):
selected_population = selection(population)
new_population = crossover(selected_population, population_size)
new_population = mutation(new_population, 0.1, min_value, max_value)
new_population = evaluate_fitness(new_population)
population = selected_population + new_population
best_individual = max(population, key=lambda ind: ind['fitness'])
return best_individual
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'])