人工免疫算法python_人工免疫算法-python实现

本文档介绍了使用Python实现人工免疫算法的过程,包括初始化种群、评估个体适应度、克隆操作、选择操作、突变操作等步骤。通过类ArtificialImmuneAlgorithm详细展示了算法的各个组件和进化流程。
摘要由CSDN通过智能技术生成

1 importnumpy as np2 from AIAIndividual importAIAIndividual3 importrandom4 importcopy5 importmatplotlib.pyplot as plt6

7

8 classArtificialImmuneAlgorithm:9

10 '''

11 The class for artificial immune algorithm12 '''

13

14 def __init__(self, sizepop, sizemem, 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 [mutation rate, cloneNum]21 '''

22 self.sizepop =sizepop23 self.sizemem =sizemem24 self.MAXGEN =MAXGEN25 self.vardim =vardim26 self.bound =bound27 self.population =[]28 self.clonePopulation =[]29 self.memories =[]30 self.cloneMemories =[]31 self.popFitness =np.zeros(self.sizepop)32 self.popCloneFitness =np.zeros(33 int(self.sizepop * self.sizepop * params[1]))34 self.memfitness =np.zero(self.sizemem)35 self.memClonefitness =np.zero(36 int(self.sizemem * self.sizemem * params[1]))37 self.trace = np.zeros((self.MAXGEN, 2))38 self.params =params39

40 definitialize(self):41 '''

42 initialize the population43 '''

44 for i inxrange(0, self.sizepop):45 ind =AIAIndividual(self.vardim, self.bound)46 ind.generate()47 self.population.append(ind)48 for i inxrange(0, self.sizemem):49 ind =AIAIndividual(self.vardim, self.bound)50 ind.generate()51 self.memories.append(ind)52

53 defevaluatePopulation(self, flag):54 '''

55 evaluation of the population fitnesses56 '''

57 if flag == 1:58 for i inxrange(0, self.sizepop):59 self.population[i].calculateFitness()60 self.popFitness[i] =self.population[i].fitness61 else:62 for i inxrange(0, self.sizemem):63 self.memories[i].calculateFitness()64 self.memfitness[i] =self.memories[i].fitness65

66 defevaluateClone(self, flag):67 '''

68 evaluation of the clone fitnesses69 '''

70 if flag == 1:71 for i inxrange(0, self.sizepop):72 self.clonePopulation[i].calculateFitness()73 self.popCloneFitness[i] =self.clonePopulation[i].fitness74 else:75 for i inxrange(0, self.sizemem):76 self.cloneMemories[i].calculateFitness()77 self.memClonefitness[i] =self.cloneMemories[i].fitness78

79 defsolve(self):80 '''

81 evolution process of artificial immune algorithm82 '''

83 self.t =084 self.initialize()85 self.best =AIAIndividual(self.vardim, self.bound)86 while (self.t

88 self.cloneOperation(1)89 self.mutationOperation(1)90 self.evaluatePopulation(1)91 self.selectionOperation(1)92

93 #evolution of memories

94 self.cloneOperation(2)95 self.mutationOperation(2)96 self.evaluatePopulation()97 self.selectionOperation(2)98

99 best =np.max(self.popFitness)100 bestIndex =np.argmax(self.popFitness)101 if best >self.best.fitness:102 self.best =copy.deepcopy(self.population[bestIndex])103 self.avefitness =np.mean(self.popFitness)104 self.trace[self.t, 0] = (1 - self.best.fitness) /self.best.fitness105 self.trace[self.t, 1] = (1 - self.avefitness) /self.avefitness106 print("Generation %d: optimal function value is: %f; average function value is %f" %(107 self.t, self.trace[self.t, 0], self.trace[self.t, 1]))108 self.t += 1

109

110 print("Optimal function value is: %f;" %

111 self.trace[self.t - 1, 0])112 print "Optimal solution is:"

113 printself.best.chrom114 self.printResult()115

116 defcloneOperation(self, individuals):117 '''

118 clone operation for alforithm immune algorithm119 '''

120 newpop =[]121 sizeInds =len(individuals)122 for i inxrange(0, sizeInds):123 for j in xrange(0, int(self.params[1] *sizeInds)):124 newpop.append(copy.deepcopy(individuals[i]))125 returnnewpop126

127 defselectionOperation(self, flag):128 '''

129 selection operation for artificial immune algorithm130 '''

131 if flag == 1:132 sortedIdx = np.argsort(-self.clonefit)133 for i in xrange(0, int(self.sizepop*self.sizepop*self.params[1]):134 tmpInd =individuals[sortedIdx[i]]135 if tmpInd.fitness >self.population[i].fitness:136 self.population[i] =tmpInd137 self.popFitness[i] =tmpInd.fitness138 else:139 pass

140 newpop =[]141 sizeInds =len(individuals)142 fitness =np.zeros(sizeInds)143 for i inxrange(0, sizeInds):144 fitness[i] =individuals[i].fitness145 sortedIdx = np.argsort(-fitness)146 for i inxrange(0, sizeInds):147 tmpInd =individuals[sortedIdx[i]]148 if tmpInd.fitness >self.population[i].fitness:149 self.population[i] =tmpInd150 self.popFitness[i] =tmpInd.fitness151

152 defmutationOperation(self, individuals):153 '''

154 mutation operation for artificial immune algorithm155 '''

156 newpop =[]157 sizeInds =len(individuals)158 for i inxrange(0, sizeInds):159 newpop.append(copy.deepcopy(individuals[i]))160 r =random.random()161 if r 0.5:165 newpop[i].chrom[mutatePos] =newpop[i].chrom[166 mutatePos] - (newpop[i].chrom[mutatePos] - self.bound[0, mutatePos]) * (1 - random.random() ** (1 - self.t /self.MAXGEN))167 else:168 newpop[i].chrom[mutatePos] =newpop[i].chrom[169 mutatePos] + (self.bound[1, mutatePos] - newpop[i].chrom[mutatePos]) * (1 - random.random() ** (1 - self.t /self.MAXGEN))170 for k inxrange(0, self.vardim):171 if newpop.chrom[mutatePos] self.bound[1, mutatePos]:174 newpop.chrom[mutatePos] = self.bound[1, mutatePos]175 newpop.calculateFitness()176 returnnewpop177

178 defprintResult(self):179 '''

180 plot the result of the artificial immune algorithm181 '''

182 x =np.arange(0, self.MAXGEN)183 y1 =self.trace[:, 0]184 y2 = self.trace[:, 1]185 plt.plot(x, y1, 'r', label='optimal value')186 plt.plot(x, y2, 'g', label='average value')187 plt.xlabel("Iteration")188 plt.ylabel("function value")189 plt.title("Artificial immune algorithm for function optimization")190 plt.legend()191 plt.show()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值