class GeneticGifFinder(object): def __init__(self, clip, min_d=None, max_d=None, threshold=None, max_gen=None, popsize=None, mutation_rate=None, elites=None): self.clip = mpy.VideoFileClip(clip).resize(width=20) self.min_d = 1 if min_d is None else min_d self.max_d = 5 if max_d is None else max_d self.threshold = 40 if threshold is None else threshold self.max_gen = 50 if max_gen is None else max_gen self.popsize = 20 if popsize is None else popsize self.mutation_rate = 0.001 if mutation_rate is None else mutation_rate self.elites = 1 if mutation_rate is None else elites self.f = GeneticFrameDistance(self.clip, self.min_d, self.max_d) self.selector = ParentSelector(self.popsize) self.population = None def run(self): logging.info("generating population...") self.population = GeneticPopulation(self.popsize, self.f) generations = 0 logging.info("starting...") # Run first generation without elitism self.population.next_generation(self.mutation_rate, self.selector) logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation)) best_value = self.population.generation.individuals[0].get_y() generations += 1 while generations < self.max_gen and best_value > self.threshold: self.population.next_generation(self.mutation_rate, self.selector, self.elites) logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation)) best_value = self.population.generation.individuals[0].get_y() generations += 1 logging.info("Best clips: \n{0}".format(self.population.generation)) logging.info("Everything that happened: \n{0}".format(self.population.generations)) def results_to_gif(self, prefix): for i in range(10): self.clip.subclip( *self.f.gene_to_frames(self.population.generation.individuals[i].x) ).write_gif("{0}_{1}.gif".format(prefix, i))
def run(self): logging.info("generating population...") self.population = GeneticPopulation(self.popsize, self.f) generations = 0 logging.info("starting...") # Run first generation without elitism self.population.next_generation(self.mutation_rate, self.selector) logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation)) best_value = self.population.generation.individuals[0].get_y() generations += 1 while generations < self.max_gen and best_value > self.threshold: self.population.next_generation(self.mutation_rate, self.selector, self.elites) logging.info("Generation {0}: \n{1}\n".format(generations, self.population.generation)) best_value = self.population.generation.individuals[0].get_y() generations += 1 logging.info("Best clips: \n{0}".format(self.population.generation)) logging.info("Everything that happened: \n{0}".format(self.population.generations))