class Population: def __init__(self): self.artist = Artist(Population.imageFitnessFunction) def evolve(self): oldFitness = self.artist.fitness self.mutationCommands = self.artist.mutate() [m.execute() for m in self.mutationCommands] if self.artist.fitness > oldFitness: return False return True def unevolve(self): if self.mutationCommands: [c.undo() for c in self.mutationCommands] def bestArtist(self): return self.artist @staticmethod def imageFitnessFunction(image): return ImageTools.compareToArray(image, precachedTarget)
population = int(args['population']) input_path = args['file'] img = Image.open(input_path) if args["width"] != None: img = setSize(int(args["width"]), img) size = img.size artist = Artist(None, 50, size) parent_img = artist.draw(size, (0, 0, 0, 255)) artist.getFittness(parent_img, img) while (1): child_artist = Artist(artist.DNA, 50, size) child_artist.DNA = child_artist.mutate() child_img = child_artist.draw(size, (0, 0, 0, 255)) child_artist.getFittness(child_img, img) artists.append(child_artist) for child_artist in artists: if child_artist.fittness < artist.fittness: artist = child_artist if generation % 50 == 0: print "[+] Generation: {}".format(generation) print "[+] Fittness: {}".format(artist.fittness) artist.draw(size, (0, 0, 0, 255), save=True, save_path=output_path, name=str(generation))