人工免疫算法-python实现
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实现的更多相关文章
- pageRank算法 python实现
一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- kmp算法python实现
kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...
- KMP算法-Python版
KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...
- 压缩感知重构算法之IRLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之OLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之CoSaMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之IHT算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- 压缩感知重构算法之SP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
随机推荐
- 第2章 面向对象的设计原则(SOLID):4_接口隔离原则(ISP)
4. 接口隔离原则(Interface Segregation Principle,ISP) 4.1 定义 (1)使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口.类间的 ...
- java 19 -15 File类批量更改文件名的方法
/* 需求: * 把H:\三国演义下面的视频名称修改为 00?_介绍.avi 思路: A:封装目录 B:获取该目录下所有的文件的File数组 C:遍历该File数组,得到每一个File对象 D:拼接一 ...
- leetcode database题目
LeetCode有10道SQL的题目,最近学习SQL语言,顺便刷题强化一下, 说实话刷完SQL学习指南这本书,不是很难,上面的例子 跟语法规则我都能理解透, 实际中来做一些比较难的业务逻辑题,却一下子 ...
- ref关键字的作用
ref关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中. 就是说,在调用方法的参数中使用ref关键字可以使得变量能够改变. ref和out都是 ...
- iOS sha1加密算法
最近在项目中使用到了网络请求签名认证的方法,于是在网上找关于OC sha1加密的方法,很快找到了一个大众使用的封装好的方法,以下代码便是 首先需要添加头文件 #import<CommonCryp ...
- Unity 协程Coroutine综合测试
using UnityEngine; using System.Collections; using System.Text; public class rotCube : MonoBehaviour ...
- 思科简单教程CCNA
这是CCNA的内容,从PC配置交换机(或者路由器),这里呢我们使用的软件叫pack 这是ciso开发的一款工具,能生动形象的模拟现实生活中组网技术的过程,下面我大概讲一下流程,想更多的了解我会录制一些 ...
- ListView中多个EditText设置焦点 多次点击异常报错
08-17 18:23:09.825: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main 08-17 18:23:09.825: ERROR/Andr ...
- 实验三实验报告 20135324&&20135330
北京电子科技学院(BESTI) 实验报告 课程:深入理解计算机系统 班级:1353 姓名:张若嘉 杨舒雯 学号:20135330 20135324 成绩: 指导教师:娄嘉鹏 实验日期:2015.11. ...
- Flex的正则表达式匹配速度与手工代码的比较
flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷 ...