예제 #1
0
파일: gso.py 프로젝트: mauriceaux/gso
 def createParticle(self, D, i):
     p = _particle.Particle(D, constantes.X_MIN(), constantes.X_MAX())
     b = _binarization.BinarizationStrategy(p.position_i,
                                            self.tTransferencia,
                                            self.tBinary)
     p.position_b = self.repara(b.get_binary())
     p.evaluate(self.costFunc, self.mcostos, self.mrestriccion, self.vrows,
                self.vcolumns)
     return p
예제 #2
0
파일: gso.py 프로젝트: mauriceaux/gso
 def createSSwarm(self, D, i):
     ss = _superswarm.SuperSwarm(D, constantes.X_MIN(), constantes.X_MAX())
     ss.member_superswarm = self.global_best_solution_subswarm[i]
     ss.personal_best_particle = self.global_best_solution_subswarm[i]
     b = _binarization.BinarizationStrategy(ss.member_superswarm,
                                            self.tTransferencia,
                                            self.tBinary)
     ss.position_b = self.repara(b.get_binary())
     ss.evaluate(self.costFunc, self.mcostos, self.mrestriccion, self.vrows,
                 self.vcolumns)
     return ss
예제 #3
0
파일: gso.py 프로젝트: mauriceaux/gso
 def updateSSwarmParticle(self, ss, i, iterNum):
     ss.w = 1 - (iterNum / (constantes.ITERATION_2() + 1))
     ss.update_velocity_level_two(self.global_best_solution)
     ss.update_position_level_two(constantes.X_MIN(), constantes.X_MAX())
     b = _binarization.BinarizationStrategy(ss.member_superswarm,
                                            self.tTransferencia,
                                            self.tBinary)
     ss.position_b = self.repara(b.get_binary())
     ss.evaluate(self.costFunc, self.mcostos, self.mrestriccion, self.vrows,
                 self.vcolumns)
     return ss
예제 #4
0
파일: gso.py 프로젝트: mauriceaux/gso
 def updateParticle(self, p, subSwarmIdx, pNum, iterNum):
     p.w = 1 - (iterNum / (constantes.ITERATION_1() + 1))
     p.update_velocity_level_one(
         self.global_best_solution_subswarm[subSwarmIdx])
     p.update_position_level_one(constantes.X_MIN(), constantes.X_MAX())
     b = _binarization.BinarizationStrategy(p.position_i,
                                            self.tTransferencia,
                                            self.tBinary)
     p.position_b = self.repara(b.get_binary())
     p.evaluate(self.costFunc, self.mcostos, self.mrestriccion, self.vrows,
                self.vcolumns)
     return p
예제 #5
0
 def binarizeMod(self, x):
     return _binarization.BinarizationStrategy(x, self.tTransferencia,
                                               self.tBinary).get_binary()
예제 #6
0
    def __init__(self, costFunc, D, bounds, mcostos, mrestriccion,
                 rutefileexecution, rutefinalfile, ejec, vrows, vcolumns,
                 tTransferencia, tBinary):
        time_ejecucion = time.time(
        )  #Iniciamos variable para registrar tiempo de la ejecucion
        #%--D--%%----EPmax-----%%----L1-------%%-----L2------%%---N---%%---M--%%
        '''print('D: ' + str(D))
        print('EPMax: ' + str(constantes.EPOCH_NUMBER()))
        print('L1: ' + str(constantes.ITERATION_1()))
        print('L2: ' + str(constantes.ITERATION_2()))
        print('N: ' + str(constantes.POP_SIZE()))
        print('M: ' + str(constantes.SUB_POP()))
        print('MIN: ' + str(constantes.X_MIN()))
        print('MAX: ' + str(constantes.X_MAX()))'''
        #print(mcostos)
        err_best_g = -1  # best error for group N
        err_global_best_g = []  # best error for group M
        err_global_best = -1  # best error

        global_best_solution_subswarm = [
        ]  # Global best solution of subswarm i
        member_superswarm = []  #Member i of superswarm
        global_best_solution = []  #Global best solution for the entire swarm X

        glo_best_b = []  # global best position binario

        # establish the swarm
        swarm = []
        subpop = []
        for i in range(constantes.SUB_POP()):
            swarm.append([])
            global_best_solution_subswarm.append([])

            err_best_g = -1
            err_global_best_g.append(-1)
            err_global_best = -1

            for j in range(constantes.POP_SIZE()):
                subpop.append(
                    _particle.Particle(D, constantes.X_MIN(),
                                       constantes.X_MAX()))
                swarm[i].append(subpop[j])
                #                print(type(swarm[i][j].position_i[0]))
                #                exit()
                b = _binarization.BinarizationStrategy(swarm[i][j].position_i,
                                                       tTransferencia, tBinary)
                #print(b.get_binary(),mcostos,mrestriccion,vrows,vcolumns)
                swarm[i][j].position_b = self.repara(b.get_binary(), mcostos,
                                                     mrestriccion, vrows,
                                                     vcolumns)
                #print(swarm[i][j].position_b)
                #swarm[i][j].binariza(tTransferencia,tBinary,1)
                swarm[i][j].evaluate(costFunc, mcostos, mrestriccion, vrows,
                                     vcolumns)
                if swarm[i][j].err_i < err_best_g or err_best_g == -1:
                    swarm[i][j].personal_best_particle = list(
                        swarm[i][j].position_i)
                    swarm[i][j].err_best_i = float(swarm[i][j].err_i)
                    err_best_g = float(swarm[i][j].err_i)
                    #                    print(str(swarm[i][j].err_i)+'<'+str(err_best_g) + '-err: ' + str(err_global_best))
                    #                    exit()
                    if swarm[i][j].err_i < err_global_best_g[
                            i] or err_global_best_g[i] == -1:
                        global_best_solution_subswarm[i] = list(
                            swarm[i][j].position_i)
                        err_global_best_g[i] = float(swarm[i][j].err_i)
                        #print(str(swarm[i][j].err_i)+'<'+str(err_global_best_g[i]) + '-err: ' + str(err_global_best))
                        if swarm[i][
                                j].err_i < err_global_best or err_global_best == -1:
                            global_best_solution = list(swarm[i][j].position_i)
                            glo_best_b = list(swarm[i][j].position_b)
                            err_global_best = float(swarm[i][j].err_i)
