poprawka wyboru
Signed-off-by: Neerka <kuba.markil0220@gmail.com>
This commit is contained in:
parent
a692108116
commit
21e54bb946
Binary file not shown.
@ -33,13 +33,24 @@ def mutate(individual):
|
|||||||
individual[idx1], individual[idx2] = individual[idx2], individual[idx1]
|
individual[idx1], individual[idx2] = individual[idx2], individual[idx1]
|
||||||
|
|
||||||
|
|
||||||
|
def roulette_selection(population, fitnesses):
|
||||||
|
total_fitness = sum(fitnesses)
|
||||||
|
selection_point = random.uniform(0, total_fitness)
|
||||||
|
current = 0
|
||||||
|
for individual, fitness in zip(population, fitnesses):
|
||||||
|
current += fitness
|
||||||
|
if current <= selection_point:
|
||||||
|
return individual
|
||||||
|
|
||||||
|
|
||||||
def genetic_algorithm(points, population_size, generations):
|
def genetic_algorithm(points, population_size, generations):
|
||||||
population = [random.sample(range(len(points)), len(points)) for _ in range(population_size)]
|
population = [random.sample(range(len(points)), len(points)) for _ in range(population_size)]
|
||||||
for _ in range(generations):
|
for _ in range(generations):
|
||||||
population.sort(key=lambda individual: calculate_fitness(individual, points), reverse=True)
|
fitnesses = [calculate_fitness(individual, points) for individual in population]
|
||||||
next_generation = population[:population_size // 10]
|
next_generation = []
|
||||||
while len(next_generation) < population_size:
|
while len(next_generation) < population_size:
|
||||||
parent1, parent2 = random.choices(population[:population_size // 2], k=2)
|
parent1 = roulette_selection(population, fitnesses)
|
||||||
|
parent2 = roulette_selection(population, fitnesses)
|
||||||
child = crossover(parent1, parent2)
|
child = crossover(parent1, parent2)
|
||||||
if random.random() < 0.01:
|
if random.random() < 0.01:
|
||||||
mutate(child)
|
mutate(child)
|
||||||
@ -64,4 +75,4 @@ for i in range(1, 29):
|
|||||||
if i % 2 == 1 and i % 4 != 1:
|
if i % 2 == 1 and i % 4 != 1:
|
||||||
point_list.append((i, 10))
|
point_list.append((i, 10))
|
||||||
|
|
||||||
print(genetic_algorithm(point_list, 100, 1000))
|
print(genetic_algorithm(point_list, 100, 10000))
|
||||||
|
Loading…
Reference in New Issue
Block a user