实 验 一
XX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:随机函数与函数调用 学号: 机台号: 同组人: 任课教师:熊 焱 实验目的: 1. 掌握随机数的生成函数 2. 熟悉函数调用的基本操作 实验内容及步骤: 内容:利用随机函数生成 [1,10] 和 [0,1] 内随机数各个; 编写数组作为参量的函数调用程序 条件:调用函数关系自己选定(如:xyxy ),数组取为实型 要求:生成随机数之后屏幕显示出来;数组、函数关系、函数值显示在屏幕上。 程序: #include . - { d[j]=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(\" %d \ } printf(\"\\n\"); for(j=0;j<5;j++) { e[j]=rand()/(RAND_MAX+1.0); printf(\" %.2f \ } printf(\"\\n\"); for(j=0;j<5;j++) { x=d[j]; y=e[j]; z=x*x+y*y*y+x*y; printf(\" %.2f \ } printf(\"\\n\"); printf(\"x*x+y*y*y+x*y\\n\"); } 实 验二 XX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:编码、解码 学号: 机台号: 同组人: 任课教师:熊 焱 - . 可修编. . - 实验目的: 1.掌握二进制数与十进制数的相互转化 2.熟悉不同划分长度下的二进制与十进制的转化操作 实验内容及步骤: 内容:将十进制数转化为指定长度下的二进制数 将二进制数转化为指定长度下的十进制数 条件:利用函数调用的方法编写程序,长度设为输入量(可调节),十进制数为单变量实型、二进制数存为数组(每个数组单元存储一位); 要求:转换结果屏幕输出。 #include . - while(x>0) { x--; sum+=a[x]*pow(2.0,x); } printf(\"%d\\n\} void main() { int m,n,x,a[100]; int i; printf(\"请输入转换的数:\\n\"); scanf(\"%d\ printf(\"请输入要转化在长度:\\n\"); scanf(\"%d\ sje(n,m); printf(\"\\n\"); printf(\"请输入转换的二进制数长度:\\n\"); scanf(\"%d\ printf(\"请输入转换的二进制数:\\n\"); for(i=x-1;i>=0;i--) scanf(\"%d\ ejs(a,x); } 实 验 三 XXXX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:初始种群 学号: 机台号: 同组人: 任课教师:熊 焱 - . 可修编. . - 实验目的: 掌握初始群体的生成过程 实验内容及步骤: 内容:生成二进制编码下的初始种群。 条件:个体X围给定,种群规模设为变量(可调节)。 要求:屏幕显示所生成的初始群体 #include . - } int x,y=0; printf(\"种群规模:\\n\"); scanf(\"%d\while(y . - 实验内容及步骤: 内容:编写二进制编码下的轮盘赌选择算子程序。 条件:延用前次实验所生成的初始种群和群体规模。 要求:屏幕显示选择算子操作后的结果。 #include } { cout<a[p]) { cout<- . 可修编. . - XXXX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:单点交叉算子 学号: 机台号: 同组人: 任课教师:熊 焱 实验目的: 掌握单点交叉算子 实验内容及步骤: 内容:编写二进制编码下的单点交叉算子程序。 条件:延用前次实验所生成的种群和群体规模。 要求:屏幕显示交叉算子操作后的结果。 #include . - { int num1,num2,shu=0,k=0; while(k!=model) { num1=rand()%(model+1); if(k==0&&num1!=0) num[k++]=num1; else { for(int i=0;i int p1,p2; p1=b[i]-1,p2=b[i+1]-1; if(c[i] >N; int *a=new int[8]; for(i=0;i<8;i++) a[i]=0; int **b; b=new int*[N]; for(i=0;i n=rand()%100+1; fun(a,n); for(j=0;j<8;j++) { b[i][j]=a[j]; a[j]=0; } } cout< } return 0; 实 验 六 XXXX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:单点变异算子 学号: 机台号: 同组人: 任课教师:熊 焱 实验目的: 掌握单点变异算子 - . 可修编. . - 实验内容及步骤: 内容:编写二进制编码下的单点变异算子程序。 条件:延用前次实验所生成的种群和群体规模。 要求:屏幕显示变异算子操作后的结果。 #include c=new double*[N]; for(i=0;i } for(j=7;j>=0;j--) cout< =0;j--) cout<- . 可修编. . - XXXX科技大学 理 学院(系) 2010 年 月 日 课名:遗传算法 班级: : 题目:综合试验 学号: 机台号: 同组人: 任课教师:熊 焱 实验目的: 1. 掌握基本遗传算法操作; 2. 针对实际问题学会利用遗传算法、选用适合的遗传参数求解。 实验内容及步骤: 内容:编写二进制编码下的基本遗传算法解决实际问题。 条件:实际求解问题可以选为实数变量的最优化问题,也可以选为10个城市的TSP(旅行商)问题,遗传参数自选。 要求:屏幕显示相关运行结果。 #include . - {1425,1369,821,1562,1041,2311,0,1420,4290,626}, {1177,1157,856,2165,1135,920,1420,0,2870,1290}, {3947,3961,3660,3995,3870,2170,4290,2870,0,4090}, {1574,1518,385,993,456,1920,626,1290,4090,0} }; int Max(int *f,int *k) { int max=f[0]; for(int i=1;i<100;i++) if(max . - { temp[ii] = so[(ii+pos2+1)%10]; } for(ii=0;ii<10;ii++) { for(jj=pos1;jj<=pos2;jj++) { if(temp[ii]==dest[jj]) { temp[ii]=100; break; } } } jj = 0; ii = 0; while(jj<10) { if(temp[jj] != 100) { temp[ii] = temp[jj]; ii++; } jj++; } for(kk=0; kk<(10-(pos2-pos1)-1); kk++) { dest[(kk+pos2+1)%10] = temp[kk]; } } void Rand_Pair(int num,int *result) //随机配对 { int r1,r2,shu=0,k=0; while(k!=num) { - . 可修编. . - r1=rand()%(num+1); if(k==0&&r1!=0) result[k++]=r1; else { for(int i=0;i jj=rand()%10; while(ii==jj) { jj=rand()%10; } trasfs=a[jj]; a[jj]=a[ii]; a[ii]=trasfs; } } void Primary_gen(int city[][10]) { int *a=new int[10]; for(int i=0;i<10;i++) a[i]=i; for(int j=99;j>=0;j--) //生成初代种群 { for(int i=9;i>=0;i--) { int n = rand()%(i+1); int trsf=a[i]; a[i]=a[n]; a[n]=trsf; city[j][i]=a[i]; } city[j][0]=a[0]; } } int main() { int recardmin[10],recardmax[10]; int *r1,*r2; int temp=10; r1=&temp; r2=&temp; int g,i,j,k; - . 可修编. . - int city[100][10]; int gen = 0; int tt=1000000,dai; int distance[100]={0}; //种群中个体总距离 double fitness[100]; //适应度 double Sum_fitness[100]={0.0}; //累计适应度 double CrossP; //随机产生的交叉概率 int rand_pair[100]; //存放随机配对的结果 double rand_pm; //随机产生的变异概率 srand((unsigned int)time(NULL)); Primary_gen(city); while(gen . - { tt=mind; dai=gen+1; } for(g=9;g>=0;g--) city[*r2][g]=recardmin[g]; cout<<\"第 \"< . - a2[j]=city[rand_pair[i+1]][j]; } int p1=-1,p2=-1; int sum1=0,sum2=0; for(g=0;g<10;g++) { sum1+=b1[g]; sum2+=b2[g]; } while(p1==p2) { p1=rand()%(9)+1; p2=rand()%(9)+1; } if(p1>p2) { int t=p1; p1=p2; p2=t; } for(k=p1;k<=p2;k++) { b1[k]=a2[k]; b2[k]=a1[k]; } convert(p1,p2,a1,b1); convert(p1,p2,a2,b2); for(j=9;j>=0;j--) { city[rand_pair[i]][j]=b1[j]; city[rand_pair[i+1]][j]=b1[j]; } for(g=0;g<10;g++) { sum1+=b1[g]; sum2+=b2[g]; - . 可修编. . - } } } for(g=0;g<10;g++) { b1[g]=0;b2[g]=0; } i=i+2; } //变异算子 int cc[10]; for(j=99;j>=0;j--) { rand_pm=rand()%1000*1.0/1000; if(rand_pm 因篇幅问题不能全部显示,请点此查看更多更全内容