本文为作者经验之谈。
[@more@]一、基本遗传算法简介
遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。它最早由美国密执安大学的Holland教授提出,起源于20世纪60年代对自然和人工自适应系统的研究。70年代De Jong基于遗传算法的思想在计算机上进行了大量的纯数值函数优化计算实验。在一系列研究工作的基础上,80年代由Goldberg进行归纳总结,形成了(基本)遗传算法的基本框架。
基本遗传算法(Simple Genetic Algorithms,简称SGA),又称为简单遗传算法,标准遗传算法等。
二、基本遗传算法描述
1. 工作流程
迭代开始:t=0
初始化种群:P(0)
对初始种群进行适应度评价:
While(循环) (不满足条件T)
选择操作:
交叉操作:
变异操作:
产生新一代种群P(t+1),t=t+1
适应度评价:
结束
2. 伪代码描述
begin
initialize P(0) (初始化种群)
t=0 (初始化迭代值,即世代数初值)
while(t<=T) do (当世代数小于等于最大世代数T时)
for i=1 to M do (评价适应度)
evaluate fitness of P(t)
end for
for i=1 to M do (执行选择操作)
select operation to P(t)
end for
for i=1 to M/2 do (执行交叉操作)
crossover operator to P(t)
end for
for i=1 to M do (执行变异操作)
mutation operator to P(t)
end for
for i=1 to M do (给新种群赋值)
P(t+1)=P(t)
end for
t=t+1 (更新当前世代数的值)
end while
end
说明:M表示种群的大小,即种群里面所含有的个体数目;T表示最大世代数。
三、算法的C/C++实现
本节简单介绍本人利用C/C++(Turbo c2.0/Visual c++6.0)实现基本遗传算法的思路,其它编程语言可适当作些变化。
1.数据处理:由于算法的数据比如种群等的需要,采用结构体数组
struct individual 个体数据结构
{
unsigned chrom[chromsize]; /染色体
double fitness; /个体适应度
double x[var]; /个体对应的变量值
};
struct individual newpop[popsize]; /新一代种群
将其它数据定义为全局变量,如
const int chromsize=20; ///染色体长度
int popsize; ///种群大小
double pm; ///变异概率
double pc; ///交叉概率
int maxruns; ///总运行次数
2. 函数处理:
void decode(unsigned arr[],double x[]); //解码函数:将arr[]解码给x[var]
double fitfun(double x[]); /适应度函数声明
void statistics(individual pop[],int run); /统计种群数据
void selection(individual pop[]); /选择算子
void crossover(individual pop[]); /交叉算子
void mutation(individual pop[]); /变异算子
当然上面函数的参数最好采用指针什么的,理由可以在C/C++教材里面找,这里就不多说了。
3. 具体实现:另外撰文
四、参考文献
[1]周明,孙数栋。遗传算法原理及应用。北京.国防工业出版社,1999.6
[2]李敏强等。遗传算法的基本理论与应用。北京.科学出版社,2002.3
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11355887/viewspace-974927/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11355887/viewspace-974927/