Pyevolve的用户手册中文版1.1.6基本概念Raw score:表示由适应度函数返回的还未进行比例换算的适应值。
Fitness score :对Raw score进行比例换算后的适应值,如果你使用线性的比例换算(Scaling.LinearScaling()),fitness score将会使用线性方法进行换算,fitness score代表个体与种群的相关程度。
Sample genome : 是所有genome进行复制的基础1.2.3对pyevolve进行扩展对pyevolve进行扩展首先要查看GenomeBase.GenomeBase类的源码。
扩展的基本步骤1)创建染色体类2)创建染色体的初始化函数3)创建遗传算子:选择算子,交叉算子,和变异算子等。
1.3模块1.3.2基本模块a) Consts :常量模块Pyevolve 提供了所有的默认遗传算子,这是为了帮助用户方便的使用API,在常量模块中,你可以找到这些默认的设置,最好的情况是查看常量模块,但是不改变常量模块中的内容。
b)Util :公用模块公用模块中提供了一些公用的函数,比如列表项的交换,随机功能等。
list2DSwapElement(lst, indexa, indexb):交换矩阵中的元素项。
listSwapElement(lst, indexa, indexb):交换列表中的元素项。
c)FunctionSlot :函数分片模块Pyevolve中广泛使用函数分片的概念;这个想法是很简单的,每个遗传操作或者说是任何遗传操作能够被分配到一个片,按照这种想法,我们能够添加不止一种的遗传操作,比如说同时进行两种或者更多的变异操作,或者两种或更多的计算操作等,函数分片模块是以FunctionSlot.FunctionSlot类来实现的。
例子:Def fit_fun(genome):….Def fit_fun2(genome):….Genome.evaluator.set(fit_fun)Genome.evaluator.add(fit_fun2)Print Genome.evaluator #the result is “slot [evaluator] (count:2)”Print Genome.evaluator[0] # the result is “function fit_fun at <....>”Print Genome.evaluator[1] # the result is “function fit_fun2 at <...>”从这个例子可以看出所谓的函数分片:其实是将多个函数(操作)应用与同一个遗传算子。
这有益于简化一个函数的代码结构。
Class FunctionSlot的结构Class FunctionSlot(name='anonymous function',rand_apply=false):#name:分片的名字#rand_apply:如果为真,在分片中则只有一个函数将会被应用。
add(func):添加一个函数到分片apply(index,obj,**args):应用索引函数,index:函数的索引,obj传递给函数的参数,args参数字典传递给函数applyFunctions(obj,**args):在obj上应用所有的函数分片set(func): 清除原有的函数分片,添加func为新的函数分片1.3.3 Genetic Algorithm Core Modules:遗传算法的核心模块d.1) GSimpleGA:遗传算法引擎这个模块包括遗传算法引擎(GA engine),所谓遗传引擎代表的是自我的所有遗传过程。
遗传算法引擎包括实现遗传过程的相关函数,包括收敛准则函数等。
GsimpleGA中包括的函数d.f.1) def ConvergenceCriteria(ga_engine):当种群收敛后,停止进化。
d.f.2) def FitnessStatsCriteria(ga_engine):根据适应值的状态来终止进化d.f.3) class GSimpleGA(genome, seed=None, interactiveMode=True):遗传算法引擎类,遗传算法的核心,genome 为the sample genome也即使初始种群,当然进化以后上一次的结果为下一次的初始种群。
d.f.4) bestIndividual():返回种群中的最优个体d.f.5) evolve(frep_stats=0):执行所有的进化代数直到种群收敛,frep_stats为每隔freq_stats代则输出统计信息。
d.f.6) getCurrentGeneration():获取当前代(?是返回当前代数还是返回当前代中的染色体)d.f.7) getPopulation():返回当前遗传算法引擎内部存在的种群d.f.8)initialize():初始化遗传算法引擎,创建和初始化种群d.f.9)printTimeElapsed():返回从开始进化所用时间d.f.10) selector:这个函数分片表示如果你想更改默认的选择算子。
d.f.11)setCrossoverRate(rate):设置交叉概率p cd.f.12)setElitism(flag):设置使用杰出选择方法,flag=True时表示使用d.f.13)setGenerations(num_gens):设置进化代数d.f.14)setMutationRate(rate):设置变异概率p md.f.15)setPopulationSize(size):设置种群规模d.f.16)terminationCriteria:这个函数分片,用来更换默认的收敛准则。
d.2)GPopulation :种群模块这个模块包括GPopulation.Gpopulation类,该类用来保持种群的统计信息d.f.1)bestFitness(index=0):返回种群中最佳个体的适应度值d.f.2)create(**args):创建the sample genome来填充种群d.f.3) evaluate(**args):计算种群中所有个体的适应度值,对每个个体分别调用evaluate()函数,args传递给适应度函数。
d.f.4)initialize():初始化种群中的所有个体,对每个个体分别调用initialize()函数。
d.f.5) setPopulationSize(size):设置种群的规模1.3.4 Genetic Operators Modules:遗传算子模块e.1)Mutators :变异算子模块在这个模块中我们定义了每种染色体序列的变异算子。
…e.2)Crossovers :交叉算子模块G1DBinaryStringXSinglePoint(genome, **args):一维二进制单点交叉算子G1DBinaryStringXTwoPoint(genome, **args):一维二进制两点交叉算子G1DBinaryStringXUniform(genome, **args):一维二进制均匀交叉算子G1DListCrossoverOX(genome, **args):一维染色体形式的OX交叉算子G1DListCrossover....后也可以接单点,两点,均匀交叉算子G2DListCrossoverSingleHPoint(genome, **args):二维染色体形式的水平方向单点交叉算子。
G2DListCrossoverSingleVPoint(genome, **args):二维染色体形式的垂直方向单点交叉算子。
G2DListCrossoverUniform(genome, **args):二维形式的均匀交叉算子。
e.3)Selectors :选择算子模块GrankSelector(population,**args):秩选择GRouletteWheel(population, **args):Roulette Wheel 选择GRouletteWheel_PrepareWheel(population):使用Roulette Wheel 选择前的准备GTournamentSelector(population, **args):Tournament选择GUniformSelector(population, **args):均匀选择e.4)Initializators :初始化方法模块在这个模块中,我们对每个染色体定义了初始化的遗传操作,大部分的初始化都是由产生随机数来执行。
e.f.1)G1DBinaryStringInitializator(genome, **args):一维的二进制字符串形式的染色体的初始化。
e.f.2)G1DListInitializatorAllele(genome, **args):一维等位基因(?对偶基因)形式的染色体的初始化,要使用该初始化方法,必须使用GAllele.GAlleles实例来指定等位基因参数。
e.f.3)G1DListInitializatorInteger(genome, **args):使用整数初始化染色体,并且该方法允许设置随机整数的最大最小值范围。
e.f.4)G1DListInitializatorReal(genome, **args):使用实数初始化染色体,并且该方法允许设置随机实数的最大最小值范围。
e.f.5)对于e.f.2—e.f.4中的各种,均可以扩展到二维,其函数名称也相应的改为:G2DListInitializator*****(genome,**args)。
1.3.5 Chromosomes/Representation Modules:染色体模块这个模块含有用来扩展的基本类,如果你打算创建一个新的遗传算法,则必须仔细看一下这个模块f.1)class GenomeBase#染色体的基本类clone():copy(aim):crossover:函数分片,用来定义交叉算子。
evaluate(**args):用来调用计算基因evaluator:函数分片,用来定义适应度函数getFitnessScore():用来获得适应度值getParam(key,nvl=none):获得初始化的参数initializator:函数分片,用来定义染色体初始化的方法initialize(**args):调用用来初始化基因,参数args将会传递给initializator分片mutate(**args):调用用来是基因差生变异,参数将会传递给mutator分片setParams(**args):设置函数分片initializator的初始化参数。