1 importnumpy as np2 from ABSIndividual importABSIndividual3 importrandom4 importcopy5 importmatplotlib.pyplot as plt6
7
8 classArtificialBeeSwarm:9
10 ‘‘‘
11 the class for artificial bee swarm algorithm12 ‘‘‘
13
14 def __init__(self, sizepop, vardim, bound, MAXGEN, params):15 ‘‘‘
16 sizepop: population sizepop17 vardim: dimension of variables18 bound: boundaries of variables19 MAXGEN: termination condition20 params: algorithm required parameters, it is a list which is consisting of[trailLimit, C]21 ‘‘‘
22 self.sizepop =sizepop23 self.vardim =vardim24 self.bound =bound25 self.foodSource = self.sizepop / 2
26 self.MAXGEN =MAXGEN27 self.params =params28 self.population =[]29 self.fitness = np.zeros((self.sizepop, 1))30 self.trace = np.zeros((self.MAXGEN, 2))31
32 definitialize(self):33 ‘‘‘
34 initialize the population of abs35 ‘‘‘
36 for i inxrange(0, self.foodSource):37 ind =ABSIndividual(self.vardim, self.bound)38 ind.generate()39 self.population.append(ind)40
41 defevaluation(self):42 ‘‘‘
43 evaluation the fitness of the population44 ‘‘‘
45 for i inxrange(0, self.foodSource):46 self.population[i].calculateFitness()47 self.fitness[i] =self.population[i].fitness48
49 defemployedBeePhase(self):50 ‘‘‘
51 employed bee phase52 ‘‘‘
53 for i inxrange(0, self.foodSource):54 k = np.random.random_integers(0, self.vardim - 1)55 j = np.random.random_integers(0, self.foodSource - 1)56 while j ==i:57 j = np.random.random_integers(0, self.foodSource - 1)58 vi =copy.deepcopy(self.population[i])59 #vi.chrom = vi.chrom + np.random.uniform(-1, 1, self.vardim) * (
60 #vi.chrom - self.population[j].chrom) + np.random.uniform(0.0, self.params[1], self.vardim) * (self.best.chrom - vi.chrom)
61 #for k in xrange(0, self.vardim):
62 #if vi.chrom[k] < self.bound[0, k]:
63 #vi.chrom[k] = self.bound[0, k]
64 #if vi.chrom[k] > self.bound[1, k]:
65 #vi.chrom[k] = self.bound[1, k]
66 vi.chrom[67 k] += np.random.uniform(low=-1, high=1.0, size=1) * (vi.chrom[k] -self.population[j].chrom[k])68 if vi.chrom[k] self.bound[1, k]:71 vi.chrom[k] = self.bound[1, k]72 vi.calculateFitness()73 if vi.fitness >self.fitness[fi]:74 self.population[fi] =vi75 self.fitness[fi] =vi.fitness76 if vi.fitness >self.best.fitness:77 self.best =vi78 vi.calculateFitness()79 if vi.fitness >self.fitness[i]:80 self.population[i] =vi81 self.fitness[i] =vi.fitness82 if vi.fitness >self.best.fitness:83 self.best =vi84 else:85 self.population[i].trials += 1
86
87 defonlookerBeePhase(self):88 ‘‘‘
89 onlooker bee phase90 ‘‘‘
91 accuFitness = np.zeros((self.foodSource, 1))92 maxFitness =np.max(self.fitness)93
94 for i inxrange(0, self.foodSource):95 accuFitness[i] = 0.9 * self.fitness[i] / maxFitness + 0.1
96
97 for i inxrange(0, self.foodSource):98 for fi inxrange(0, self.foodSource):99 r =random.random()100 if r
107 #vi.chrom - self.population[j].chrom) + np.random.uniform(0.0, self.params[1], self.vardim) * (self.best.chrom - vi.chrom)
108 #for k in xrange(0, self.vardim):
109 #if vi.chrom[k] < self.bound[0, k]:
110 #vi.chrom[k] = self.bound[0, k]
111 #if vi.chrom[k] > self.bound[1, k]:
112 #vi.chrom[k] = self.bound[1, k]
113 vi.chrom[114 k] += np.random.uniform(low=-1, high=1.0, size=1) * (vi.chrom[k] -self.population[j].chrom[k])115 if vi.chrom[k] self.bound[1, k]:118 vi.chrom[k] = self.bound[1, k]119 vi.calculateFitness()120 if vi.fitness >self.fitness[fi]:121 self.population[fi] =vi122 self.fitness[fi] =vi.fitness123 if vi.fitness >self.best.fitness:124 self.best =vi125 else:126 self.population[fi].trials += 1
127 break
128
129 defscoutBeePhase(self):130 ‘‘‘
131 scout bee phase132 ‘‘‘
133 for i inxrange(0, self.foodSource):134 if self.population[i].trials >self.params[0]:135 self.population[i].generate()136 self.population[i].trials =0137 self.population[i].calculateFitness()138 self.fitness[i] =self.population[i].fitness139
140 defsolve(self):141 ‘‘‘
142 the evolution process of the abs algorithm143 ‘‘‘
144 self.t =0145 self.initialize()146 self.evaluation()147 best =np.max(self.fitness)148 bestIndex =np.argmax(self.fitness)149 self.best =copy.deepcopy(self.population[bestIndex])150 self.avefitness =np.mean(self.fitness)151 self.trace[self.t, 0] = (1 - self.best.fitness) /self.best.fitness152 self.trace[self.t, 1] = (1 - self.avefitness) /self.avefitness153 print("Generation %d: optimal function value is: %f; average function value is %f" %(154 self.t, self.trace[self.t, 0], self.trace[self.t, 1]))155 while self.t < self.MAXGEN - 1:156 self.t += 1
157 self.employedBeePhase()158 self.onlookerBeePhase()159 self.scoutBeePhase()160 best =np.max(self.fitness)161 bestIndex =np.argmax(self.fitness)162 if best >self.best.fitness:163 self.best =copy.deepcopy(self.population[bestIndex])164 self.avefitness =np.mean(self.fitness)165 self.trace[self.t, 0] = (1 - self.best.fitness) /self.best.fitness166 self.trace[self.t, 1] = (1 - self.avefitness) /self.avefitness167 print("Generation %d: optimal function value is: %f; average function value is %f" %(168 self.t, self.trace[self.t, 0], self.trace[self.t, 1]))169 print("Optimal function value is: %f;" %self.trace[self.t, 0])170 print "Optimal solution is:"
171 printself.best.chrom172 self.printResult()173
174 defprintResult(self):175 ‘‘‘
176 plot the result of abs algorithm177 ‘‘‘
178 x =np.arange(0, self.MAXGEN)179 y1 =self.trace[:, 0]180 y2 = self.trace[:, 1]181 plt.plot(x, y1, ‘r‘, label=‘optimal value‘)182 plt.plot(x, y2, ‘g‘, label=‘average value‘)183 plt.xlabel("Iteration")184 plt.ylabel("function value")185 plt.title("Artificial Bee Swarm algorithm for function optimization")186 plt.legend()187 plt.show()