人工蜂群算法-python实现
ABSIndividual.py
import numpy as np
import ObjFunction class ABSIndividual: '''
individual of artificial bee swarm 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 artificial bee swarm 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)
ABS.py
import numpy as np
from ABSIndividual import ABSIndividual
import random
import copy
import matplotlib.pyplot as plt class ArtificialBeeSwarm: '''
the class for artificial bee swarm 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[trailLimit, C]
'''
self.sizepop = sizepop
self.vardim = vardim
self.bound = bound
self.foodSource = self.sizepop / 2
self.MAXGEN = MAXGEN
self.params = params
self.population = []
self.fitness = np.zeros((self.sizepop, 1))
self.trace = np.zeros((self.MAXGEN, 2)) def initialize(self):
'''
initialize the population of abs
'''
for i in xrange(0, self.foodSource):
ind = ABSIndividual(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.foodSource):
self.population[i].calculateFitness()
self.fitness[i] = self.population[i].fitness def employedBeePhase(self):
'''
employed bee phase
'''
for i in xrange(0, self.foodSource):
k = np.random.random_integers(0, self.vardim - 1)
j = np.random.random_integers(0, self.foodSource - 1)
while j == i:
j = np.random.random_integers(0, self.foodSource - 1)
vi = copy.deepcopy(self.population[i])
# vi.chrom = vi.chrom + np.random.uniform(-1, 1, self.vardim) * (
# vi.chrom - self.population[j].chrom) + np.random.uniform(0.0, self.params[1], self.vardim) * (self.best.chrom - vi.chrom)
# for k in xrange(0, self.vardim):
# if vi.chrom[k] < self.bound[0, k]:
# vi.chrom[k] = self.bound[0, k]
# if vi.chrom[k] > self.bound[1, k]:
# vi.chrom[k] = self.bound[1, k]
vi.chrom[
k] += np.random.uniform(low=-1, high=1.0, size=1) * (vi.chrom[k] - self.population[j].chrom[k])
if vi.chrom[k] < self.bound[0, k]:
vi.chrom[k] = self.bound[0, k]
if vi.chrom[k] > self.bound[1, k]:
vi.chrom[k] = self.bound[1, k]
vi.calculateFitness()
if vi.fitness > self.fitness[fi]:
self.population[fi] = vi
self.fitness[fi] = vi.fitness
if vi.fitness > self.best.fitness:
self.best = vi
vi.calculateFitness()
if vi.fitness > self.fitness[i]:
self.population[i] = vi
self.fitness[i] = vi.fitness
if vi.fitness > self.best.fitness:
self.best = vi
else:
self.population[i].trials += 1 def onlookerBeePhase(self):
'''
onlooker bee phase
'''
accuFitness = np.zeros((self.foodSource, 1))
maxFitness = np.max(self.fitness) for i in xrange(0, self.foodSource):
accuFitness[i] = 0.9 * self.fitness[i] / maxFitness + 0.1 for i in xrange(0, self.foodSource):
for fi in xrange(0, self.foodSource):
r = random.random()
if r < accuFitness[i]:
k = np.random.random_integers(0, self.vardim - 1)
j = np.random.random_integers(0, self.foodSource - 1)
while j == fi:
j = np.random.random_integers(0, self.foodSource - 1)
vi = copy.deepcopy(self.population[fi])
# vi.chrom = vi.chrom + np.random.uniform(-1, 1, self.vardim) * (
# vi.chrom - self.population[j].chrom) + np.random.uniform(0.0, self.params[1], self.vardim) * (self.best.chrom - vi.chrom)
# for k in xrange(0, self.vardim):
# if vi.chrom[k] < self.bound[0, k]:
# vi.chrom[k] = self.bound[0, k]
# if vi.chrom[k] > self.bound[1, k]:
# vi.chrom[k] = self.bound[1, k]
vi.chrom[
k] += np.random.uniform(low=-1, high=1.0, size=1) * (vi.chrom[k] - self.population[j].chrom[k])
if vi.chrom[k] < self.bound[0, k]:
vi.chrom[k] = self.bound[0, k]
if vi.chrom[k] > self.bound[1, k]:
vi.chrom[k] = self.bound[1, k]
vi.calculateFitness()
if vi.fitness > self.fitness[fi]:
self.population[fi] = vi
self.fitness[fi] = vi.fitness
if vi.fitness > self.best.fitness:
self.best = vi
else:
self.population[fi].trials += 1
break def scoutBeePhase(self):
'''
scout bee phase
'''
for i in xrange(0, self.foodSource):
if self.population[i].trials > self.params[0]:
self.population[i].generate()
self.population[i].trials = 0
self.population[i].calculateFitness()
self.fitness[i] = self.population[i].fitness def solve(self):
'''
the evolution process of the abs algorithm
'''
self.t = 0
self.initialize()
self.evaluation()
best = np.max(self.fitness)
bestIndex = np.argmax(self.fitness)
self.best = copy.deepcopy(self.population[bestIndex])
self.avefitness = np.mean(self.fitness)
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]))
while self.t < self.MAXGEN - 1:
self.t += 1
self.employedBeePhase()
self.onlookerBeePhase()
self.scoutBeePhase()
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, 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]))
print("Optimal function value is: %f; " % self.trace[self.t, 0])
print "Optimal solution is:"
print self.best.chrom
self.printResult() def printResult(self):
'''
plot the result of abs 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 Bee Swarm algorithm for function optimization")
plt.legend()
plt.show()
运行程序:
if __name__ == "__main__":
bound = np.tile([[-600], [600]], 25)
abs = ABS(60, 25, bound, 1000, [100, 0.5])
abs.solve()
ObjFunction见简单遗传算法-python实现。
人工蜂群算法-python实现的更多相关文章
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 人工鱼群算法-python实现
AFSIndividual.py import numpy as np import ObjFunction import copy class AFSIndividual: "" ...
- 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实现 压缩感知重构 ...
随机推荐
- 深入理解maven及应用--转
(一):生命周期和插件 在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最 ...
- 最严谨的校验email地址的正则表达式
通用 (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0 ...
- Unity手机平台播放影片
播放视频方法 截止到目前的Unity4.2版本,要在手机平台上播放影片,有两种方法: 使用Unity自带的Move Texture http://docs.unity3d.com/Documentat ...
- C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析
前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?
对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...
- C#代码规范 .NET程序员需要提升的修养
一. 环境设置 首先去除VS开发环境中的一些选项如下: 粘贴时调整缩进 将类型的左大括号置于新行 将方法的左大括号置于新行 将匿名方法的左大括号置于新行 将控制块的左大括号置于新行 将“else” ...
- 通过box盒子模型给元素内容设置居中
老版本语法 div{ display: -webkit-box;-webkit-box-align:center; //垂直居中-webkit-box-pack:center;//水平居中 } 新版本 ...
- Windows Phone:如何检查WMAppManifest中的Capability属性
在Windows Phone应用中有一个应用程序清单(WMAppManifest.xml),其中对于不同的应用可以设定Capability来告知需要哪些特性或功能,详细内容可以参考官方文档: http ...
- CSS3之firefox&safari背景渐变之争 - [前端技术][转]
Firefox浏览器下的渐变背景 Firefox3.6background:-moz-linear-gradient(top, red, rgba(0, 0, 255, 0.5));chrome/S ...
- DWZ (JUI) 教程 navTab 刷新分析
navTab的刷新在doc文件里也有说明 首先 在form表单里指定好回调函数 * <form action="/user.do?method=save" onsubmit= ...