遗传算法Word文档下载推荐.docx

上传人:b****8 文档编号:22893136 上传时间:2023-02-05 格式:DOCX 页数:30 大小:32.58KB
下载 相关 举报
遗传算法Word文档下载推荐.docx_第1页
第1页 / 共30页
遗传算法Word文档下载推荐.docx_第2页
第2页 / 共30页
遗传算法Word文档下载推荐.docx_第3页
第3页 / 共30页
遗传算法Word文档下载推荐.docx_第4页
第4页 / 共30页
遗传算法Word文档下载推荐.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

遗传算法Word文档下载推荐.docx

《遗传算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《遗传算法Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。

遗传算法Word文档下载推荐.docx

对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。

实践证明,遗传算法对于组合优化中的NP问题非常有效。

例如遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等方面得到成功的应用。

此外,GA也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。

遗传算法的现状

进入90年代,遗传算法迎来了兴盛发展时期,无论是理论研究还是应用研究都成了十分热门的课题。

尤其是遗传算法的应用研究显得格外活跃,不但它的应用领域扩大,而且利用遗传算法进行优化和规则学习的能力也显著提高,同时产业应用方面的研究也在摸索之中。

此外一些新的理论和方法在应用研究中亦得到了迅速的发展,这些无疑均给遗传算法增添了新的活力。

遗传算法的应用研究已从初期的组合优化求解扩展到了许多更新、更工程化的应用方面。

随着应用领域的扩展,遗传算法的研究出现了几个引人注目的新动向:

一是基于遗传算法的机器学习,这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。

这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。

二是遗传算法正日益和神经网络、模糊推理以及混沌理论等其它智能计算方法相互渗透和结合,这对开拓21世纪中新的智能计算技术将具有重要的意义。

三是并行处理的遗传算法的研究十分活跃。

这一研究不仅对遗传算法本身的发展,而且对于新一代智能计算机体系结构的研究都是十分重要的。

四是遗传算法和另一个称为人工生命的崭新研究领域正不断渗透。

所谓人工生命即是用计算机模拟自然界丰富多彩的生命现象,其中生物的自适应、进化和免疫等现象是人工生命的重要研究对象,而遗传算法在这方面将会发挥一定的作用,五是遗传算法和进化规划(EvolutionProgramming,EP)以及进化策略(EvolutionStrategy,ES)等进化计算理论日益结合。

EP和ES几乎是和遗传算法同时独立发展起来的,同遗传算法一样,它们也是模拟自然界生物进化机制的只能计算方法,即同遗传算法具有相同之处,也有各自的特点。

目前,这三者之间的比较研究和彼此结合的探讨正形成热点。

1991年D.Whitey在他的论文中提出了基于领域交叉的交叉算子(Adjacencybasedcrossover),这个算子是特别针对用序号表示基因的个体的交叉,并将其应用到了TSP问题中,通过实验对其进行了验证。

D.H.Ackley等提出了随即迭代遗传爬山法(StochasticIteratedGeneticHill-climbing,SIGH)采用了一种复杂的概率选举机制,此机制中由m个“投票者”来共同决定新个体的值(m表示群体的大小)。

实验结果表明,SIGH与单点交叉、均匀交叉的神经遗传算法相比,所测试的六个函数中有四个表现出更好的性能,而且总体来讲,SIGH比现存的许多算法在求解速度方面更有竞争力。

H.Bersini和G.Seront将遗传算法与单一方法(simplexmethod)结合起来,形成了一种叫单一操作的多亲交叉算子(simplexcrossover),该算子在根据两个母体以及一个额外的个体产生新个体,事实上他的交叉结果与对三个个体用选举交叉产生的结果一致。

同时,文献还将三者交叉算子与点交叉、均匀交叉做了比较,结果表明,三者交叉算子比其余两个有更好的性能。

国内也有不少的专家和学者对遗传算法的交叉算子进行改进。

