from astar import Astar import numpy as np from DNA import DNA import random import copy def genetic(goals, A): recordDistance = 1000000000 #count = 0 generation = 0 totalPopulaton = 10 population = [] matingPool = [] mutationRate = 0.01 for i in range(totalPopulaton): population.append(DNA(goals, recordDistance)) for j in range(totalPopulaton): matingPool.clear() generation = generation + 1 for i in range(totalPopulaton): population[i].calcFitness(A) if population[i].fitness < recordDistance: recordDistance = population[i].fitness best = copy.deepcopy(population[i]) bestGeneration = generation for i in range(totalPopulaton): n = population[i].fitness * 100 for j in range(int(n)): matingPool.append(population[i]) for i in range(totalPopulaton): if matingPool: a = random.randint(0, len(matingPool) - 1) b = random.randint(0, len(matingPool) - 1) partnerA = matingPool[a] partnerB = matingPool[b] child = partnerA.crossover(partnerB) child.mutate(mutationRate) population[i] = child return best