#                            print(str(swarm[i][j].err_i)+'<'+str(err_global_best) + '-err: ' + str(err_global_best))

        sswarm = []
        for i in range(0, constantes.SUB_POP()):
            member_superswarm.append([])
            sswarm.append(
                _superswarm.SuperSwarm(D, constantes.X_MIN(),
                                       constantes.X_MAX()))

        global_best_solution = list(global_best_solution_subswarm[1])
        err_global_best = err_global_best_g[1]

        for i in range(0, constantes.SUB_POP()):
            b = _binarization.BinarizationStrategy(sswarm[i].member_superswarm,
                                                   tTransferencia, tBinary)
            sswarm[i].position_b = self.repara(b.get_binary(), mcostos,
                                               mrestriccion, vrows, vcolumns)
            #sswarm[i].binariza(tTransferencia,tBinary,2)
            sswarm[i].evaluate(costFunc, mcostos, mrestriccion, vrows,
                               vcolumns)
            if sswarm[i].err_i < err_global_best_g[i] or err_global_best_g[
                    i] == -1:
                global_best_solution_subswarm[i] = list(
                    sswarm[i].member_superswarm)
                err_global_best_g[i] = float(sswarm[i].err_i)
                #print(str(sswarm[i].err_i)+'<'+str(err_global_best_g[i]) + '-err: ' + str(err_global_best))
                if sswarm[i].err_i < err_global_best or err_global_best == -1:
                    global_best_solution = list(sswarm[i].position_i)
                    glo_best_b = list(sswarm[i].position_b)
                    err_global_best = float(sswarm[i].err_i)
                    #print(str(sswarm[i].err_i)+'<'+str(err_global_best) + '-err: ' + str(err_global_best))

        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        #%Initialization of position and velocity vector ends
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        for ep in range(0, constantes.EPOCH_NUMBER()):
            #BEGION PSO LEVEL 1

            for i in range(0, constantes.SUB_POP()):
                evaluationsCsv = []
                star_time = time.time(
                )  #Iniciamos variable para registrar tiempo en cada iteración
                for k in range(0, constantes.ITERATION_1()):
                    evals = []
                    for j in range(0, constantes.POP_SIZE()):

                        swarm[i][j].update_velocity_level_one(
                            global_best_solution_subswarm[i])
                        swarm[i][j].update_position_level_one(
                            constantes.X_MIN(), constantes.X_MAX())
                        b = _binarization.BinarizationStrategy(
                            swarm[i][j].position_i, tTransferencia, tBinary)
                        swarm[i][j].position_b = self.repara(
                            b.get_binary(), mcostos, mrestriccion, vrows,
                            vcolumns)
                        #swarm[i][j].binariza(tTransferencia,tBinary,1)
                        swarm[i][j].evaluate(costFunc, mcostos, mrestriccion,
                                             vrows, vcolumns)
                        evals.append(swarm[i][j].err_i)
                        if swarm[i][j].err_i < err_best_g or err_best_g == -1:
                            #print(str(swarm[i][j].err_i)+'<'+str(err_best_g) + '-pb-best: ' + str(err_global_best))
                            swarm[i][j].personal_best_particle = list(
                                swarm[i][j].position_i)
                            swarm[i][j].err_best_i = float(swarm[i][j].err_i)
                            err_best_g = float(swarm[i][j].err_i)

                            print(f'err_best_g {err_best_g}')
                            if err_best_g < err_global_best_g[
                                    i] or err_global_best_g[i] == -1:
                                #print(str(swarm[i][j].err_i)+'<'+str(err_global_best_g[i]) + '-gi-best: ' + str(err_global_best))
                                global_best_solution_subswarm[i] = list(
                                    swarm[i][j].position_i)
                                err_global_best_g[i] = float(swarm[i][j].err_i)

                                if err_global_best_g[
                                        i] < err_global_best or err_global_best == -1:
                                    #                                    print(str(swarm[i][j].err_i)+'<'+str(err_global_best) + '-g-best: ' + str(err_global_best))
                                    #                                    exit()
                                    global_best_solution = list(
                                        swarm[i][j].position_i)
                                    glo_best_b = list(swarm[i][j].position_b)
                                    err_global_best = float(swarm[i][j].err_i)
                    evaluationsCsv.append(evals)

                tiempototaliteracion = time.time() - star_time
                fr = open(rutefileexecution, "a+")
                fr.write('EPMax,' + str(ep) + ',M,' + str(i) + ',L1,-,' +
                         str(err_global_best) + ',T,' +
                         str(tiempototaliteracion))
                fr.write("\n")
                fr.close()
                np.savetxt(f"resultados/swarmL{0}S{i}.csv",
                           np.array(evaluationsCsv),
                           delimiter=",")
                #print('EPMax,'+str(ep)+',M,'+str(i)+',L1,-,'+str(err_global_best) + ',T,' + str(tiempototaliteracion))

            # establish the swarm
            for i in range(0, constantes.SUB_POP()):
                sswarm[i].superswarm(global_best_solution_subswarm[i])

            #BEGIN PSO LEVEL 2
            evaluationsCsv = []
            for k in range(0, constantes.ITERATION_2()):
                evals = []
                star_time = time.time(
                )  #Iniciamos variable para registrar tiempo en cada iteración
                for i in range(0, constantes.SUB_POP()):
                    sswarm[i].update_velocity_level_two(global_best_solution)
                    sswarm[i].update_position_level_two(
                        constantes.X_MIN(), constantes.X_MAX())
                    #                    import numpy as np
                    #                    print(f'sswarm[i].member_superswarm {np.array(sswarm[i].member_superswarm).shape}')
                    #                    exit()
                    b = _binarization.BinarizationStrategy(
                        sswarm[i].member_superswarm, tTransferencia, tBinary)
                    sswarm[i].position_b = self.repara(b.get_binary(), mcostos,
                                                       mrestriccion, vrows,
                                                       vcolumns)
                    #sswarm[i].binariza(tTransferencia,tBinary,2)
                    sswarm[i].evaluate(costFunc, mcostos, mrestriccion, vrows,
                                       vcolumns)
                    evals.append(sswarm[i].err_i)
                    # determine if current particle is the best (globally)
                    if sswarm[i].err_i < err_global_best_g[
                            i] or err_global_best_g[i] == -1:
                        #print(str(sswarm[i].err_i)+'<'+str(err_global_best_g[i]) + '-gi-best: ' + str(err_global_best))
                        global_best_solution_subswarm[i] = list(
                            sswarm[i].member_superswarm)
                        err_global_best_g[i] = float(sswarm[i].err_i)

                        if sswarm[
                                i].err_i < err_global_best or err_global_best == -1:
                            #                            print(str(sswarm[i].err_i)+'<'+str(err_global_best) + '-g-best: ' + str(err_global_best))
                            #                            exit()
                            global_best_solution = list(
                                sswarm[i].member_superswarm)
                            glo_best_b = list(sswarm[i].position_b)
                            err_global_best = float(sswarm[i].err_i)
                evaluationsCsv.append(evals)
                tiempototaliteracion = time.time() - star_time
                fr = open(rutefileexecution, "a+")
                fr.write('EPMax,' + str(ep) + ',M,-,L2,' + str(k) + ',' +
                         str(err_global_best) + ',T,' +
                         str(tiempototaliteracion))
                fr.write("\n")
                fr.close()
                #print ('EPMax,'+str(ep)+',M,-,L2,'+str(k)+','+str(err_global_best) + ',T,' + str(tiempototaliteracion))
            print(
                str(sswarm[i].err_i) + '<' + str(err_global_best) +
                '-g-best: ' + str(err_global_best))
            np.savetxt(f"resultados/swarmL{1}S{0}.csv",
                       np.array(evaluationsCsv),
                       delimiter=",")
#            exit()
        tt_ejecucion = time.time(
        ) - time_ejecucion  #tiempo total de la ejecucion
        ff = open(rutefinalfile, "a+")
        ff.write('ejecucion;' + str(ejec) + ';err_global_best;' +
                 str(err_global_best) + ';t;' + str(tt_ejecucion) +
                 ';glo_best_b;' + str(glo_best_b))
        ff.write("\n")
        ff.close()