예제 #1
0
    def revolution(self, args):
        #config
        if (args.crossmode == "one"):
            cross_func = Crossover.onePoint
        elif (args.crossmode == "two"):
            cross_func = Crossover.twoPoints
        else:
            cross_func = Crossover.randomPoints

        # Prepare dataset
        dataset = readDataset(args.dpath)

        # Create individuals & population
        ppl = Population()
        for i in range(args.individuals):
            individual = Individual()
            individual.createGene(dataset, args.gene)
            ppl.addInd(individual)

        # Evolution
        for i in range(args.revolution):
            # Evaluation population in individuals
            ppl.calcFitness(self.evaluate)
            if ((i % 10) == 0):
                ppl.show()

            # Select parents
            if (args.elite):
                parents = Select.Elite(ppl, args.esize, args.mode)
                parents.extend(
                    Select.Tournament(ppl, args.individuals - args.esize,
                                      args.tornsize, args.mode))
            else:
                parents = Select.Tournament(ppl, args.individuals,
                                            args.tornsize, args.mode)

            # Clossover
            children = cross_func(parents, args.individuals, args.gene,
                                  args.crossrate)

            # Mutation
            children = Mutation.mutation(children, args.mutaterate, dataset)
            # Swap children
            ppl.setPpl(children)

        # show result
        ppl.calcFitness(self.evaluate)
        ppl.show()
예제 #2
0
    def __init__(self, algorithm_config):
        start = time.time()
        variable_config = algorithm_config
        tab_epoch = []
        tab_mean = []
        tab_std = []
        tab_mean2 = []
        tab_std2 = []
        tab_epoch2 = []
        tab_elitary = []
        tab_epoch3 = []
        tab_epoch4 = []
        tab_elitary2 = []
        # chrom = Chromosome(variable_config)
        # chrom = chrom.initialChromosome(variable_config)
        # print(chrom)

        # generujemy populację
        pop = Population(variable_config)
        popul = pop.initialPopulation(variable_config)
        # print(popul)

        randomBinSol = evaluateFitness(variable_config)
        # pojedyncze x
        decision_variables = randomBinSol.decVariables(variable_config, popul)
        # print(decision_variables)

        # dekodujemy na odpowiedniki dziesietne
        decimal = randomBinSol.decoding(decision_variables, variable_config)
        # print(decimal)

        # zamieniamy na zmienne rzeczywiste
        real = randomBinSol.realVariables(variable_config, decimal)
        # print(real)

        # obliczamy wartosc funkcji dla kazdej kolumny

        func_solution = randomBinSol.funcSolution(variable_config, real)
        # print(func_solution)
        tab_mean.append(np.mean(func_solution))
        tab_std.append(np.std(func_solution))
        tab_epoch.append(0)

        counter = 1
        countEp = 0
        selType = SelectionType(variable_config)
        while (counter < variable_config.T):
            selection = selType.selType(variable_config, func_solution, popul)

            # KRZYŻOWANIE
            # print("KRZYŻOWANIE")
            crosov = CrossingOver(variable_config)
            crosingover = crosov.crosingOver(variable_config, selection)
            # print(crosingover)

            # MUTACJA
            # print("MUTACJA")
            mutat = Mutation(variable_config)
            mutation = mutat.mutation(variable_config, crosingover)
            # print(mutation)

            # INWERSJA
            # print("INWERSJA")
            inver = Inversion(variable_config)
            inversion = inver.inversion(variable_config, mutation)
            # print(inversion)

            offspring = np.asarray(inversion)
            # print(offspring)

            decision_variables2 = randomBinSol.decVariables(
                variable_config, offspring)
            # print(decision_variables2)

            # dekodujemy na odpowiedniki dziesietne
            decimal2 = randomBinSol.decoding(decision_variables2,
                                             variable_config)
            # print(decimal2)

            # zamieniamy na zmienne rzeczywiste
            real2 = randomBinSol.realVariables(variable_config, decimal2)
            # print(real2)

            # obliczamy wartosc funkcji dla kazdej kolumny

            func_solution2 = randomBinSol.funcSolution(variable_config, real2)

            combin = Combinate()
            combination = combin.newPopulation(popul, offspring, func_solution,
                                               func_solution2, variable_config)
            popul = combination[0]
            func_solution = combination[1]
            best = combination[2]

            tab_mean.append(np.mean(func_solution))
            tab_std.append(np.std(func_solution))
            tab_epoch.append(counter)
            tab_elitary.append(best)
            tab_epoch3.append(countEp)
            print(tab_elitary)
            if counter != 1:
                tab_mean2.append(np.mean(func_solution))
                tab_std2.append(np.std(func_solution))
                tab_epoch2.append(counter)

            if countEp != 0:
                tab_epoch4.append(countEp)
                tab_elitary2.append(best)

            counter += 1
            countEp += 1

        end = time.time()
        print("wynik czasu")
        el_time = (end - start)

        self.__el_time = el_time
        self.__tab_mean = tab_mean
        self.__tab_std = tab_std
        self.__tab_epoch = tab_epoch
        self.__tab_mean2 = tab_mean2
        self.__tab_std2 = tab_std2
        self.__tab_epoch2 = tab_epoch2
        self.__tab_elitary = tab_elitary
        self.__tab_epoch3 = tab_epoch3
        self.__tab_elitary2 = tab_elitary2
        self.__tab_epoch4 = tab_epoch4
예제 #3
0
파일: xor.py 프로젝트: BiggieBoo18/gp
constants = get_constants(lower=-10, upper=10, bit=True)
ppl.createPopulation(functions=functions,
                     constants=constants,
                     n_ind=n_ind,
                     n_gene=n_gene,
                     n_register=n_register)
eval_function = lambda x: x[0] ^ x[1]  # xor
ppl.excute_all(inputs, eval_function)

# revolution
p = ProgressBar(0, revolution)
for i in range(revolution):
    #print("revolution: ", i)
    p.update(i + 1)
    elite = Selection.elite(ppl, elite_size)
    new_p = copy.deepcopy(elite)
    for j in range(n_ind - elite_size):
        parent = Selection.tournament(ppl, tourn_size)
        elite.append(parent)
        child = Crossover.randomPoints(elite, cross_rate)
        child = Mutation.mutation(child, mutate_rate, n_register, functions,
                                  constants)
        new_p.append(child)
    ppl.setPopulation(new_p)
    ppl.excute_all(inputs, eval_function)
    if ((i % 100) == 0):
        ppl.result()
ppl.result()
ppl.write_result(path)
p.finish()
예제 #4
0
        roulet = Roulette_wheel(variable_config)
        roulette = roulet.roulette(variable_config, func_solution, popul)
        selection = roulette
        #print(roulette)
    '''

    #KRZYŻOWANIE
    #print("KRZYŻOWANIE")
    crosov = CrossingOver(variable_config)
    crosingover = crosov.crosingOver(variable_config, selection)
    #print(crosingover)

    #MUTACJA
    #print("MUTACJA")
    mutat = Mutation(variable_config)
    mutation = mutat.mutation(variable_config, crosingover)
    #print(mutation)

    #INWERSJA
    #print("INWERSJA")
    inver = Inversion(variable_config)
    inversion = inver.inversion(variable_config, mutation)
    #print(inversion)

    offspring = np.asarray(inversion)
    #print(offspring)

    decision_variables2 = randomBinSol.decVariables(variable_config, offspring)
    #print(decision_variables2)

    #dekodujemy na odpowiedniki dziesietne