人工智能遗传算法实验报告docWord格式.docx
- 文档编号:14105843
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:8
- 大小:83.96KB
人工智能遗传算法实验报告docWord格式.docx
《人工智能遗传算法实验报告docWord格式.docx》由会员分享,可在线阅读,更多相关《人工智能遗传算法实验报告docWord格式.docx(8页珍藏版)》请在冰豆网上搜索。
遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。
每个个体实际上是染色体带有特征的实体。
在一开始需要实现从表现型到基因型的映射即编码工作。
由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。
遗传算法程度流程图为:
【实验内容】
题目:
已知f(x)=x*sin(x)+1,x∈[0,2π],求f(x)的最大值和最小值。
数据结构:
structpoptype
{
doublegene[length];
//染色体
doublerealnumber;
//对应的实数x
doublefitness;
//适应度
doublerfitness;
//相对适应度
doublecfitness;
//累计适应度
};
structpoptypepopulation[popsize+1];
//最后一位存放max/min
structpoptypenewpopulation[popsize+1];
//
染色体编码:
,变量长度为2π,取小数点后6位,由于
因此,染色体由23位字节的二进制矢量表示,则X与二进制串(<
b22b21……b0>
)2之间的映射如下:
;
适应度函数:
由于要求f(x)的最值,所以适应度函数即可为f(x)。
但为了确保在轮赌法选择过中,每个个体都有被选中的可能性,因此需要将所有适应度调整为大于0的值。
因此,设计求最大值的适应度函数如下:
将最小问题转化为求-f(x)的最大值,同理,设计最小值的适应度函数如下:
种群大小:
本实验默认为50,再进行种群初始化。
实验参数:
主要有迭代数,交叉概率,变异概率这三个参数。
一般交叉概率在0.6-0.9范围内,变异概率在0.01-0.1范围内。
可以通过手动输入进行调试。
主要代码如下:
voidinitialize()//种群初始化
srand(time(NULL));
inti,j;
for(i=0;
i<
popsize;
i++)
for(j=0;
j<
23;
j++)
population[i].gene[j]=rand()%2;
voidtransform()//染色体转化为实数x
=popsize+1;
{
population[i].realnumber=0;
population[i].realnumber+=population[i].gene[j]*pow(2,j);
population[i].realnumber=population[i].realnumber*2*pi/(pow(2,23)-1);
}
}
voidcal_fitness()//计算适应度
inti;
population[i].fitness=population[i].realnumber*sin(population[i].realnumber)+6;
voidselect()//选择操作
intmem,i,j,k;
doublesum=0;
doublep;
for(mem=0;
mem<
mem++)
sum+=population[mem].fitness;
mem++)
population[mem].rfitness=population[mem].fitness/sum;
population[0].cfitness=population[0].rfitness;
for(mem=1;
population[mem].cfitness=population[mem-1].cfitness+population[mem].rfitness;
for(i=0;
{//轮赌法选择机制
p=rand()%1000/1000.0;
if(p<
population[0].cfitness)
newpopulation[i]=population[0];
else{
for(j=0;
if(p>
=population[j].cfitness&
&
p<
population[j+1].cfitness)
newpopulation[i]=population[j+1];
}
for(i=0;
i++)//复制给下一代
population[i]=newpopulation[i];
voidcross()//交叉操作
inti,mem,one;
intfirst=0;
doublex;
for(mem=0;
x=rand()%1000/1000.0;
if(x<
pcross)
{
++first;
if(first%2==0)Xover(one,mem);
//个体间染色体进行交叉函数
elseone=mem;
voidmutate()//变异操作
inti,j,t;
length;
x=rand()%1000/1000.0;
if(x<
pvariation)
{
if(population[i].gene[j])population[i].gene[j]=0;
elsepopulation[i].gene[j]=1;
voidcal_max()//计算最大值
doublemax,sum=0;
intmax_m;
max=population[0].fitness;
popsize-1;
if(population[i].fitness>
population[i+1].fitness)
if(population[i].fitness>
=max)
max=population[i].fitness;
max_m=i;
}
elseif(population[i+1].fitness>
max=population[i+1].fitness;
max_m=i+1;
}
if(max>
population[popsize].fitness)
iteration=0;
for(i=0;
population[popsize].gene[i]=population[max_m].gene[i];
population[popsize].fitness=population[max_m].fitness;
sum=population[popsize].gene[i]-population[max_m].gene[i];
if(sum==0)iteration++;
transform();
printf("
%f,%f,%f,%f\n"
population[popsize].fitness,population[popsize+1].fitness,population[popsize].realnumber,population[popsize+1].realnumber);
【实验结果】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 遗传 算法 实验 报告 doc