Tsp遗传算法代码非常好Word文档格式.doc

上传人:b****1 文档编号:13162506 上传时间:2022-10-07 格式:DOC 页数:10 大小:60KB
下载 相关 举报
Tsp遗传算法代码非常好Word文档格式.doc_第1页
第1页 / 共10页
Tsp遗传算法代码非常好Word文档格式.doc_第2页
第2页 / 共10页
Tsp遗传算法代码非常好Word文档格式.doc_第3页
第3页 / 共10页
Tsp遗传算法代码非常好Word文档格式.doc_第4页
第4页 / 共10页
Tsp遗传算法代码非常好Word文档格式.doc_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Tsp遗传算法代码非常好Word文档格式.doc

《Tsp遗传算法代码非常好Word文档格式.doc》由会员分享,可在线阅读,更多相关《Tsp遗传算法代码非常好Word文档格式.doc(10页珍藏版)》请在冰豆网上搜索。

Tsp遗传算法代码非常好Word文档格式.doc

兰州"

银川"

西宁"

乌鲁木齐"

合肥"

南京"

杭州"

长沙"

南昌"

武汉"

成都"

贵州"

福建"

台北"

广州"

海口"

南宁"

昆明"

拉萨"

香港"

澳门"

};

//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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1