人工免疫算法-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实现 压缩感知重构 ...
随机推荐
- 对Spring的IoC和DI最生动的解释
首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系 ...
- ASP代码审计一枚
<% On Error Resume Next dim name, pass, sql, action set conn = server.CreateObject("ADODB.Co ...
- ST3插件——PlainTasks的使用
今天看到一个有意思的ST3插件,可以进行简单的任务管理. 安装很简单:ctrl + shift + p,输入install回车,再输入plaintasks回车即可. 以下是一些支持的操作,更多的操作请 ...
- 分布式环境下Unique ID生成方法
ID即标示符,在某个搜索域内能唯一标示其中某个对象.在关系型数据库中每个表都需要定义一个主键来唯一标示一条记录.为了方便一般都会使用一个auto_increment属性的整形数做为ID.因为数据库本身 ...
- WPF在XAML中Binding使用StringFormat属性
1. 绑定Currency, 如果没有字符的话, =后面需要先加入{}. 不加的话会出问题. 1 <TextBlock Text="{Binding Amount, StringFor ...
- sql 索引 填充因子(转)
和索引重建最相关的是填充因子.当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量.填充因子设置为100意味着每个索引页100%填满,50%意味 ...
- 在线运行Javascript,Jquery,HTML,CSS代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...
- [IPSEC PKI]
PKI: 对称加密 非对称加密(混合加密) 数字签名 理论概述: (1)预备知识 对称加密:加密密钥和揭秘蜜钥是同一个密钥 缺点:不适合在互联网上传输密钥 密钥维护工作量大 n(n-1)/2 : ...
- Linux Linux程序练习十二(select实现QQ群聊)
//头文件--helper.h #ifndef _vzhang #define _vzhang #ifdef __cplusplus extern "C" { #endif #de ...
- C语言 文件操作1--二进制文件与文本文件
//写文件两种方式(文本文件和二进制文件) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h&g ...