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
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
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)
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)
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
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
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