AIAIndividual.py

 import numpy as np
import ObjFunction class AIAIndividual: '''
individual of artificial immune algorithm
''' def __init__(self, vardim, bound):
'''
vardim: dimension of variables
bound: boundaries of variables
'''
self.vardim = vardim
self.bound = bound
self.fitness = 0.
self.trials = 0
self.concentration = 0 def generate(self):
'''
generate a random chromsome for artificial immune algorithm
'''
len = self.vardim
rnd = np.random.random(size=len)
self.chrom = np.zeros(len)
for i in xrange(0, len):
self.chrom[i] = self.bound[0, i] + \
(self.bound[1, i] - self.bound[0, i]) * rnd[i] def calculateFitness(self):
'''
calculate the fitness of the chromsome
'''
self.fitness = ObjFunction.GrieFunc(
self.vardim, self.chrom, self.bound)

AIA.py

 import numpy as np
from AIAIndividual import AIAIndividual
import random
import copy
import matplotlib.pyplot as plt class ArtificialImmuneAlgorithm: '''
The class for artificial immune algorithm
''' def __init__(self, sizepop, sizemem, vardim, bound, MAXGEN, params):
'''
sizepop: population sizepop
vardim: dimension of variables
bound: boundaries of variables
MAXGEN: termination condition
params: algorithm required parameters, it is a list which is consisting of [mutation rate, cloneNum]
'''
self.sizepop = sizepop
self.sizemem = sizemem
self.MAXGEN = MAXGEN
self.vardim = vardim
self.bound = bound
self.population = []
self.clonePopulation = []
self.memories = []
self.cloneMemories = []
self.popFitness = np.zeros(self.sizepop)
self.popCloneFitness = np.zeros(
int(self.sizepop * self.sizepop * params[1]))
self.memfitness = np.zero(self.sizemem)
self.memClonefitness = np.zero(
int(self.sizemem * self.sizemem * params[1]))
self.trace = np.zeros((self.MAXGEN, 2))
self.params = params def initialize(self):
'''
initialize the population
'''
for i in xrange(0, self.sizepop):
ind = AIAIndividual(self.vardim, self.bound)
ind.generate()
self.population.append(ind)
for i in xrange(0, self.sizemem):
ind = AIAIndividual(self.vardim, self.bound)
ind.generate()
self.memories.append(ind) def evaluatePopulation(self, flag):
'''
evaluation of the population fitnesses
'''
if flag == 1:
for i in xrange(0, self.sizepop):
self.population[i].calculateFitness()
self.popFitness[i] = self.population[i].fitness
else:
for i in xrange(0, self.sizemem):
self.memories[i].calculateFitness()
self.memfitness[i] = self.memories[i].fitness def evaluateClone(self, flag):
'''
evaluation of the clone fitnesses
'''
if flag == 1:
for i in xrange(0, self.sizepop):
self.clonePopulation[i].calculateFitness()
self.popCloneFitness[i] = self.clonePopulation[i].fitness
else:
for i in xrange(0, self.sizemem):
self.cloneMemories[i].calculateFitness()
self.memClonefitness[i] = self.cloneMemories[i].fitness def solve(self):
'''
evolution process of artificial immune algorithm
'''
self.t = 0
self.initialize()
self.best = AIAIndividual(self.vardim, self.bound)
while (self.t < self.MAXGEN):
# evolution of population
self.cloneOperation(1)
self.mutationOperation(1)
self.evaluatePopulation(1)
self.selectionOperation(1) # evolution of memories
self.cloneOperation(2)
self.mutationOperation(2)
self.evaluatePopulation()
self.selectionOperation(2) best = np.max(self.popFitness)
bestIndex = np.argmax(self.popFitness)
if best > self.best.fitness:
self.best = copy.deepcopy(self.population[bestIndex])
self.avefitness = np.mean(self.popFitness)
self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness
self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness
print("Generation %d: optimal function value is: %f; average function value is %f" % (
self.t, self.trace[self.t, 0], self.trace[self.t, 1]))
self.t += 1 print("Optimal function value is: %f; " %
self.trace[self.t - 1, 0])
print "Optimal solution is:"
print self.best.chrom
self.printResult() def cloneOperation(self, individuals):
'''
clone operation for alforithm immune algorithm
'''
newpop = []
sizeInds = len(individuals)
for i in xrange(0, sizeInds):
for j in xrange(0, int(self.params[1] * sizeInds)):
newpop.append(copy.deepcopy(individuals[i]))
return newpop def selectionOperation(self, flag):
'''
selection operation for artificial immune algorithm
'''
if flag == 1:
sortedIdx = np.argsort(-self.clonefit)
for i in xrange(0, int(self.sizepop*self.sizepop*self.params[1]):
tmpInd = individuals[sortedIdx[i]]
if tmpInd.fitness > self.population[i].fitness:
self.population[i] = tmpInd
self.popFitness[i] = tmpInd.fitness
else:
pass
newpop = []
sizeInds = len(individuals)
fitness = np.zeros(sizeInds)
for i in xrange(0, sizeInds):
fitness[i] = individuals[i].fitness
sortedIdx = np.argsort(-fitness)
for i in xrange(0, sizeInds):
tmpInd = individuals[sortedIdx[i]]
if tmpInd.fitness > self.population[i].fitness:
self.population[i] = tmpInd
self.popFitness[i] = tmpInd.fitness def mutationOperation(self, individuals):
'''
mutation operation for artificial immune algorithm
'''
newpop = []
sizeInds = len(individuals)
for i in xrange(0, sizeInds):
newpop.append(copy.deepcopy(individuals[i]))
r = random.random()
if r < self.params[0]:
mutatePos = random.randint(0, self.vardim - 1)
theta = random.random()
if theta > 0.5:
newpop[i].chrom[mutatePos] = newpop[i].chrom[
mutatePos] - (newpop[i].chrom[mutatePos] - self.bound[0, mutatePos]) * (1 - random.random() ** (1 - self.t / self.MAXGEN))
else:
newpop[i].chrom[mutatePos] = newpop[i].chrom[
mutatePos] + (self.bound[1, mutatePos] - newpop[i].chrom[mutatePos]) * (1 - random.random() ** (1 - self.t / self.MAXGEN))
for k in xrange(0, self.vardim):
if newpop.chrom[mutatePos] < self.bound[0, mutatePos]:
newpop.chrom[mutatePos] = self.bound[0, mutatePos]
if newpop.chrom[mutatePos] > self.bound[1, mutatePos]:
newpop.chrom[mutatePos] = self.bound[1, mutatePos]
newpop.calculateFitness()
return newpop def printResult(self):
'''
plot the result of the artificial immune algorithm
'''
x = np.arange(0, self.MAXGEN)
y1 = self.trace[:, 0]
y2 = self.trace[:, 1]
plt.plot(x, y1, 'r', label='optimal value')
plt.plot(x, y2, 'g', label='average value')
plt.xlabel("Iteration")
plt.ylabel("function value")
plt.title("Artificial immune algorithm for function optimization")
plt.legend()
plt.show()

运行程序:

 if __name__ == "__main__":

     bound = np.tile([[-600], [600]], 25)
aia = AIA(100, 25, bound, 100, [0.9, 0.1])
aia.solve()

ObjFunction见简单遗传算法-python实现

人工免疫算法-python实现的更多相关文章

  1. pageRank算法 python实现

    一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

  2. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  3. kmp算法python实现

    kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...

  4. KMP算法-Python版

                               KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...

  5. 压缩感知重构算法之IRLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  6. 压缩感知重构算法之OLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  7. 压缩感知重构算法之CoSaMP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  8. 压缩感知重构算法之IHT算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  9. 压缩感知重构算法之SP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

随机推荐

  1. POJ 2891 Strange Way to Express Integers【扩展欧几里德】【模线性方程组】

    求解方程组 X%m1=r1 X%m2=r2 .... X%mn=rn 首先看下两个式子的情况 X%m1=r1 X%m2=r2 联立可得 m1*x+m2*y=r2-r1 用ex_gcd求得一个特解x' ...

  2. Java 操作 Redis 高级

    /Users/sherry/WorkPath/Git/Web/redisDemo/src/main/java/org/zln/utils/JedisUtils.java package org.zln ...

  3. 06Spring_使用注解配置bean对象

    Spring注解开发需要jar包 和 xml开发 一样的 ! 第一步: 新建项目, 导入jar包(就是前一篇文章里面的那几个核心jar包) 第二步: 在需要spring创建对象类上面 添加@Compo ...

  4. 记2012-2013年一路的Windows Phone历程

    昨天和秦春林同学小聚一次,不厌其烦的唠叨各种认识了许多年的纪念,感觉他仍然保持着那份对技术的追求和梦想,而我却已经变得逐利,每个人享受幸福的方式不一样,因此追逐幸福的过程也就是没有办法一样了,你无法知 ...

  5. C语言 预处理一(文件包含--#include)

    //预处理命令不需要在结束末尾加":" //#inlude可以包含任意类型的文件 //#inlude 将一个源文件的全部内容包含到另一个源文件中,成为它的一个部分,文件包含的一般格 ...

  6. puer工具的使用

    在项目开发的过程当中,总会有前端开发快完成,后端接口却迟迟提供不了的情况.此时为了不影响前端开发的进度,我们可以借助puer来模拟后端接口测试.简单的说,puer就是一个可以实时刷新的前端服务器.具体 ...

  7. 2015年新版C#从入门到精通(第2版)视频教学录像【无水印版】

    <c#从入门到精通(第2版)>以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了c#的相关知识和实战技能.<c#从入门到精通(第2版)>第1篇[c#语言基础]主要讲解c# ...

  8. 【高清未加密】2015传智播客 最新21期c#asp.net 基础到就业班视频和源码

    [.NET]传智播客第[21]期就业班视频(高清无加密)本套2015年21期传智播客C#ASP.NET win10通用mvc+app开发视频教程附源码,是一套非常不错的asp.net自学视频教程,传智 ...

  9. [CareerCup] 14.3 Final Finally Finalize 关键字比较

    14.3 What is the difference between final, finally, and finalize? 这道题考察我们Java中的三个看起来很相似的关键字final,fin ...

  10. Jquery操作select,radio,input,p之类

    select的操作 变化后触发操作 $("#txtaddprojecturl").change(function(){ $("#addprojectname") ...