网站大量收购闲置独家精品文档,联系QQ:2885784924

遗传算法JAVA.docx

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
遗传算法JAVA

?java常用代码---遗传算法标签:?javadistancecalendarstringrandom算法2011-11-17 18:23?5815人阅读?评论(1)?收藏?举报?分类:?数据结构与算法实践(23)??import java.util.*;public class Tsp {?private String cityName[]={北京,上海,天津,重庆,哈尔滨,长春,沈阳,呼和浩特,石家庄,太原,济南,郑州,西安,兰州,银川,西宁,乌鲁木齐,合肥,南京,杭州,长沙,南昌,武汉,成都,贵州,福建,台北,广州,海口,南宁,昆明,拉萨,香港,澳门};//private String cityEnd[]=new String[34];private int cityNum=cityName.length; //城市个数private int popSize = 50; //种群数量private int maxgens = 20000; //迭代次数private double pxover = 0.8; //交叉概率private double pmultation = 0.05; //变异概率private long[][] distance = new long[cityNum][cityNum];private int range = 2000; //用于判断何时停止的数组区间private class genotype {int city[] = new int[cityNum]; //单个基因的城市序列long fitness; //该基因的适应度double selectP; //选择概率double exceptp; //期望概率int isSelected; //是否被选择}private genotype[] citys = new genotype[popSize];/*** 构造函数,初始化种群*/public Tsp() {for (int i = 0; i popSize; i++) {citys[i] = new genotype();int[] num = new int[cityNum];for (int j = 0; j cityNum; j++)num[j] = j;int temp = cityNum;for (int j = 0; j cityNum; j++) {int r = (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();}/*** 计算每个种群每个基因个体的适应度,选择概率,期望概率,和是否被选择。*/public void CalAll(){for( int i = 0; i popSize; i++){citys[i].fitness = 0;citys[i].selectP = 0;citys[i].exceptp = 0;citys[i].isSelected = 0;}CalFitness();CalSelectP();CalExceptP();CalIsSelected();}/*** 填充,将多选的填充到未选的个体当中*/public void pad(){int best = 0;int bad = 0;while(true){?while(citys[best].isSelected = 1 bestpopSize-1)best ++;while(citys[bad].isSelected != 0 badpopSize-1)bad ++;for(int i = 0; i cityNum; i++)citys[bad].city[i] = citys[best].city[i];citys[best].isSelected --;citys[bad].isSelected ++;bad ++;?if(best == popSize ||bad == popSize)break;}}/*** 交叉主体函数*/public void crossover() {int x;int y;int pop = (int)(popSize* pxover /2);while(pop0){x = (int)(Math.random()*popSize);y = (int)(Math.random()*popSize);execute

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档