当前位置:首页 >> 计算机软件及应用 >>

遗传算法


人工智能 遗传算法

目录

1
2 3

遗传算法简介

详细设计

结果

遗传算法是一种最优化算法,所谓最优化问 题,就是这样一类问题,满足它的解(称为可行 解)有很多对于每一种解有一个评价函数得到一 个评价值,也就确定了解集的一个偏序关系,在 这个偏序关系的求最小值(或最大值)或者近似 最小值(或最大值)。因为通常可行解非常之多 ,所以确定性算法很难做到这一点,而遗传算法 是模拟了生物学中物种进化的过程的一种最优化 算法,简单来说: 遗传算法=遗传操作+遗传选择

Genetic Algorithm
遗传算法

要运行遗传算法就要对其进行抽象的编码, 也就是确定染色体的形式,这里的染色体就是用 某种特定的编码方式描述一个解,通常一个具体 的解也称为个体。而多个不同的个体就组成一个 种群,一个种群内有统一的编码方式。这些概念 都完全等同于生物学中的概念,它们是平行的。 例如,N个城市的旅行商问题(TSP),假如用 1,2,...N表示这N个城市,那对于任意这样的一个 排列1p2p3...pN就表示了一个解,这个串就可以 认为是一个染色体,它表示一个个体的基因。

编码

遗传算法有一些基本的操作,如选择、交叉和变异等 首先要知道适应度函数,它通常是 问题的目的函数,描述了个体的优劣程 度同时也决定了选择操作的概率,设fi表 示第i个个体的适应度值,那选择第i个个 选择操作 体的概率就是fi/∑fj。 简单来说,这个概率的大小就决定 了该个体是被淘汰还是被保留。通常的 具体做法是用类似赌盘的方法,每个个 体占它的适应度那么宽的转盘大小,每 次掷色子,落到哪一格就选哪一格对应 的个体。

交叉操作就是让2个以上的染色体进 行交叉产生后代的过程,交叉的原则就 是要有对称性,交叉得到的后代中的基 交叉操作 因要来源于父代的所有个体中,也就是 说N个个体进行交叉是和它们的排列没关 系,这样子代才有机会得到更优秀的基 因。交叉操作是遗传算法中最重要的操 作。最简单的基本方式是交换父代中染 色体片段。

生物可以突变,正是因为有了突变 才让有限的种群中基因库可以非常丰富 ,也保证了种群的适应能力。变异操作 通常是翻转个体中某段染色体,编码后 的染色体在计算机中都是01串,也就可 以随机的翻转某个bit上的值。 交叉和变异不是一定要发生在选择 了的个体上,而是按一定控制概率发生 的,交叉概率比较高通常是0.6~0.95, 而变异概率比较低通常是0.001~0.01。

变异操作

(1)随机给定隐层和输入层间神经元的初始权 值。 (2)由给定的样本输入计算出隐层的实际输出 。 改进算法的具体步骤 (3)计算输出层与隐层间的权值。以输出层的 第r个神经元为对象,由给定的输出目标值作为 等式的多项式值建立方程。 (4)重复第三步就可以求出输出层m个神经元 的权值,以求的输出层的权矩阵加上随机固定 的隐层与输入层的权值就等于神经网络最后训 练的权矩阵。

1,产生初始种群G 2,选择G,交叉、变异->G' 3,是否满足某个终止条件 ,如果没有重复上面过程。

遗传算法一般的结构

一般的遗传算法不一定 收敛,但给一个条件,让每 遗传算法的收敛 代中最优秀的个体直接进入 到子代,就能保证一定收敛 。

首先是种群规模,也就是种群中个体的数 目,如果太小,显然不利于快速收敛,如果太 大又会花更多的时间计算,通常选择100左右 的种群规模。其次,父代可不可以有机会进入 子代?如果某次交叉产生的子代比父代还差, 遗传算法的性能 那是否还要这个新个体?当然不,父代也要有 机会进入子代。然后就是终止条件,一般运用 遗传算法时,对最优解是不了解的,那我们就 不知道算法何时停止,一般使用的终止条件是 在进化M代后,每代中的最优个体没有提高时 停止。

求根号2,也就是求方程f(x)=x*x-2=0的正整数 解,x=1时f(1)<0,x=2时f(2)>0,由介值定理, 则1到2中间存在一个根,根据代数基本定理和 根的对称性知这就是我们要找的根,由目标函 数得到适应度函数,我们选择个体都在[1,2]之 遗传算法求根号2 间,那适应度函数我可以取 j(x)=40/(2+|x*x-2|)-10,由x的取值范围知j的范 围是(0,10) x和y交叉就用取平均(x+y)/2,交叉概率取0.9, 变异概率为0。

