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实现的更多相关文章

  1. pageRank算法 python实现

    一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

  2. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  3. kmp算法python实现

    kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...

  4. KMP算法-Python版

                               KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...

  5. 压缩感知重构算法之IRLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  6. 压缩感知重构算法之OLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  7. 压缩感知重构算法之CoSaMP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  8. 压缩感知重构算法之IHT算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  9. 压缩感知重构算法之SP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

随机推荐

  1. NGUI图片字(Bitmap图片转文字)

    用图片字而不是图片 美术和程序的配合,需要程序能够很快抓住问题重点并提出解决方案.美术出的图片字比我们使用的字体更好好看,那么是否要一个个图片去拼成数字呢? NGUI创建图片字 准备材料 美术提供的数 ...

  2. Unity脚本生命周期

    前言 说到生命周期,影响最深刻的是,在接触Java的JSF组件时,JSF组件的五大生命周期,全要默写出来,嘿嘿…… 总结这两天在写小怪和掉落的糖葫芦时,老是遇到GameObject未销毁,一直存在场景 ...

  3. openstack中彻底删除计算节点的操作记录

    在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...

  4. 动态调用webservice,不需要添加Web References

    using System; using System.Collections.Generic; using System.Web; using System.Net; using System.IO; ...

  5. [资料]常用Windows CMD指令

    1. 查找80端口开放情况 netstat -aon|findstr “80″ 2. 用netstat查询端口占用程序的PID,显示列表的最后一列就是占用程序的PID,然后再利用tasklist找到这 ...

  6. 通信vue2.0组件

    vue2.0组件通信各种情况总结与实例分析   Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用p ...

  7. U3D 扩展方法 & Dotween & tolua

    using UnityEngine; using System.Collections; using LuaInterface;//tolua 空间引用 using DG.Tweening;//DOT ...

  8. 给C#的treeview控件的部分节点添加checkbox

    一.先初始化treeview this.treeView1.CheckBoxes = true; this.treeView1.ShowLines = false; this.treeView1.Dr ...

  9. [Android] 【视频】黑马安卓62、66期等教程+源码

     下载地址:http://fu83.cn/thread-58-1-1.html

  10. Java系列:JVM指令详解(下)(zz)

    九.自增减指令    20:iconst_1    21:istore_1    22:return 指令码      助记符                                     ...