Пример #1
0
def Crossover():
    global FunEval
    for i in range(0, PopSize):

        if (random.random() <= CR):

            # Choose two random indices
            i1, i2 = random.sample(range(0, PopSize), 2)

            # Parents
            p1 = Pop[i1]
            p2 = Pop[i2]

            # Choose a crossover point
            pt = random.randint(1, FF.D - 2)

            # Generate new childs
            c1 = p1.Chromosome[0:pt] + p2.Chromosome[pt:]
            c2 = p2.Chromosome[0:pt] + p1.Chromosome[pt:]

            # Get the fitness of childs
            c1Fitness = FF.MyFitFun(q, c1)
            FunEval = FunEval + 1
            c2Fitness = FF.MyFitFun(q, c2)
            FunEval = FunEval + 1

            # Select between parent and child
            if c1Fitness < p1.Fitness:
                Pop[i1].Fitness = c1Fitness
                Pop[i1].Chromosome = c1

            if c2Fitness < p2.Fitness:
                Pop[i2].Fitness = c2Fitness
                Pop[i2].Chromosome = c2
Пример #2
0
def Mutation():
    global FunEval, q

    for i in range(0, PopSize):

        if (random.random() <= MR):

            # Choose random index
            r = random.randint(0, PopSize - 1)

            # Choose a parent
            p = deepcopy(Pop[r])

            # Choose mutation point
            pt = random.randint(0, FF.D - 1)

            # Generate new childs
            c = deepcopy(p.Chromosome)

            # Mutation
            c[pt] = round(random.uniform(FF.LB, FF.UB), 2)

            #Get the fitness of childs
            cFitness = FF.MyFitFun(q, c)
            FunEval = FunEval + 1

            # Select between parent and child
            if cFitness < p.Fitness:
                Pop[r].Fitness = cFitness
                Pop[r].Chromosome = c
def DEOperation():
    global FunEval
    for i in range(0, PopSize):

        # Choose three random indices
        i1, i2, i3 = random.sample(range(0, PopSize), 3)

        # Iterate for every Dimension
        NewChild = []
        for j in range(FF.D):
            if (random.random() <= CR):
                k = Pop[i1].Chromosome[j] + F_Inertia * (
                    Pop[i2].Chromosome[j] - Pop[i3].Chromosome[j])

                # If new dimention cross LB
                if k < FF.LB:
                    k = random.uniform(FF.LB, FF.UB)

                # If new dimention cross LB
                if k > FF.UB:
                    k = random.uniform(FF.LB, FF.UB)

                NewChild.append(round(k, 2))

            else:
                NewChild.append(Pop[i].Chromosome[j])

# Child Fitness
        NewChildFitness = round(FF.MyFitFun(q, NewChild), 2)
        FunEval = FunEval + 1

        # Select between parent and child
        if NewChildFitness < Pop[i].Fitness:
            Pop[i].Fitness = NewChildFitness
            Pop[i].Chromosome = NewChild
Пример #4
0
def Init():
    global FunEval
    for i in range(0, PopSize):
        Chromosome = []
        for j in range(0, FF.D):
            Chromosome.append(round(random.uniform(FF.LB, FF.UB), 2))
        Fitness = FF.MyFitFun(q, Chromosome)
        FunEval = FunEval + 1
        NewIndividual = Individual(Chromosome, Fitness)
        Pop.append(NewIndividual)
Пример #5
0
def Init():
    global funEval
    for i in range(0, PopSize):
        particle = []
        velocity = []
        for j in range(0, FF.D):
            particle.append(round(random.uniform(FF.LB, FF.UB), 2))
            velocity.append(round(random.uniform(vLB, vUB), 2))

        particleFitness = round(FF.MyFitFun(q, particle), 2)
        funEval = funEval + 1
        newIndividual = Individual(particle, particleFitness, velocity,
                                   deepcopy(particle), particleFitness)
        Pop.append(newIndividual)