typedef struct _indi { double code; //染色体 double degree;//适应度 }Indi; Indi group[40]; //种群规模为40 void Judge(Indi &x) { double tmp=x.code*x.code-2.0; if(tmp>=0) x.degree=40.0/(2.0+tmp)-10.0; else x.degree=40.0/(2.0-tmp)-10.0; } int happened(double p)//发生一个p=0~1间概率的事件 { return rand()<(int)(p*RAND_MAX); }

void Cross(Indi &x,Indi &y)//交叉操作,产生一个子代取代父代中最次的一个 { Indi z; z.code=(x.code+y.code)/2.0; Judge(z); if(x.degree<y.degree) { if(z.degree<=x.degree) return;//如果新个体不如双亲,淘汰之 x=z; } else { if(z.degree<=y.degree) return; y=z; } }

void main() { int i,j,best,x,y,c; double sum,strick; for(i=0;i<40;++i)//随机得到初始种群 { group[i].code=1.0+(double)rand()/RAND_MAX; Judge(group[i]); } for(i=1;i<=10;++i)//固定进化10代 { for(sum=0.0,best=0,j=0;j<40;++j) { sum+=group[j].degree;//求总的适应度sum if(group[j].degree>group[best].degree) best=j;//求当前最优个体 } printf("第%2d代中 最优个体为 %10f(%10f) 平均适应度为 %10f\n", i,group[best].code,group[best].degree,sum/40.0);

for(c=40;c;--c) { strick=(double)rand()/RAND_MAX*sum; //赌盘中的色子,选择个体x,y for(x=0;x<40&&strick>=group[x].degree;++x) strick-=group[x].degree; strick=(double)rand()/RAND_MAX*sum; for(y=0;y<40&&strick>=group[y].degree;++y) strick-=group[y].degree; if(happened(0.9)) Cross(group[x],group[y]); //交叉 } } }

第 1代中 最优个体为 1.445692(适应度 9.138515) 平均适应度为 5.201076 第 2代中 最优个体为 1.414396(适应度 9.994853) 平均适应度为 6.789277 第 3代中 最优个体为 1.414396(适应度 9.994853) 平均适应度为 7.726777 第 4代中 最优个体为 1.414396(适应度 9.994853) 平均适应度为 8.267572 第 5代中 最优个体为 1.414396(适应度 9.994853) 平均适应度为 8.803805 第 6代中 最优个体为 1.414396(适应度 9.994853) 平均适应度为 9.147720 第 7代中 最优个体为 1.414113(适应度 9.997158) 平均适应度为 9.280602 第 8代中 最优个体为 1.414205(适应度 9.999755) 平均适应度为 9.356507 第 9代中 最优个体为 1.414205(适应度 9.999755) 平均适应度为 9.465438 第10代中 最优个体为 1.414211(适应度 9.999931) 平均适应度为 9.553306

运行结果


赞助商链接
相关文章:
遗传算法
遗传算法_互联网_IT/计算机_专业资料。遗传算法本周主要学习了遗传算法遗传算法效法于自然选择的生物进化,是一种模仿生物进化过程的随机 方法。它是从代表问题...
遗传算法
遗传算法_数学_自然科学_专业资料。遗传算法一、 概念遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生 物进化过程的计算模型,是一种...
遗传算法
遗传算法_电脑基础知识_IT/计算机_专业资料。湖南理工学院人工智能课程论文 题 目: 遗传算法及其应用 人工智能及其应用 计算机学院 计科 13 - 2 BJ 李中文 ...
遗传算法
遗传算法_数学_自然科学_专业资料。基本原理: 遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种...
遗传算法学习心得体会
遗传算法学习心得体会_计划/解决方案_实用文档。遗传算法学习心得体会 遗传算法 概念 遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,它借鉴了达 ...
基本遗传算法
2、 遗传算法的基本结构遗传算法借助生物遗传学的观点,通过对生物遗传和进化过程中的选择、交叉、变异机理的模仿,来完成对问题最优解的自适应搜索过程,以实现各个...
遗传算法的优缺点
遗传算法的优缺点_机械/仪表_工程科技_专业资料。遗传算法属于进化算法( Evolutionary Algorithms) 的一种,它通过模仿自然界的选择与遗传的 机理来寻找最优解. 遗传...
遗传算法毕业论文
2 3 基于遗传算法 TSP 算法 ... 2 3.1 基于遗传算法的 TSP 算法总体框架 ......
第三章 遗传算法的理论基础
第三章 遗传算法的理论基础 遗传算法有效性的理论依据为模式定理和积木块假设。模式定理保证了较优的模式(遗传 算法的较优解)的样本呈指数级增长,从而满足了寻找...
遗传算法经典MATLAB代码
遗传算法经典MATLAB代码_计算机软件及应用_IT/计算机_专业资料。遗传算法经典MATLAB代码 遗传算法 经典学习 Matlab 代码遗传算法实例: 也是自己找来的,原代码有少许...
更多相关标签: