人工蜂群算法python_人工蜂群算法-python实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值