예제 #1
0
 def train(self):
     self.initParams()
     ga = GA(self)
     population = []
     for i in range(self.MAX_ITER):
         population = ga.selection(ga.population)
         parents = ga.select_parents(population)
         children = ga.crossover(parents)
         newPopulation = ga.mutation(children)
         population = newPopulation
     best_chromosome, best_fit = ga.get_best_chromosome(population)
     W1, W2 = ga.chromosome_to_matrix(best_chromosome)
     self.setAllParams(W1, W2)
     print(best_fit)
예제 #2
0
print("{}".format(204 * "-"))
print("|{:^19s} | {:^54} | {:^123}|".format(
    "OPTIMAL", "MANUFACTURER", "RETAILER"))
print("{}".format(204 * "-"))
print('[{:^3s}] | {:^12s} | {:^8s} | {:^6s} | {:^8s} | {:^10s}'.format(
    'STT', '#NP', 'A', 'C', 'DEMAND', 'NP_M'), end='')
for i in range(len(config.M)):
    print('| {:^5s}'.format('n' + str(i+1)), end='')
for i in range(len(config.K)):
    idx = str(i+1)
    print('| {:^8s} | {:^12s}'.format('a' + idx, "NP_b" + idx), end='')
print("|\n{}".format(204 * "-"))
for i in range(generation_count):
    ga.evaluation()
    ga.selection()
    ga.crossover()
    ga.mutation()
    if i % 1 == 0:
        print('[{:>3d}] | '.format(i), end='')
        ga.show_optimal()


manufacture = ga.get_best_mf()
e_A = manufacture.e_A
A = manufacture.A
sum_e_bi = 0
for i in range(len(config.e_a)):
    sum_e_bi += manufacture.retailers[i].e_a
sys.exit()

for i in range(len(config.e_a)):
예제 #3
0
파일: main.py 프로젝트: elixxx/Method-of-AI
_cnt_generations = 100

fitness_avg = list()
fitness_max = list()
diversity = list()
valid_candidate = list()
gen = GA(population_cnt=_population_cnt,
         rate_crossover=_rate_crossover,
         rate_mutation=_rate_mutation,
         sample_candidate=_sample_candidate)
print("Cross: " + str(_rate_crossover) + "- Mutation: " + str(_rate_mutation) +
      "- tourSize: " + str(_tournament_size) + "- tourRate: " +
      str(_tournament_win_rate))
for generation in range(_cnt_generations):
    gen.mutate()
    gen.crossover(strategy=_strategy)
    gen.evaluate(calc_diversity=_calc_diversity)
    gen.selection(tournament_win_rate=_tournament_win_rate,
                  tournament_size=_tournament_size)
    if gen.generation % 10 == 0:
        print("Gen: " + str(gen.generation) + "- Fitness_avg: " +
              str(gen.fitness_avg) + "- Fitness_best: " +
              str(gen.best_candidate.get_fitness()) + "- Diversity: " +
              str(gen.diversity))
    fitness_avg.append(gen.fitness_avg)
    fitness_max.append(gen.best_candidate.get_fitness())
    diversity.append(gen.diversity)
    if (gen.best_candidate.get_fitness() > 1.0):
        valid_candidate.append(deepcopy(gen.best_candidate))
for best in valid_candidate:
    print("Candidate Fitness " + str(best.get_fitness()))
예제 #4
0
                    hidden_shape=int(np.sqrt(traindata)),
                    kernel='gaussian')
    model[2] = RBFN(input_shape=dimension,
                    hidden_shape=int(np.sqrt(traindata)),
                    kernel='gaussian')
    resetmodel(x, y)

    max_iter = 100
    ga = GA(pop_size=100,
            dimension=dimension,
            lower_bound=lower_bound,
            upper_bound=upper_bound)
    ga.init_Population()
    for i in range(max_iter):
        updatemodel(ga.pop)
        ga.crossover(ga.pc)
        ga.mutation(ga.pm)
        ga.pop = np.unique(ga.pop, axis=0)
        for j in range(0, 3):
            temp = model[j].predict(ga.pop)
            if j == 0:
                fit_value = temp
            else:
                fit_value = fit_value + temp
        fit_value = fit_value.reshape((len(ga.pop), 1))
        ga.selection(fit_value)
        resetmodel(x, y)

    optimum = ga.first[-1]
    endtime = time.perf_counter()
    print('Optimal solution :', optimum)
    #Calculate fitness for each population_vector in population
    fitness_train, fitness_test = fitness(population_vectors)
    train_error.append(np.min(fitness_train))
    test_error.append(np.min(fitness_test))
    print('Train Error:', train_error[-1])
    print('Test Error:', test_error[-1])

    #Select best parents
    parents = ga.select_mating_pool(population=population_vectors,
                                    fitness=fitness_train.copy(),
                                    mode='min',
                                    num_parents=num_parents_mating)
    print(parents.shape[0], 'New parents generated...')

    #Crossover parents
    offsprings = ga.crossover(parents=parents,
                              num_offsprings=sol_per_pop - num_parents_mating)
    print(offsprings.shape[0], 'New offsprings produced...')

    #Mutate offsprings
    mutated_offsprings = ga.mutate(offsprings,
                                   mutation_percent=mutation_percent)
    print(mutated_offsprings.shape[0], 'offsprings mutated')

    #Create new population
    population_vectors[:parents.shape[0], :] = parents
    population_vectors[parents.shape[0]:, :] = mutated_offsprings
    print('New population created')

    #Update the result of this generation in report files
    f = open('train_error.pkl', 'wb')
    pickle.dump(train_error, f)