您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 《遗传算法》实验指导书
—1—实验一辽宁科技大学理学院(系)2010年月日课名:遗传算法题目:随机函数与函数调用班级:姓名:学号:机台号:同组人:任课教师:熊焱实验目的:1.掌握随机数的生成函数2.熟悉函数调用的基本操作实验内容及步骤:内容:利用随机函数生成[1,10]和[0,1]内随机数各个;编写数组作为参量的函数调用程序条件:调用函数关系自己选定(如:23xyxy),数组取为实型要求:生成随机数之后屏幕显示出来;数组、函数关系、函数值显示在屏幕上。程序:#includestdio.h#includestdlib.hvoidmain(){floate[5];intd[5];intj,x;floaty,z;for(j=0;j5;j++){—2—d[j]=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf(%d,d[j]);}printf(\n);for(j=0;j5;j++){e[j]=rand()/(RAND_MAX+1.0);printf(%.2f,e[j]);}printf(\n);for(j=0;j5;j++){x=d[j];y=e[j];z=x*x+y*y*y+x*y;printf(%.2f,z);}printf(\n);printf(x*x+y*y*y+x*y\n);}实验二辽宁科技大学理学院(系)2010年月日课名:遗传算法题目:编码、解码班级:姓名:学号:机台号:同组人:任课教师:熊焱—3—实验目的:1.掌握二进制数与十进制数的相互转化2.熟悉不同划分长度下的二进制与十进制的转化操作实验内容及步骤:内容:将十进制数转化为指定长度下的二进制数将二进制数转化为指定长度下的十进制数条件:利用函数调用的方法编写程序,长度设为输入量(可调节),十进制数为单变量实型、二进制数存为数组(每个数组单元存储一位);要求:转换结果屏幕输出。#includestdio.h#includemath.hvoidsje(intn,intm){intx=0,a[100]={0};while(n){a[x++]=n%2;n/=2;}while(m0){m--;printf(%d,a[m]);}}voidejs(int*a,intx){intsum=0;—4—while(x0){x--;sum+=a[x]*pow(2.0,x);}printf(%d\n,sum);}voidmain(){intm,n,x,a[100];inti;printf(请输入转换的数:\n);scanf(%d,&n);printf(请输入要转化在长度:\n);scanf(%d,&m);sje(n,m);printf(\n);printf(请输入转换的二进制数长度:\n);scanf(%d,&x);printf(请输入转换的二进制数:\n);for(i=x-1;i=0;i--)scanf(%d,&a[i]);ejs(a,x);}实验三辽宁鞍山科技大学理学院(系)2010年月日课名:遗传算法题目:初始种群班级:姓名:学号:机台号:同组人:任课教师:熊焱—5—实验目的:掌握初始群体的生成过程实验内容及步骤:内容:生成二进制编码下的初始种群。条件:个体范围给定,种群规模设为变量(可调节)。要求:屏幕显示所生成的初始群体#includestdio.h#includeconio.h#includestdlib.hintrandom(){returnrand()%100;}voidsje(intn,intm){intx=0,a[100]={0};while(n){a[x++]=n%2;n/=2;}while(m0){m--;printf(%d,a[m]);}}voidmain(){—6—intx,y=0;printf(种群规模:\n);scanf(%d,&x);while(yx){sje(random(),8);printf(\n);y++;}}实验四鞍山科技大学理学院(系)2010年月日课名:遗传算法题目:选择算子班级:姓名:学号:机台号:同组人:任课教师:熊焱实验目的:掌握轮盘赌选择算子—7—实验内容及步骤:内容:编写二进制编码下的轮盘赌选择算子程序。条件:延用前次实验所生成的初始种群和群体规模。要求:屏幕显示选择算子操作后的结果。#includeiostream#includestdlib.h#includetime.husingnamespacestd;intRand_a(intn){returnrand()%n+1;}intmain(){intN;cout请输入种群大小:endl;cinN;int*syd=newint[N];int*lsyd=newint[N];inti;intn;intp=0;int*a=newint[N];cout请输入适应度:endl;for(i=0;iN;i++)cinsyd[i];lsyd[0]=syd[0];for(i=1;i10;i++){lsyd[i]=lsyd[i-1]+syd[i];}cout其适应度和累积适应度如下:endl;for(i=0;iN;i++)—8—{couti+1\t;}coutendl;for(i=0;iN;i++)coutsyd[i]\t;coutendl;for(i=0;iN;i++)coutlsyd[i]\t;coutendl;srand((unsignedint)time(NULL));for(i=0;iN;i++)a[i]=Rand_a(lsyd[N-1]);cout随机数如下:endl;for(i=0;iN;i++)couta[i]\t;coutendl;cout被选中的个体号如下:endl;while(pN){for(i=0;iN;i++){if(lsyd[i]a[p]){couti+1\t;break;}}p++;}coutendl;return0;}实验五—9—辽宁鞍山科技大学理学院(系)2010年月日课名:遗传算法题目:单点交叉算子班级:姓名:学号:机台号:同组人:任课教师:熊焱实验目的:掌握单点交叉算子实验内容及步骤:内容:编写二进制编码下的单点交叉算子程序。条件:延用前次实验所生成的种群和群体规模。要求:屏幕显示交叉算子操作后的结果。#includeiostream#includestdlib.h#includetime.husingnamespacestd;voidfun(int*a,intn){inti=0;while(n!=0){a[i]=n%2;n=n/2;i++;}}voidf(intmodel,int*num){—10—intnum1,num2,shu=0,k=0;while(k!=model){num1=rand()%(model+1);if(k==0&&num1!=0)num[k++]=num1;else{for(inti=0;ik;i++)if(num1==num[i]||num1==0)shu=num1;if(shu!=num1)num[k++]=num1;elsecontinue;}num2=rand()%(model+1);for(intj=0;jk;j++){if(num2==num[j]||num2==0){k--;break;}}if(k%2==0||num1==0)continue;num[k++]=num2;}}voidJC(int**a,int*b,double*c,intN,doublep){for(inti=0;iN;i=i+2){intp1,p2;—11—p1=b[i]-1,p2=b[i+1]-1;if(c[i]p||c[i+1]p){intn=rand()%7+1;cout(p1+1,p2+1)在;coutn交叉endl;for(inti=0;in;i++){intt;t=a[p1][i];a[p1][i]=a[p2][i];a[p2][i]=t;}}}}intmain(){intN;intn;doublep=0.6;inti,j;cout请输入种群规模:endl;cinN;int*a=newint[8];for(i=0;i8;i++)a[i]=0;int**b;b=newint*[N];for(i=0;iN;i++)b[i]=newint[8];double*c=newdouble[N];int*d=newint[N];srand((unsignedint)time(NULL));for(i=0;iN;i++){n=rand()%100+1;—12—fun(a,n);for(j=0;j8;j++){b[i][j]=a[j];a[j]=0;}}coutendl初始种群如下:endl;for(i=0;iN;i++){for(j=7;j=0;j--)coutb[i][j];coutendl;}coutendl;int*as=newint[N];f(N,as);cout配对结果如下endl;for(i=0;iN;i=i+2)cout(as[i],as[i+1])endl;coutendl;for(i=0;iN;i++)c[i]=rand()%1000*1.0/1000;cout随机数如下:endl;for(i=0;iN;i++)coutc[i]endl;JC(b,as,c,N,p);cout交叉结果如下:endl;for(i=0;iN;i++){for(j=7;j=0;j--)coutb[i][j];coutendl;}return0;—13—}—14—实验六辽宁鞍山科技大学理学院(系)2010年月日课名:遗传算法题目:单点变异算子班级:姓名:学号:机台号:同组人:任课教师:熊焱实验目的:掌握单点变异算子实验内容及步骤:内容:编写二进制编码下的单点变异算子程序。条件:延用前次实验所生成的种群和群体规模。要求:屏幕显示变异算子操作后的结果。#includeiostream#includestdlib.h#includetime.husingnamespacestd;voidfun(int*a,intn){inti=0;while(n!=0){a[i]=n%2;n=n/2;i++;}}—15—intmain(){intN;intn;doublep=0.5;inti,j;cout请输入种群规模:endl;cinN;int*a=newint[8];for(i=0;i8;i++)a[i]=0;int**b;b=newint*[N];for(i=0;iN;i++)b[i]=newint[8];double**c;c=newdouble*[N];for(i=0;iN;i++)c[i]=newdouble[8];srand((unsignedint)time(NULL));for(i=0;iN;i++){n=rand()%100+1;fun(a,n);for(j=0;j8;j++){b[i][j]=a[j];a[j]=0;}}cout初始种群如下:endl;for(i=0;iN;i++){—16—for(j=7;j=0;j--)coutb[i][j];coutendl;}coutendl;for(i=0;iN;i++){for(j=7;j=0;j--){c[i][j]=rand()%1000*1.0/1000;}}cout随机数是:endl;for(i=0;iN;i++){for(j=7;j=0;j--)coutc[i][j];coutendl;}coutendl;for(i=0;iN;
本文标题:《遗传算法》实验指导书
链接地址:https://www.777doc.com/doc-5704481 .html