克隆选择算法-python实现
CSAIndividual.py
import numpy as np
import ObjFunction class CSAIndividual: '''
individual of clone selection 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 def generate(self):
'''
generate a random chromsome for clone selection 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)
CSA.py
import numpy as np
from CSAIndividual import CSAIndividual
import random
import copy
import matplotlib.pyplot as plt class CloneSelectionAlgorithm: '''
the class for clone selection algorithm
''' def __init__(self, sizepop, 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[beta, pm, alpha_max, alpha_min]
'''
self.sizepop = sizepop
self.vardim = vardim
self.bound = bound
self.MAXGEN = MAXGEN
self.params = params
self.population = []
self.fitness = np.zeros(self.sizepop)
self.trace = np.zeros((self.MAXGEN, 2)) def initialize(self):
'''
initialize the population of ba
'''
for i in xrange(0, self.sizepop):
ind = CSAIndividual(self.vardim, self.bound)
ind.generate()
self.population.append(ind) def evaluation(self):
'''
evaluation the fitness of the population
'''
for i in xrange(0, self.sizepop):
self.population[i].calculateFitness()
self.fitness[i] = self.population[i].fitness def solve(self):
'''
the evolution process of the clone selection algorithm
'''
self.t = 0
self.initialize()
self.evaluation()
bestIndex = np.argmax(self.fitness)
self.best = copy.deepcopy(self.population[bestIndex])
while self.t < self.MAXGEN:
self.t += 1
tmpPop = self.reproduction()
tmpPop = self.mutation(tmpPop)
self.selection(tmpPop)
best = np.max(self.fitness)
bestIndex = np.argmax(self.fitness)
if best > self.best.fitness:
self.best = copy.deepcopy(self.population[bestIndex]) self.avefitness = np.mean(self.fitness)
self.trace[self.t - 1, 0] = \
(1 - self.best.fitness) / self.best.fitness
self.trace[self.t - 1, 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 - 1, 0], self.trace[self.t - 1, 1]))
print("Optimal function value is: %f; " % self.trace[self.t - 1, 0])
print "Optimal solution is:"
print self.best.chrom
self.printResult() def reproduction(self):
'''
reproduction
'''
tmpPop = []
for i in xrange(0, self.sizepop):
nc = int(self.params[1] * self.sizepop)
for j in xrange(0, nc):
ind = copy.deepcopy(self.population[i])
tmpPop.append(ind)
return tmpPop def mutation(self, tmpPop):
'''
hypermutation
'''
for i in xrange(0, self.sizepop):
nc = int(self.params[1] * self.sizepop)
for j in xrange(1, nc):
rnd = np.random.random(1)
if rnd < self.params[0]:
# alpha = self.params[
# 2] + self.t * (self.params[3] - self.params[2]) / self.MAXGEN
delta = self.params[2] + self.t * \
(self.params[3] - self.params[3]) / self.MAXGEN
tmpPop[i * nc + j].chrom += np.random.normal(0.0, delta, self.vardim)
# tmpPop[i * nc + j].chrom += alpha * np.random.random(
# self.vardim) * (self.best.chrom - tmpPop[i * nc +
# j].chrom)
for k in xrange(0, self.vardim):
if tmpPop[i * nc + j].chrom[k] < self.bound[0, k]:
tmpPop[i * nc + j].chrom[k] = self.bound[0, k]
if tmpPop[i * nc + j].chrom[k] > self.bound[1, k]:
tmpPop[i * nc + j].chrom[k] = self.bound[1, k]
tmpPop[i * nc + j].calculateFitness()
return tmpPop def selection(self, tmpPop):
'''
re-selection
'''
for i in xrange(0, self.sizepop):
nc = int(self.params[1] * self.sizepop)
best = 0.0
bestIndex = -1
for j in xrange(0, nc):
if tmpPop[i * nc + j].fitness > best:
best = tmpPop[i * nc + j].fitness
bestIndex = i * nc + j
if self.fitness[i] < best:
self.population[i] = copy.deepcopy(tmpPop[bestIndex])
self.fitness[i] = best def printResult(self):
'''
plot the result of clone selection 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("Clone selection algorithm for function optimization")
plt.legend()
plt.show()
运行程序:
if __name__ == "__main__":
bound = np.tile([[-600], [600]], 25)
csa = CSA(50, 25, bound, 500, [0.3, 0.4, 5, 0.1])
csa.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实现 压缩感知重构 ...
随机推荐
- find命令错误提示路径必须在表达式之前
在某些版本的linux下,通过find查找当前目录下所有后缀名jpg的文件,命令为find ./ -iname *.jpg 会出现“find: 路径必须在表达式之前”的错误提示.解决的方法有两种 a. ...
- 常用Eclipse插件在线安装地址
Srping IDE http://www.springsource.com/update/e3.5 EasyShellhttp://pluginbox.sourceforge.net M2E ...
- 转:程序员必须知道的几个Git代码托管平台
http://www.open-open.com/lib/view/open1420704561390.html
- 关于phpmyadmin #1045无法登陆服务器的问题
修改/home/wwwroot/phpmyadmin/libraries/config.default.php 文件,找到下面两行 $cfg['Servers'][$i]['nopassword'] ...
- pl/sql developer中的SQL语句
1.无论是在查询还是在插入的时候,值都必须是单引号‘’,否则会报错,ORA-00904:标识符无效.
- UINavagationController
如何防止navigation多次push一个页面?有时候网慢,点了一下没反应,用户可能就多点几下,这时候会打开好几个一样的页面: 写了一个navigation基类,重写了push方法:传进来要push ...
- localStroage的用法
Cookie 每个域名存储量比较小(各浏览器不同,大致4K) 所有域名的存储量有限制(各浏览器不同,大致4K) 有个数限制(各浏览器不同) 会随请求发送到服务器 LocalStorage 永久存储 单 ...
- zepto源码注解
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- 呵呵!手把手带你在 IIS 上运行 Python(转)
原文:http://blog.csdn.net/yangzhencheng_001/article/details/40342449 公司的网站让我头痛死了.在众多前辈高手的带领下,一大堆的 CMD ...
- SDRAM 学习(三)之command
command 模块总述 SDRAM 的 command 模块的内容包括如下: 1.对初始化请求.配置模式寄存器.读/写.刷新.预充电等命令的一个优先级的控制. 2.对命令执行时间进行控制,依据如图1 ...