def average_n_runs(simulation, n, generations): simulation['stop'].update({'fitness': None, 'generation': generations}) datasets = [run_simulation(simulation, log=False) for _ in range(n)] sum_dataset = { 'average_fitnesses': [0 for _ in range(generations)], 'sigmas': [0 for _ in range(generations)], 'best_fitnesses': [0 for _ in range(generations)] } for i in range(generations): for dataset in datasets: for key in sum_dataset.keys(): sum_dataset[key][i] += dataset[key][i] avg_func = lambda x: float(x) / n avg_dataset = { 'generation_number': generations, 'simulation': simulation, 'average_fitnesses': list(map(avg_func, sum_dataset['average_fitnesses'])), 'sigmas': list(map(avg_func, sum_dataset['sigmas'])), 'best_fitnesses': list(map(avg_func, sum_dataset['best_fitnesses'])) } return avg_dataset
def simulate_n_times(simulation, n): results = [run_simulation(simulation, log=False) for _ in range(n)] print(simulation['problem_parameters']['population_size'], sum(r['generation_number'] < 100 for r in results)) return { 'data': list((r['generation_number'] for r in results)), 'label': simulation['problem_parameters']['population_size'] }
def simulate_n_times(simulation, n): results = [run_simulation(simulation, log=False) for _ in range(n)] print( simulation['problem_parameters']['population_size'], sum(r['generation_number'] < 100 for r in results) ) return { 'data': list((r['generation_number'] for r in results)), 'label': simulation['problem_parameters']['population_size'] }
}, 'adult_selection_method': over_production, 'mate_selection_method': sigma_scaled, 'crossover_method': splice, 'crossover_rate': 0.9, 'mutation_method': mutate_string_genome, 'mutation_rate': 0.01, 'stop': { 'fitness': 1.0, 'generation': 1000 }, } STOP_GENERATION = 1000 while True: L = max(int(1.1 * L), L + 1) simulation['problem_parameters'].update({'genome_size': L}) r = run_simulation(simulation, log=False) if r['generation_number'] < STOP_GENERATION: best = "found in {} generations".format(r['generation_number']) best += '\n' best += str( surprising_sequences.phenotype_representation( r['final_best_individual']['phenotype'], char_set_size=S, genome_size=L)) best += '\n' print(best) else: break
} S = 37 LOCAL = False print('LOCAL={}'.format(LOCAL)) print("S={}".format(S)) L = 84 stops = 0 while True: s['problem_parameters'].update({ 'char_set_size': S, 'genome_size': L, 'local': LOCAL }) r = run_simulation(s, log=False) if r['generation_number'] < 1000: print(r['generation_number'], '\t', surprising_sequences.phenotype_representation( r['final_best_individual']['phenotype'], char_set_size=S, genome_size=L) ) L = max(int(L * 1.1), L + 1) # L += 1 stops = 0 else: stops += 1 print('1000 stop') if stops == 3: break
'adult_selection_method': full_generational_replacement, 'mate_selection_method': ranked, 'crossover_method': splice, 'crossover_rate': 0.25, 'mutation_method': mutate_string_genome, 'mutation_rate': 0.01, 'stop': { 'fitness': 1.0, 'generation': None }, 'plot_sigmas': False } SIMULATIONS = [ ONE_MAX, LOLZ, LOCALLY_SURPRISING, GLOBALLY_SURPRISING ] if __name__ == "__main__": for simulation in SIMULATIONS: results = run_simulation(simulation) plot_simulation_results(results)