def get_good_solution(task, crossover_rate=CROSSOVER_RATE, mutation_rate=MUTATION_RATE, tournament_size=TOURNAMENT_SIZE, population_size=POPULATION_SIZE): best_individuals_values = np.empty(MAX_ITERATIONS) population = init_population(task, population_size) outer_iterator = 0 best_individual = 0 best_individual_value = 0 global_best_individual = 0 global_best_individual_value = 0 print('Initial value of the knapsack =', population.individuals[0].evaluate()) while outer_iterator < MAX_ITERATIONS: inner_iterator = 0 new_population = Population() while inner_iterator < population_size: parent1 = tournament(population, tournament_size) parent2 = tournament(population, tournament_size) child = crossover(parent1, parent2, crossover_rate) mutate(child, mutation_rate) new_population.add_individual(child) inner_iterator += 1 best_individual = population.best_individual() best_individual_value = best_individual.evaluate() if best_individual_value >= global_best_individual_value: global_best_individual = best_individual global_best_individual_value = best_individual_value new_population.set_first_individual(global_best_individual) population = new_population best_individuals_values[outer_iterator] = global_best_individual_value outer_iterator += 1 return global_best_individual, best_individuals_values
def genetic(): ITERATIONS = 30 POP_SIZE = 40 CROSSOVER_RATE = 0.5 MUTATION_RATE = 0.01 TOURNAMENT_SIZE = 6 task = read('generatedTaskFile.csv') print("Here it goes...") population = init_population(task.numberOfObjects, POP_SIZE, task) i = 0 while i < ITERATIONS: print("New iteration") j = 0 new_population = Population(task) new_population.listOfIndividuals = [] while j < POP_SIZE: parent1 = tournament(population, TOURNAMENT_SIZE, task) parent2 = tournament(population, TOURNAMENT_SIZE, task) child = Individual() child.itemsTaken = crossover(parent1, parent2, CROSSOVER_RATE) mutate(child, MUTATION_RATE) new_population.addIndividualToPopulation(child) j += 1 population = new_population i += 1 return population.best()
def run_task(task): print('Population size: ' + str(POPULATION_SIZE)) print('Number of generations: ' + str(ITERATIONS)) start = timer() population = init_population(task, POPULATION_SIZE) best = get_best_from_population(population) end = timer() print('Execution time: ' + str(end - start)) plt.plot(best) plt.xlabel('GENERATION') plt.ylabel('BEST INDIVIDUAL') plt.show()
def genetic_algorithm(task, crossover_rate=CROSSOVER_RATE, mutation_rate=MUTATION_RATE, tournament_size=TOURNAMENT_SIZE, population_size=POPULATION_SIZE): best_individuals_values = np.empty(MAX_ITERATIONS) start_time = time.time() population = init_population(task, population_size) outer_iterator = 0 best_individual = 0 best_individual_value = 0 global_best_individual = 0 global_best_individual_value = 0 while outer_iterator < MAX_ITERATIONS: inner_iterator = 0 new_population = Population() while inner_iterator < population_size: parent1 = tournament(population, tournament_size) parent2 = tournament(population, tournament_size) child = crossover(parent1, parent2, crossover_rate) mutate(child, mutation_rate) new_population.add_individual(child) inner_iterator += 1 best_individual = population.best_individual() best_individual_value = best_individual.evaluate() if best_individual_value >= global_best_individual_value: global_best_individual = best_individual global_best_individual_value = best_individual_value new_population.set_first_individual(global_best_individual) population = new_population best_individuals_values[outer_iterator] = global_best_individual_value outer_iterator += 1 print("--- Genetic algorithm\'s execution time = %s seconds ---" % (time.time() - start_time)) print('Genetic algorithm\'s final result =', global_best_individual_value)
sys.stderr.write('Usage: run_it [expriment_name (dir)] [generation] [population size]\n') sys.exit(1) scriptname = sys.argv[0] exp_name = sys.argv[1] generation = int( sys.argv[2] ) population = int( sys.argv[3] ) if generation == 0: # init dirctory structure for this generation init_generation(exp_name, generation, population) # init directory structure for next generation init_generation(exp_name, generation+1, population) # initialize the bottom drag values for each member of the population init_population(exp_name, generation, population) else: # init directory structure for next generation init_generation(exp_name, generation+1, population) # run models submit_it(exp_name, generation, population) # evaluate cost function and run genetic algorithm # calc_vrms for current generation # rank current generation rank_population(exp_name, generation, population) # cross over and mutate to create next generation evolve(exp_name, generation, populatoin)