遗传算法java.docx
《遗传算法java.docx》由会员分享,可在线阅读,更多相关《遗传算法java.docx(38页珍藏版)》请在冰豆网上搜索。
遗传算法java
importjava.io.BufferedReader;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
publicclassGA{
privateChromosome[]chromosomes;
privateChromosome[]nextGeneration;
privateintN;
privateintcityNum;
privatedoublep_c_t;
privatedoublep_m_t;
privateintMAX_GEN;
privateintbestLength;
privateint[]bestTour;
privatedoublebestFitness;
privatedouble[]averageFitness;
privateint[][]distance;
privateStringfilename;
publicGA(){
N=0;
cityNum=;
p_c_t=0.9;
p_m_t=0.1;
MAX_GEN=00;
bestLength=0;
bestTour=newint[cityNum];
bestFitness=0.0;
averageFitness=newdouble[MAX_GEN];
chromosomes=newChromosome[N];
distance=newint[cityNum][cityNum];
}
/**
*ConstructorofGAclass
*@paramn种群规模
*@paramnum城市规模
*@paramg运行代数
*@paramp_c交叉率
*@paramp_m变异率
*@paramfilename数据文件名
*/
publicGA(intn,intnum,intg,doublep_c,doublep_m,Stringfilename){
this.N=n;
this.cityNum=num;
this.MAX_GEN=g;
this.p_c_t=p_c;
this.p_m_t=p_m;
bestTour=newint[cityNum];
averageFitness=newdouble[MAX_GEN];
bestFitness=0.0;
chromosomes=newChromosome[N];
nextGeneration=newChromosome[N];
distance=newint[cityNum][cityNum];
this.filename=filename;
}
publicvoidsolve()throwsIOException{
System.out.println("---------------------Startinitilization---------------------");
init();
System.out.println("---------------------Endinitilization---------------------");
System.out.println("---------------------Startevolution---------------------");
for(inti=0;iSystem.out.println("-----------Startgeneration"+i+"----------");
evolve(i);
System.out.println("-----------Endgeneration"+i+"----------");
}
System.out.println("----------packagetsp;
importjava.io.BufferedReader;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.util.Random;
publicclassTsp3{
privateintscale;//种群规模
privateintcityNum;//城市数量,染色体长度
privateintMAX_GEN;//运行代数
privatefloat[][]distance;//距离矩阵
privateintbestT;//最佳出现代数
privatefloatbestLength;//最佳长度
privateint[]bestTour;//最佳路径
//初始种群,父代种群,行数表示种群规模,一行代表一个个体,即染色体,列表示染色体基因片段
privateint[][]oldPopulation;
privateint[][]newPopulation;//新的种群,子代种群
privatefloat[]fitness;//种群适应度,表示种群中各个个体的适应度
privatefloat[]Pi;//种群中各个个体的累计概率
privatefloatPc;//交叉概率
privatefloatPm;//变异概率
privateintt;//当前代数
privateRandomrandom;
publicTsp3(){
}
/**
*constructorofGA
*
*@params
*种群规模
*@paramn
*城市数量
*@paramg
*运行代数
*@paramc
*交叉率
*@paramm
*变异率
*
**/
publicTsp3(ints,intn,intg,floatc,floatm){
scale=s;
cityNum=n;
MAX_GEN=g;
Pc=c;
Pm=m;
}
//给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
@SuppressWarnings("resource")
/**
*初始化GA算法类
*@paramfilename数据文件名,该文件存储所有城市节点坐标数据
*@throwsIOException
*/
privatevoidinit(Stringfilename)throwsIOException{
//读取数据
//int[]x;
//int[]y;
Stringstrbuff;
BufferedReaderdata=newBufferedReader(newInputStreamReader(
newFileInputStream(filename)));
distance=newfloat[cityNum][cityNum];
//x=newint[cityNum];
//y=newint[cityNum];
for(inti=0;istrbuff=data.readLine();
String[]strcol=strbuff.split("");
for(intj=0;jdistance[i][j]=Float.valueOf(strcol[j]);
System.out.println(distance[i][j]);
}
}
data.close();
bestLength=Float.MAX_VALUE;
bestTour=newint[cityNum+1];
bestT=0;
t=0;
newPopulation=newint[scale][cityNum];
oldPopulation=newint[scale][cityNum];
fitness=newfloat[scale];
Pi=newfloat[scale];
random=newRandom(System.currentTimeMillis());
/*
*for(inti=0;i*System.out.print(distance[i][j]+",");}System.out.println();}
*/
//初始化种群
}
//初始化种群
voidinitGroup(){
inti,j,k;
//Randomrandom=newRandom(System.currentTimeMillis());
for(k=0;k{
oldPopulation[k][0]=random.nextInt(65535)%cityNum;
for(i=1;i{
oldPopulation[k][i]=random.nextInt(65535)%cityNum;
for(j=0;j
if(oldPopulation[k][i]==oldPopulation[k][j]){
break;
}
}
if(j==i){
i++;
}