Tsp遗传算法代码非常好Word文档格式.doc
《Tsp遗传算法代码非常好Word文档格式.doc》由会员分享,可在线阅读,更多相关《Tsp遗传算法代码非常好Word文档格式.doc(10页珍藏版)》请在冰豆网上搜索。
兰州"
银川"
西宁"
乌鲁木齐"
合肥"
南京"
杭州"
长沙"
南昌"
武汉"
成都"
贵州"
福建"
台北"
广州"
海口"
南宁"
昆明"
拉萨"
香港"
澳门"
};
//privateStringcityEnd[]=newString[34];
privateintcityNum=cityName.length;
//城市个数
privateintpopSize=50;
//种群数量
privateintmaxgens=20000;
//迭代次数
privatedoublepxover=0.8;
//交叉概率
privatedoublepmultation=0.05;
//变异概率
privatelong[][]distance=newlong[cityNum][cityNum];
privateintrange=2000;
//用于判断何时停止的数组区间
privateclassgenotype{
intcity[]=newint[cityNum];
//单个基因的城市序列
longfitness;
//该基因的适应度
doubleselectP;
//选择概率
doubleexceptp;
//期望概率
intisSelected;
//是否被选择
}
privategenotype[]citys=newgenotype[popSize];
/**
*构造函数,初始化种群
*/
publicTsp(){
for(inti=0;
i<
popSize;
i++){
citys[i]=newgenotype();
int[]num=newint[cityNum];
for(intj=0;
j<
cityNum;
j++)
num[j]=j;
inttemp=cityNum;
j++){
intr=(int)(Math.random()*temp);
citys[i].city[j]=num[r];
num[r]=num[temp-1];
temp--;
}
citys[i].fitness=0;
citys[i].selectP=0;
citys[i].exceptp=0;
citys[i].isSelected=0;
}
initDistance();
*计算每个种群每个基因个体的适应度,选择概率,期望概率,和是否被选择。
publicvoidCalAll(){
for(inti=0;
i<
i++){
CalFitness();
CalSelectP();
CalExceptP();
CalIsSelected();
*填充,将多选的填充到未选的个体当中
publicvoidpad(){
intbest=0;
intbad=0;
while(true){
while(citys[best].isSelected<
=1&
&
best<
popSize-1)
best++;
while(citys[bad].isSelected!
=0&
bad<
bad++;
for(inti=0;
i++)
citys[bad].city[i]=citys[best].city[i];
citys[best].isSelected--;
citys[bad].isSelected++;
if(best==popSize||bad==popSize)
break;
*交叉主体函数
publicvoidcrossover(){
intx;
inty;
intpop=(int)(popSize*pxover/2);
while(pop>
0){
x=(int)(Math.random()*popSize);
y=(int)(Math.random()*popSize);
executeCrossover(x,y);
//xy两个体执行交叉
pop--;
*执行交叉函数
*@param个体x
*@param个体y
*对个体x和个体y执行佳点集的交叉,从而产生下一代城市序列
privatevoidexecuteCrossover(intx,inty){
intdimension=0;
for(inti=0;
i<
if(citys[x].city[i]!
=citys[y].city[i]){
dimension++;
}
intdiffItem=0;
double[]diff=newdouble[dimension];
diff[diffItem]=citys[x].city[i];
citys[x].city[i]=-1;
citys[y].city[i]=-1;
diffItem++;
Arrays.sort(diff);
double[]temp=newdouble[dimension];
temp=gp(x,dimension);
for(intk=0;
k<
dimension;
k++)
for(intj=0;
j<
if(temp[j]==k){
doubleitem=temp[k];
temp[k]=temp[j];
temp[j]=item;
item=diff[k];
diff[k]=diff[j];
diff[j]=item;
}
inttempDimension=dimension;
inttempi=0;
while(tempDimension>
0){
if(citys[x].city[tempi]==-1){
citys[x].city[tempi]=(int)diff[dimension-tempDimension];
tempDimension--;
tempi++;
temp=gp(y,dimension);