def __init__(self, objfunc, var_bounds, individual_size, max_iter, max_or_min, **kwargs): super().__init__(objfunc) self.max_iter = max_iter # 定义个体 / 种群 self.individual = BinaryIndividual(ranges=var_bounds, eps=0.001) self.population = Population(indv_template=self.individual, size=individual_size).init() # Create genetic operators. # selection = RouletteWheelSelection() selection = TournamentSelection() crossover = UniformCrossover(pc=0.8, pe=0.5) mutation = FlipBitBigMutation(pm=0.1, pbm=0.55, alpha=0.6) self.engine = GAEngine(population=self.population, selection=selection, crossover=crossover, mutation=mutation, analysis=[FitnessStore]) @self.engine.fitness_register def fitness(indv): """ 适应度函数: 注意这里默认为优化得到最小值 :param indv: :return: """ x = indv.solution if max_or_min == 'max': return objfunc(x, **kwargs) else: return -objfunc(x, **kwargs) @self.engine.analysis_register class ConsoleOutputAnalysis(OnTheFlyAnalysis): interval = 1 master_only = True def register_step(self, g, population, engine): best_indv = population.best_indv(engine.fitness) msg = 'Generation: {}, best fitness: {:.3f}'.format( g, engine.fitness(best_indv)) # self.logger.info(msg) def finalize(self, population, engine): best_indv = population.best_indv(engine.fitness) x = best_indv.solution y = engine.fitness(best_indv) msg = 'Optimal solution: ({}, {})'.format(x, y)
from gaft.operators import UniformCrossover from gaft.operators import FlipBitBigMutation # Built-in best fitness analysis. from gaft.analysis.fitness_store import FitnessStore from gaft.analysis.console_output import ConsoleOutput # Define population. indv_template = BinaryIndividual(ranges=[(-2, 2), (-2, 2)], eps=0.001) population = Population(indv_template=indv_template, size=50).init() # Create genetic operators. #selection = RouletteWheelSelection() selection = TournamentSelection() crossover = UniformCrossover(pc=0.8, pe=0.5) mutation = FlipBitBigMutation(pm=0.1, pbm=0.55, alpha=0.6) # Create genetic algorithm engine. # Here we pass all built-in analysis to engine constructor. engine = GAEngine(population=population, selection=selection, crossover=crossover, mutation=mutation, analysis=[ConsoleOutput, FitnessStore]) # Define fitness function. @engine.fitness_register def fitness(indv): x, y = indv.solution return y * sin(2 * pi * x) + x * cos(2 * pi * y)
# Built-in best fitness analysis. from gaft.analysis.fitness_store import FitnessStore from gaft.analysis.console_output import ConsoleOutput # Define population. indv_template = BinaryIndividual(ranges=[XB, YB], eps=EPS) population = Population(indv_template=indv_template, size=POPULATION_SIZE).init() # Create genetic operators. selection = SELECTION crossover = UniformCrossover(pc=PC, pe=PE) mutation = FlipBitBigMutation(pm=PM, pbm=PBM, alpha=ALPHA) # Create genetic algorithm engine. # Here we pass all built-in analysis to engine constructor. engine = GAEngine(population=population, selection=selection, crossover=crossover, mutation=mutation, analysis=[ConsoleOutput, FitnessStore]) # Define fitness function. @engine.fitness_register @engine.minimize def fitness(indv): x, y = indv.solution