Example #1
0
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
Example #2
0
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()
Example #3
0
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()
Example #4
0
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)
Example #5
0
    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)