2002年,戴晓明等应用多种群遗传并行进化的思想,对不同种群基于不同的遗传策略,如变异概率,不同的变异算子等来搜索变量空间,并利用种群间迁移算子来进行遗传信息交流,以解决经典遗传算法的收敛到局部最优值问题

2004年,赵宏立等针对简单遗传算法在较大规模组合优化问题上搜索效率不高的现象,提出了一种用基因块编码的并行遗传算法(Building-blockCodedParallelGA,BCPGA)。

该方法以粗粒度并行遗传算法为基本框架,在染色体群体中识别出可能的基因块,然后用基因块作为新的基因单位对染色体重新编码,产生长度较短的染色体,在用重新编码的染色体群体作为下一轮以相同方式演化的初始群体。

2005年,江雷等针对并行遗传算法求解TSP问题,探讨了使用弹性策略来维持群体的多样性,使得算法跨过局部收敛的障碍,向全局最优解方向进化。

遗传算法的一般算法

遗传算法是基于生物学的,理解或编程都不太难。

下面是遗传算法的一般算法:

  创建一个随机的初始状态

  初始种群是从解中随机选择出来的,将这些解比喻为染色体或基因,该种群被称为第一代,这和符号人工智能系统的情况不一样,在那里问题的初始状态已经给定了。

  评估适应度

  对每一个解(染色体)指定一个适应度的值,根据问题求解的实际接近程度来指定(以便逼近求解问题的答案)。

不要把这些“解”与问题的“答案”混为一谈,可以把它理解成为要得到答案,系统可能需要利用的那些特性。

  繁殖(包括子代突变)

  带有较高适应度值的那些染色体更可能产生后代(后代产生后也将发生突变)。

后代是父母的产物,他们由来自父母的基因结合而成,这个过程被称为“杂交”。

  下一代

  如果新的一代包含一个解,能产生一个充分接近或等于期望答案的输出,那么问题就已经解决了。

如果情况并非如此,新的一代将重复他们父母所进行的繁衍过程,一代一代演化下去,直到达到期望的解为止。

  并行计算

  非常容易将遗传算法用到并行计算和群集环境中。

一种方法是直接把每个节点当成一个并行的种群看待。

然后有机体根据不同的繁殖方法从一个节点迁移到另一个节点。

另一种方法是“农场主/劳工”体系结构,指定一个节点为“农场主”节点,负责选择有机体和分派适应度的值,另外的节点作为“劳工”节点,负责重新组合、变异和适应度函数的评估。

术语说明

由于遗传算法是由进化论和遗传学机理而产生的搜索算法,所以在这个算法中会用到很多生物遗传学知识,下面是我们将会用来的一些术语说明:

一、染色体(Chronmosome)

染色体又可以叫做基因型个体(individuals),一定数量的个体组成了群体(population),群体中个体的数量叫做群体大小。

二、基因(Gene)

基因是串中的元素,基因用于表示个体的特征。

例如有一个串S=1011,则其中的1,0,1,1这4个元素分别称为基因。

它们的值称为等位基因(Alletes)。

三、基因地点(Locus)

基因地点在算法中表示一个基因在串中的位置称为基因位置(GenePosition),有时也简称基因位。

基因位置由串的左向右计算,例如在串S=1101中,0的基因位置是3。

四、基因特征值(GeneFeature)

在用串表示整数时,基因的特征值与二进制数的权一致;

例如在串S=1011中,基因位置3中的1,它的基因特征值为2;

基因位置1中的1,它的基因特征值为8。

五、适应度(Fitness)

各个个体对环境的适应程度叫做适应度(fitness)。

为了体现染色体的适应能力,引入了对问题中的每一个染色体都能进行度量的函数,叫适应度函数.这个函数是计算个体在群体中被使用的概率。

遗传算法实例

---------来个例子,大家好理解------------

基于遗传算法的人工生命模拟

#include<

stdio.h>

stdlib.h>

graphics.h>

math.h>

time.h>

string.h>

#include"

graph.c"

