def linkMutate(self, forceBias): neuron1 = self.randomNeuron(False) neuron2 = self.randomNeuron(True) newLink = Gene() if neuron1 <= Inputs and neuron2 <= Inputs: #Both input nodes return if neuron2 <= Inputs: # Swap output and input temp = neuron1 neuron1 = neuron2 neuron2 = temp newLink.into = neuron1 newLink.out = neuron2 if forceBias: newLink.into = Inputs if self.contains_link(newLink): return newLink.innovation = self.pool.new_innovation() newLink.weight = random.random() * 4 - 2 self.genes.append(newLink)
def loadFile(self, filename, env): file = open(filename, "r") self.__init__(env) self.generation = int(file.readline().replace("\n", "")) self.maxFitness = int(file.readline().replace("\n", "")) #gui.settext(5, 8, maxFitnessLabel, "Max Fitness. " .. math.floor(pool.maxFitness)) numSpecies = int(file.readline().replace("\n", "")) for s in range(0, numSpecies): species = Species() self.species.append(species) species.topFitness = float(file.readline().replace("\n", "")) species.staleness = int(file.readline().replace("\n", "")) numGenomes = int(file.readline().replace("\n", "")) for g in range(0, numGenomes): genome = Genome(self) species.genomes.append(genome) genome.fitness = float(file.readline().replace("\n", "")) genome.maxneuron = int(file.readline().replace("\n", "")) line = file.readline().replace("\n", "") while line != "done": genome.mutationRates[line] = float(file.readline().replace( "\n", "")) line = file.readline().replace("\n", "") numGenes = int(file.readline().replace("\n", "")) for n in range(0, numGenes): gene = Gene() genome.genes.append(gene) enabled = 0 line = file.readline() data = [] for x in [x for i, x in enumerate(line.split(" "))]: try: data.append(int(x)) except ValueError: data.append(float(x)) gene.into, gene.out, gene.weight, gene.innovation, enabled = data gene.enabled = enabled == 1 file.close() while self.fitnessAlreadyMeasured(): self.nextGenome() self.initializeRun() self.currentFrame = self.currentFrame + 1