예제 #1
0
def main():
    global fileName_input, N
    fileName_input = "fricker.txt"
    fileName_output = fileName_input[:-4] + "_solutie.txt"

    N = None
    N, cityList=read()
#     N, cityList=readCiudat()
    print(cityList)

    popSize = 100
    noGen = 1000
    mutationRate = 0.01
    eliteSize = 20
    ga = GA(popSize, eliteSize, cityList, mutationRate)
    ga.initialise()
    ga.evaluate()
    maximFitness = -1
    f = open(fileName_output, 'w')
    global currentChromosome
    for g in range(noGen):
        currentChromosome = ga.bestChromosome()
        if currentChromosome.fitness > maximFitness:
            maximFitness = currentChromosome.fitness
#             bestChromo = currentChromosome
        f.write('Best solution in generation ' + str(g) + ' is: x = ' + str(currentChromosome.repres) + ' f(x) = ' + str(currentChromosome.fitness))
        f.write('\n')
        ga.oneGeneration()

    f.write(str(N))
    f.write('\n')
    index = 0
    for i in range(0, len(currentChromosome.repres)):
        if currentChromosome.repres[i] == 0:
            index = i
    i = index
    f.write(str(currentChromosome.repres[i] + 1) + ' ')
    i += 1
    while i != index:
        if i == len(currentChromosome.repres):
            i = 0
        else:
            f.write(str(currentChromosome.repres[i] + 1) + ' ')
            i += 1
    f.write('\n')
    route = currentChromosome.repres
    distance = 0
    for i in range(0, len(route)):
        fromCity = route[i]
        toCity = None
        if i + 1 < len(route):
            toCity = route[i + 1]
        else:
            toCity = route[0]
        distance += cityList[fromCity][toCity]
    f.write(str(distance))
    f.write('\n')
    f.close()
예제 #2
0
파일: main.py 프로젝트: elixxx/Method-of-AI
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()))
    best.print()