/*宏定义*/

#defineTL120/*植物性食物限制时间*/

#defineTL25/*动物性食物限制时间*/

#defineNEWFOODS3/*植物性食物每代生成数目*/

#defineMUTATION0.05/*变异概率*/

#defineG_LENGTH32/*个体染色体长度*/

#defineMAX_POP100/*个体总数的最大值*/

#defineMAX_FOOD100/*食物总数的最大值*/

#defineMAX_WX60/*虚拟环境的长度最大值*/

#defineMAX_WY32/*虚拟环境的宽度最大值*/

#defineSX1330/*虚拟环境图左上角点x坐标*/

#defineSY140/*虚拟环境图左上角点y坐标*/

#defineGX360/*个体数进化图形窗口的左上角点X坐标*/

#defineGY257/*个体数进化图形窗口的左上角点Y坐标*/

#defineGXR250/*个体数进化图形窗口的长度*/

#defineGYR100/*个体数进化图形窗口的宽度*/

#defineGSTEP2/*个体数进化图形窗口的X方向步长*/

#defineR_LIFE0.05/*初期产生生物数的环境比率*/

#defineR_FOOD0.02/*初期产生食物数的环境比率*/

#defineSL_MIN10/*个体寿命最小值*/

/*全局变量*/

unsignedchargene[MAX_POP][G_LENGTH];

/*遗传基因*/

unsignedchariflg[MAX_POP];

/*个体死活状态标志变量*/

unsignedcharfflg[MAX_FOOD];

/*食物有无状态标志变量*/

unsignedcharworld[MAX_WX][MAX_WY];

/*虚拟环境的数据*/

unsignedchar/*各中行为模式数据*/

life1[5][5]={{0,0,1,0,0},{0,1,0,1,0},{1,0,0,0,1},{0,1,0,1,0},{0,0,1,0,0}};

unsignedchar

life2[5][5]={{1,1,1,1,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,1}};

food1[5][5]={{0,0,0,1,0},{0,0,1,1,0},{0,1,0,1,0},{0,0,1,1,0},{0,0,0,1,0}};

food2[5][5]={{0,0,0,1,0},{0,0,1,1,0},{0,1,1,1,0},{0,0,1,1,0},{0,0,0,1,0}};

intpop_size;

/*个体总数*/

intiatr[MAX_POP][4];

/*个体属性*/

/*iatr[][0]个体当前位置x坐标*/

/*iatr[][1]个体当前位置y坐标*/

/*iatr[][2]内部能量*/

/*iatr[][3]年龄属性*/

intfood_size;

/*食物总数*/

intfatr[MAX_FOOD][4];

/*食物属性*/

/*fatr[][0]食物当前位置x坐标*/

/*fatr[][1]食物当前位置y坐标*/

/*fatr[][2]=0:

植物性=1:

动物性*/

/*fatr[][3]新鲜程度*/

intwx,wy;

/*虚拟环境的长宽度*/

voiduni_crossover(gene,g1,g2,g3,ratio1,g_length)/*均匀交叉*/

unsignedchar*gene;

intg1,g2,g3;

/*g1g2父个体编号g3子个体编号*/

doubleratio1;

/*父个体g1被选中的概率*/

intg_length;

/*个体遗传基因的位长*/

