def crossover(self, pcross):
     for i in xrange(0, self.pop_size, 2):
         if random() < pcross:
             (son1, son2) = Crossovers.single_point_crossover(self.internal_pop[i], self.internal_pop[i+1])
             self.internal_pop[i] = son1
             self.internal_pop[i].needs_eval = True
             self.internal_pop[i+1] = son2
             self.internal_pop[i+1].needs_eval = True
Exemple #2
0
def cruzar_y_mutar(rutaparticula, rutavecino, opcross, opmut):
    # Por defecto se realizará un crossover Order1 y no mutacion
    if opcross == 1:  # Order1
        nuevaruta = Crossovers.Order1(rutaparticula, rutavecino)
    elif opcross == 2:  # Cycle
        nuevaruta = Crossovers.Cycle(rutaparticula, rutavecino)
    elif opcross == 3:  # Partially mapped crossover
        nuevaruta = Crossovers.PMX(rutaparticula, rutavecino)
    else:  # Si no es numero de operador valido, se realizar un Order1
        nuevaruta = Crossovers.Order1(rutaparticula, rutavecino)

    # Mutaciones. Por defecto no se realizará la operacion de mutacion
    # Hay un 10% de probabilidades de realizar una mutacion
    if random.randint(0, 100) < 15:
        if opmut == 1:  # Inversion
            nuevaruta = Mutations.Inversion(nuevaruta)
        elif opmut == 2:  # SingleSwap
            nuevaruta = Mutations.RandomSwap(nuevaruta)

    return nuevaruta
#import Mutators
import time

if __name__ == "__main__":
    size = 100
    cross_max_iters = 100000
    #mut_max_iters = 1000000
    pmut = 0.02
    dad = BinaryString.BinaryString(size)
    mom = BinaryString.BinaryString(size)
    #print dad
    #print mom
    
    start = time.time()
    for i in xrange(1, cross_max_iters):
        (son1, son2) = Crossovers.single_point_crossover(dad, mom)    
    end = time.time()
    print "single_point_crossover time:", ((end-start)*1000) / cross_max_iters, "ms"
    
    #print son1
    #print son2

    start = time.time()
    for i in xrange(1, cross_max_iters):
        (son1, son2) = Crossovers.two_point_crossover(dad, mom)    
    end = time.time()
    print "two_point_crossover time:", ((end-start)*1000) / cross_max_iters, "ms"

    start = time.time()
    for i in xrange(1, cross_max_iters):
        (son1, son2) = Crossovers.uniform_crossover(dad, mom)