人工蜂群算法-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实现 压缩感知重构 ...
随机推荐
- POJ 3398 Perfect Service --最小支配集
题目链接:http://poj.org/problem?id=3398 这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html 第 ...
- Android数据存储(二)----PreferenceFragment详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- sublime修改字体大小
/Packages/Theme\ -\ Default/Default.sublime-theme { "class": "label_control", , ...
- BIO、NIO与NIO.2的区别与联系
BIO.NIO.NIO.2之间的区别主要是通过同步/异步.阻塞/非阻塞来进行区分的 同步: 程序与操作系统进行交互的时候采取的是问答的形式 异步: 程序与操作系统取得连接后,操作系统会主动通知程序消息 ...
- 09Mybatis_入门程序——删除用户以及更新用户
删除用户: 还是前面的的案例,别的都不改,就修改两处地方.1.user.xml文件以及2.Mybatis_first.java文件 user.xml文件代码修改如下: <?xml version ...
- 02SpringMvc_springmvc快速入门小案例(XML版本)
这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:
- Studying-Swift :Day01
学习地址:http://www.rm5u.com/ 或 http://www.runoob.com/ 如果创建的是 OS X playground 需要引入 Cocoa; 如果我们想创建 ...
- ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法
今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很 ...
- 集DDD,TDD,SOLID,MVVM,DI,EF,Angularjs等于一身的.NET(C#)开源可扩展电商系统–Virto Commerce
今天一大早来看到园友分享的福利<分享一个前后端分离方案源码-前端angularjs+requirejs+dhtmlx 后端asp.net webapi>,我也来分享一个吧.以下内容由笔者写 ...
- JavaScript实现Ajax小结
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<TCP的三次握手和四次挥手> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临 ...