{

unsignedchar*gene1;

/*父1遗传基因的指针*/

unsignedchar*gene2;

/*父2遗传基因的指针*/

unsignedchar*gene3;

/*子遗传基因的指针*/

doublernd,r1;

inti;

gene1=gene+g_length*g1;

gene2=gene+g_length*g2;

gene3=gene+g_length*g3;

r1=(int)(10000.0*ratio1);

for(i=0;

i<

g_length;

i++)

{rnd=random(10000);

if(rnd<

=r1)*(gene3+i)=*(gene1+i);

else*(gene3+i)=*(gene2+i);

}

voidg_disp_unit(x,y,n)

/*绘制虚拟环境的一个单元*/

intx,y;

/*x=0,1,2....,wx-1;

y=0,1,2,....,wy-1*/

intn;

/*n=0:

=1:

生物1=2:

生物2=3:

植物性食物=4:

障碍物=5:

动物性食物*/

intgx,gy,i,j;

unsignedcharcol;

gx=SX1+5*x;

gy=SY1+5*y;

5;

for(j=0;

j<

j++)

{switch(n)

{case0:

col=0;

break;

case1:

col=life1[j][i]*2;

case2:

col=life2[j][i]*4;

case3:

col=food1[j][i]*6;

case4:

col=7;

case5:

col=food2[j][i]*11;

g_pset(gx+j,gy+i,col);

voidg_draw_world()/*显示虚拟环境画面*/

inti,j;

wy;

wx;

g_disp_unit(j,i,world[j][i]);

voidg_draw_frame(x1,y1,x2,y2,c1,c2,c3,c4,text)

intx1,y1,x2,y2,c1,c2,c3,c4;

char*text;

{intn,x3;

g_rectangle(x1,y1,x2,y2,c1,1);

g_rectangle(x1,y1,x2,y2,c2,0);

g_rectangle(x1,y1,x2,y1+16,c3,1);

g_rectangle(x1,y1,x2,y1+16,c2,0);

n=strlen(text);

x3=x1+((x2-x1-n*8)/2);

disp_hz16(text,x3,y1,c4);

voidg_init_frames()/*初始化画面*/

inti,j,cx,cy,x,y;

chartext[17];

g_draw_frame(0,0,639,399,15,0,4,15,

"

基于遗传算法的人工生命模拟"

);

g_draw_frame(0,16,320,170,7,0,8,15,"

设定参数"

y=48;

setcolor(9);

disp_hz16("

植物食物限制时间"

16,y,15);

sprintf(text,"

%d"

TL1);

g_text(200,y+8,4,text);

y=y+24;

动物食物限制时间"

TL2);

植物食物每代生成个数"

NEWFOODS);

变异概率"

i=(int)(MUTATION*100.0);

i);

g_text(152,y+8,4,text);

g_draw_frame(0,170,320,399,7,0,8,15,"

最佳基因型"

x=16;

y=194;

SP:

物种号........"

x,y,15);

y=y+16;

SL:

寿命.........."

VF:

视野.........."

TM:

基本移动模式.."

CM:

移动特点......"

LM:

移动能耗......"

CA:

行动特点......"

CR:

善变性........"

SA:

攻击速度......"

DA:

防御能力......"

LA:

攻击能耗......"

EF:

食物吸取效率.."

g_draw_frame(320,16,639,207,7,0,8,15,"

虚拟世界"

g_draw_frame(320,207,639,399,7,0,8,15,"

世代个体数目变化"

voidg_init_graph()

/*个体数进化图初始化*/

g_rectangle(GX,GY,GX+GXR,GY+GYR,0,1);

g_rectangle(GX,GY,GX+GXR,GY+GYR,6,0);

setcolor

(1);

disp_hz16("

生物1"

GX+5,GY-18,15);

g_line(GX+90,GY-10,GX+110,GY-10,1);

setcolor(4);

生物2"

GX+120,GY-18,15);

g_line(GX+205,GY-10,GX+225,GY-10,4);

setcolor(0);

世代数"

GX+168,GY+GYR+10,15);

g_text(GX-25,GY,0,"

100"

g_text(GX-14,GY+GYR,0,"

0"

voidg_plot_population(gen_num,n1,n2,n1old,n2old)

intgen_num,n1,n2,n1old,n2old;

intx,y,gx,gy,x_old,y_old;

chartext[8];

if(gen_num%10==0)

x=GX+(gen_num-1)*GSTEP;

g_line(x,GY+1,x,GY+GYR-1,1);

gen_num);

if(gen_num<

100||gen_num%20==0)

g_text(x-8,GY+GYR+5,15,text);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1