C#程序设计报告_第1页
C#程序设计报告_第2页
C#程序设计报告_第3页
C#程序设计报告_第4页
C#程序设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#程序设计课程报告3/15C#程序设计课程报告专业:空间信息与数字技术班级:学号:姓名:指导老师:日期:2015.02.02目录一、 题目简介 3(一) 课程题目 3(二) 程序分析 3二、 修改过程 3(一) 基础格式的修改 3(二) 系统函数的修改 4三、 源代码(C#) 4四、 运行结果 14五、 心得体会 14一、 题目简介课程题目将指定C程序改为C#程序。程序分析TSP问题(TravelSalespersonProblem,即旅行商问题或者称为中国邮递员问题),是一种,是一种NP-hard问题,此类问题用一般的算法是很大得到最优解的,所以一般需要借助一些启发式算法求解,例如遗传算法(GA),蚁群算法(ACO),微粒群算法(PSO)等等。遗传算法的概念最早是由BagleyJ.D于1967年提出的。后来Michigan大学的J.H.Holland教授于1975年开始对遗传算法(GeneticAlgorithm,GA)的机理进行系统化的研究。遗传算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理。遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制,种群经过若干代以后,总是达到最优(或近最优)的状态。本程序是利用遗传算法解决TSP问题。修改过程基础格式的修改数组格式的修改将数组的格式由C语言改为C#:定义:intcolony[N_COLONY][CITY];改为publicstaticint[,]colony=newint[N_COLONY,CITY];使用:colony[i][j]改为colony[I,j]文件输入格式的修改将文件输入的格式由C语言改为C#:using(StreamReadersr=newStreamReader(FILE_PATH)){stringline;while(sr.ReadLine()!=null){line=sr.ReadLine();string[]strcol=line.Split(newchar[]{''});cityXY[i,0]=Convert.ToInt32(strcol[1]);cityXY[i,1]=Convert.ToInt32(strcol[2]);++i;}}文件输出格式的修改将文件输出的格式由C语言改为C#:FileStreamstrme;if(!File.Exists(FILE_PATH)){strme=File.Create(FILE_PATH);}else{strme=newFileStream(FILE_PATH,FileMode.CreateNew);}StreamWriterwriter=newStreamWriter(strme);系统函数的修改rand函数修改使用random函数:Randomrand=newRandom();pos_C=rand.Next()%xCity;clock函数的修改使用DateTime,定义:publicstaticDateTimetimeStart=DateTime.Now;publicstaticDateTimetimeNow=DateTime.Now;publicstaticDateTimetimeTemp=DateTime.Now;源代码(C#)usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.IO;namespacetao{classProgram{staticstringFILE_PATH="e:\\cnc144.txt";//数据文件名publicstaticintCITY=144;publicstaticintN_COLONY=300;publicstaticintxColony=300;//##//个体数publicstaticintxCity=198;publicstaticdoubleedgeSpeed=30;//##//临界速度publicstaticdoubleprobab1=0.02;//##//变异概率publicstaticdoubleprobab2=0.05;//##//映射概率//0.04(80)0.03(50)0.015(80)0.05(50);publicstaticlongNOCHANGE=200000;//##//最大停止改变代数publicstaticlongmaxGen=300000;//##//停机代数publicstaticint[,]colony=newint[N_COLONY,CITY];publicstaticint[]colony1=newint[N_COLONY];publicstaticdouble[,]cityXY=newdouble[CITY,2];publicstaticdouble[,]city_dis=newdouble[CITY,CITY];publicstaticdouble[]dis_p=newdouble[N_COLONY];publicstaticdoublesumbest,sumTemp;publicstaticdoublespeed;publicstaticintibest;publicstaticint[]temp=newint[CITY];publicstaticlongGenNum,Ni;publicstaticDateTimetimeStart=DateTime.Now;publicstaticDateTimetimeNow=DateTime.Now;publicstaticDateTimetimeTemp=DateTime.Now;staticvoidMain(string[]args){intC1,j,k,pos_C,pos_C1;intk1,k2,l1,l2,pos_flag;doubledisChange;inti=0;init();//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//for(;;){for(j=0;j<xCity;j++)temp[j]=colony[i,j];disChange=0;pos_flag=0;Randomrand=newRandom();pos_C=rand.Next()%xCity; for(;;){if((rand.Next()/32768.0)<probab1)//内变异算子{dopos_C1=rand.Next()%xCity;while(pos_C1==pos_C);C1=colony[i,pos_C1];}else {doj=rand.Next()%xColony;while(j==i);k=position(colony1,temp[pos_C]);C1=colony[j,(k+1)%xCity];pos_C1=position(temp,C1);} if(speed>edgeSpeed&&pos_C1<pos_C+2)break;/////////////////////// if((pos_C+1)%xCity==pos_C1||(pos_C-1+xCity)%xCity==pos_C1)break; k1=temp[pos_C];k2=temp[(pos_C+1)%xCity];l1=temp[pos_C1];l2=temp[(pos_C1+1)%xCity]; disChange+=city_dis[k1,l1]+city_dis[k2,l2]-city_dis[k1,k2]-city_dis[l1,l2]; invert(pos_C,pos_C1);pos_flag++;if(pos_flag>xCity-1)break;////////////pos_C++;if(pos_C>=xCity)pos_C=0;/**********************/if(speed<edgeSpeed&&disChange<0){dis_p[i]+=disChange;disChange=0;tempTest(i);}//每有改变就计算 } if(speed>=edgeSpeed&&disChange<0) {dis_p[i]+=disChange;disChange=0;tempTest(i);}/////speed>=1500&&i++;if(i>=xColony) { Ni++;GenNum++;i=0; probab1=0.02*(1-GenNum*0.01/maxGen);//内逆转概率逐渐减小 if(speed<edgeSpeed&&(rand.Next()/32767.0<probab2))// {mapped(); probab2=0.05*(GenNum*2.0/maxGen+1);//部分交换概率逐渐增大 }if(NOCHANGE-Ni<1)LastCP();//5可改 if(GenNum>=maxGen||Ni>=NOCHANGE){Console.WriteLine("\n");printBest(GenNum,Ni);System.Environment.Exit(0);} }}}staticvoidinit(){inti=0,j,t,sign,mod;int[]array=newint[CITY];doubled;Randomrand=newRandom();using(StreamReadersr=newStreamReader(FILE_PATH)){stringline;while(sr.ReadLine()!=null){line=sr.ReadLine();string[]strcol=line.Split(newchar[]{''});cityXY[i,0]=Convert.ToInt32(strcol[1]);cityXY[i,1]=Convert.ToInt32(strcol[2]);++i;}}for(i=0;i<xCity;i++)for(j=0;j<xCity;j++){if(j>i){d=(cityXY[i,0]-cityXY[j,0])*(cityXY[i,0]-cityXY[j,0])*1.0+(cityXY[i,1]-cityXY[j,1])*(cityXY[i,1]-cityXY[j,1])*1.0;city_dis[i,j]=Math.Sqrt(d);continue;}if(j==i){city_dis[i,j]=0;continue;}if(j<i)city_dis[i,j]=city_dis[j,i];}mod=xCity;for(i=0;i<xCity;i++)array[i]=i;for(i=0;i<xColony;i++,mod=xCity)for(j=0;j<xCity;j++){sign=rand.Next()%mod;colony[i,j]=array[sign];t=array[mod-1];array[mod-1]=array[sign];array[sign]=t;mod--;if(mod==1)colony[i,++j]=array[0];}for(i=0;i<xColony;i++) /*initdis_p[]*/{dis_p[i]=0;for(j=0;j<xCity-1;j++)dis_p[i]=dis_p[i]+city_dis[colony[i,j],colony[i,j+1]];dis_p[i]=dis_p[i]+city_dis[colony[i,0],colony[i,xCity-1]];}ibest=0;sumbest=dis_p[0]; sumTemp=sumbest*5;speed=100000000;GenNum=0; Ni=0;/*initializeGunNum&Ni*/Console.WriteLine("initsuccess!!!\n");}staticvoidinvert(intpos_start,intpos_end){intj,k,t;if(pos_start<pos_end){j=pos_start+1;k=pos_end;for(;j<=k;j++,k--) {t=temp[j];temp[j]=temp[k];temp[k]=t;}}else{ if(xCity-1-pos_start<=pos_end+1) {j=pos_end;k=pos_start+1; for(;k<xCity;j--,k++) {t=temp[j];temp[j]=temp[k];temp[k]=t;} k=0; for(;k<=j;k++,j--) {t=temp[j];temp[j]=temp[k];temp[k]=t;}} else {j=pos_end;k=pos_start+1; for(;j>=0;j--,k++) {t=temp[j];temp[j]=temp[k];temp[k]=t;}j=xCity-1; for(;k<=j;k++,j--) {t=temp[j];temp[j]=temp[k];temp[k]=t;}}}}staticintposition(int[]tmp,intC){intj;for(j=0;j<xCity;j++)if(tmp[j]==C)break;return(j);}staticvoidtempTest(inti){intj;doubledt;TimeSpant;for(j=0;j<xCity;j++)colony[i,j]=temp[j];if((int)sumbest>(int)dis_p[i]){sumbest=dis_p[i];ibest=i;Ni=0;timeNow=DateTime.Now;t=timeNow-timeTemp;dt=t.TotalMilliseconds/1000.0;if(dt>0.1) {speed=(sumTemp-sumbest)/dt; sumTemp=sumbest; timeTemp=timeNow;}Console.WriteLine("\n{0}{1}{2}",sumbest,(timeNow-timeStart).TotalMilliseconds/1000.0,speed);}}staticvoidprintBest(longGenNum,longNi){inti;Console.WriteLine("\nCITY{0}\t\tN_COLONY{1}",CITY,N_COLONY);Console.WriteLine("\nmaxGen{0}\t\ttime{1}seconds",maxGen,(timeNow-timeStart).TotalMilliseconds/1000.0);Console.WriteLine("\nprobab{0}\t\tdistance{1}",probab2,sumbest);Console.WriteLine("\nGenNum{0}\t\tNochange{1}\n\n",GenNum,Ni);for(i=0;i<xCity;i++){if(i%10==0&&i!=0){Console.WriteLine("\n");}Console.WriteLine("{0}",colony[ibest,i]+1);}Console.WriteLine("\n\n");FileStreamstrme;if(!File.Exists("result198.txt")){strme=File.Create("result198.txt");}else{strme=newFileStream("result198.txt",FileMode.CreateNew);}StreamWriterwriter=newStreamWriter(strme);Console.Write("\nCITY{0}\t\tN_COLONY{1}",CITY,N_COLONY);Console.Write("\nmaxGen{0}\t\ttime{1}seconds",maxGen,(timeNow-timeStart).TotalMilliseconds/1000.0);Console.Write("\nprobab{0}\t\tdistance{1}",probab2,sumbest);Console.Write("\nGenNum{0}\t\tNochange{1}\n\n",GenNum,Ni);}staticvoidmapped(){intstart,end,i,j,k,kt,t,disPlace,kDC,kC;doubletemp_dis=0;Randomrand=newRandom();i=rand.Next()%xColony;j=rand.Next()%xColony;if(i==j)return;if(dis_p[i]<dis_p[j]){t=i;i=j;j=t;}for(k=0;k<xCity;k++)temp[k]=colony[i,k];/////////////////start=rand.Next()%xCity;end=(start+rand.Next()%180+20)%xCity;//rand()%xCity;kt=position(temp,colony[j,start]);//部分映射一二位同disPlace=kt-start;if(temp[(kt+1)%xCity]==colony[j,(start+1)%xCity]){if(start<end)for(k=start;k<=end;k++){kDC=(k+disPlace)%xCity;if(temp[kDC]==colony[j,k])continue;t=position(temp,colony[j,k]);temp[t]=temp[kDC];temp[kDC]=colony[j,k];}elsefor(k=start;k<=xCity+end;k++){kDC=(k+disPlace)%xCity;kC=k%xCity;if(temp[kDC]==colony[j,kC])continue;t=position(temp,colony[j,kC]);temp[t]=temp[kDC];temp[kDC]=colony[j,kC];}}else{if(temp[(kt-1+xCity)%xCity]==colony[j,(start+1)%xCity]){if(start<end)for(k=kt=start;k<=end;k++,kt--){kDC=(kt+xCity+disPlace)%xCity;if(temp[kDC]==colony[j,k])continue;t=position(temp,colony[j,k]);temp[t]=temp[kDC];temp[kDC]=colony[j,k];}elsefor(k=kt=start;k<=end+xCity;k++,kt--){kDC=(kt+xCity+disPlace)%xCity;kC=k%xCity;if(temp[kDC]==colony[j,kC])continue;t=position(temp,colony[j,kC]);temp[t]=temp[kDC];temp[kDC]=colony[j,kC];}}elsereturn;}for(j=0;j<xCity-1;j++)temp_dis=temp_dis+city_dis[temp[j],temp[j+1]];temp_dis=temp_dis+city_dis[temp[0],temp[xCity-1]];dis_p[i]=temp_dis;/*********/tempTest(i);}staticvoidLastCP(){inti,k,j1,j2,k1,k2,turn,length;int[]sign=newint[CITY];doubledc,temp_dis=0,change=0;Randomrand=newRandom();Console.WriteLine("+");for(k=0;k<xCity;k++)temp[k]=colony[ibest,k];for(turn=0;turn<xCity/10;turn++)//可改{for(k1=0;k1<xCity-1;k1+=rand.Next()%4+1)//rand()%9+1可改{for(i=1;i<xColony;i++){if(i==ibest)continue;for(k=0;k<xCity;k++)sign[k]=0;j1=position(colony1,temp[k1]);k2=k1;j2=j1;for(length=0;length<xCity/2;length++)//70xCity/3+10可改{k2=(++k2)%xCity;j2=(++j2)%xCity;sign[temp[k2]]=1;if(temp[k2]==colony[i,j2]&&length>1)break;//5xCity/10可改}if(temp[k2]!=colony[i,j2])continue;k=j1;dok=(k+1)%xCity;while(sign[colony[i,k]]==

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论