Пример #6
0
def PSOOperation():
    global funEval

    for i in range(0, PopSize):
        for j in range(0, FF.D):

            # Choose two random numbers
            r1 = random.random()
            r2 = random.random()

            # Velocity update
            Pop[i].velocity[j] = w * Pop[i].velocity[j] + \
                                c1 * r1 * (Pop[i].pBest[j] - Pop[i].particle[j]) + \
                                c2 * r2 * (gBest[j] - Pop[i].particle[j])

            if Pop[i].velocity[j] < vLB:
                Pop[i].velocity[j] = random.uniform(vLB, vUB)

            if Pop[i].velocity[j] > vUB:
                Pop[i].velocity[j] = random.uniform(vLB, vUB)

            # Particle update
            Pop[i].particle[j] = Pop[i].particle[j] + Pop[i].velocity[j]

            if Pop[i].particle[j] < FF.LB:
                Pop[i].particle[j] = round(random.uniform(FF.LB, FF.UB), 2)

            if Pop[i].particle[j] > FF.UB:
                Pop[i].particle[j] = round(random.uniform(FF.LB, FF.UB), 2)

        Pop[i].particleFitness = round(FF.MyFitFun(q, Pop[i].particle), 2)
        funEval = funEval + 1

        # Select between particle and pBest
        if Pop[i].particleFitness <= Pop[i].pBestFitness:
            Pop[i].pBest = deepcopy(Pop[i].particle)
            Pop[i].pBestFitness = deepcopy(Pop[i].particleFitness)
# Step 5: Start Program
#-------------------------------------------------------------

for k in range(Runs):  # Multiple Runs of DE

    BestFitness = 9999999999  # Store Best Fitness Value
    BestChromosome = []  # Store Best Chromosome
    R = []  # No of iterations for a particular Run
    F = []  # Fitness Obtained in each iteration for a particular Run
    FunEval = 0

    for i in range(0, Iterations):
        Chromosome = []
        for j in range(0, FF.D):
            Chromosome.append(round(random.uniform(FF.LB, FF.UB), 2))
        Fitness = round(FF.MyFitFun(q, Chromosome), 2)
        FunEval = FunEval + 1
        if Fitness < BestFitness:
            BestFitness = Fitness
            BestChromosome = Chromosome
        R.append(i)
        F.append(BestFitness)
    Chromos.append(BestChromosome)
    Buffer.append(BestFitness)
    Fitness_Random.append(F)

bestI = 0  # Index for the best run
for m in range(Runs):  # Finding Best Run
    if Buffer[bestI] > Buffer[m]:
        bestI = m
Пример #8
0
    Chromos.append(GlobalBest.Chromosome)
    Buffer.append(GlobalBest.Fitness)
    Fitness_GA.append(F)

bestI = 0  # Index for the best run
for m in range(Runs):  # Finding Best Run
    if Buffer[bestI] > Buffer[m]:
        bestI = m

BestFitnessConv = Fitness_GA[
    bestI]  # Best Fitness List in different iterations for the best Run
Runs_GA = R

GlobalBest.Chromosome = Chromos[bestI]
GlobalBest.Fitness = round(FF.MyFitFun(q, GlobalBest.Chromosome), 2)

#-------------------------------------------------------------
# Step 6: Writing fitnesses obtaine for the best Run
#-------------------------------------------------------------
fp = open('Result' + AlgoName + '.csv', 'w')
fp.write("Iteration,Fitness\n")
for m in range(Iterations):
    fp.write(str(m) + ',' + str(BestFitnessConv[m]) + '\n')
fp.close()

print "***********************************************************************************"
print "Genetic"
print "Buffer"
print Buffer
print "\nBest Chromosome:", GlobalBest.Chromosome, "\nBest Fitness:", GlobalBest.Fitness
Пример #9
0
    Chromos.append(gBest)
    Buffer.append(gBestFitness)
    Fitness_PSO.append(F)

bestI = 0  # Index for the best run
for m in range(Runs):  # Finding Best Run
    if Buffer[bestI] > Buffer[m]:
        bestI = m

BestFitnessConv = Fitness_PSO[
    bestI]  # Best Fitness List in different iterations for the best Run
Runs_PSO = R

gBest = Chromos[bestI]
gBestFitness = round(FF.MyFitFun(q, gBest), 2)

#-------------------------------------------------------------
# Step 6: Writing fitnesses obtaine for the best Run
#-------------------------------------------------------------
fp = open('Result' + AlgoName + '.csv', 'w')
fp.write("Iteration,Fitness\n")
for m in range(iterations):
    fp.write(str(m) + ',' + str(BestFitnessConv[m]) + '\n')
fp.close()

print "***********************************************************************************"
print "PSO"
print "Buffer"
print Buffer
print "Best particle:", gBest