嗯哼,上一篇博客中用Java实现了遗传算法求解TSP(Java版GA_TSP(我的第一个Java程序)),但明显求解效果不太好,都没太好意思贴出具体的结果,今天捣腾了下,对算法做了一些小改进,求解效果也稍微好了点。总算是能见人了,具体改进如下:

  (1)    选择操作由原先的单一轮盘赌策略(Roulette Strategy)改为轮盘赌策略 + 精英策略(Elite Strategy), 在保证解的多样性的基础上,强化集中搜索。

  (2)    在构建新种群方式上,将原先的无差别接受扰动改为不接受退化的个体。

  []选择操作是形成进行繁衍(扰动产生新解)操作的前提,注意区分上述(1)和(2)。

  下面贴干货:

 int[][] newPop = new int[PopSize][N];
//5%的精英策略
for (int p = 0; p < 0.05*PopSize; p++) {
for (int q = 0;q < N; q++) {
newPop[p][q] = BS[q];
}
}
//95%的轮盘赌策略
for (int p = (int)0.05*PopSize; p < PopSize; p++) {
double rand = Math.random();
for (int r = 0; r < PopSize; r++) {
if (rand > cusFit[r] && rand <= cusFit[r+1]) {
for (int q = 0;q < N; q++) {
newPop[p][q] = Pop[r][q];
}
}
}
} //扰动操作
for (int p = 1; p < PopSize; p++) {
double R = Math.random(); int[] S = new int[N];
for (int i = 0; i < N; i++) {
S[i] = newPop[p][i];
} int[] S0 = new int[N];
int[] S1 = new int[N];
if (R < 0.33) {
S0 = Sharking.Swap(S);
if (GA.Pop.fit(S0) < GA.Pop.fit(S)) {
System.arraycopy(S, 0, S1, 0, N);
}else {
System.arraycopy(S0, 0, S1, 0, N);
}
}else if (R > 0.67) {
S0 = Sharking.Insert(S);
if (GA.Pop.fit(S0) < GA.Pop.fit(S)) {
System.arraycopy(S, 0, S1, 0, N);
}else {
System.arraycopy(S0, 0, S1, 0, N);
}
}else {
S0 = Sharking.Flip(S);
if (GA.Pop.fit(S0) < GA.Pop.fit(S)) {
System.arraycopy(S, 0, S1, 0, N);
}else {
System.arraycopy(S0, 0, S1, 0, N);
}
}

  求解结果如下,总迭代次数为200次,有效进化次数7次,误差19.13%。没有多次运行,感觉结果一般,但明显比第一版的遗传算法求解效果好很多。再接再厉~~~~

遗传算法 | Java版GA_TSP (2)的更多相关文章

  1. 遗传算法 | Java版GA_TSP(我的第一个Java程序)

    嗯哼,第一次写博客,准确说是第一次通过文字的方式记录自己的工作,闲话少叙,技术汪的博客就该直奔技术主题(关于排版问题,会在不断写博客的过程中慢慢学习,先将就着用吧,重在技术嘛~~~). 遗传算法(Ge ...

  2. 遗传算法 | C++版GA_TSP

    嗯哼,时隔半年,再次有时间整理关于组合优化问题——旅行商问题(Traveling Salesman Problem, TSP),这次采用的是经典遗传算法(Genetic Algorithm, GA)进 ...

  3. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  4. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  5. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  6. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  7. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄

    前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...

  8. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  9. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

随机推荐

  1. kotlin查看编译后的Java代码

    java学一下kotlin,由于用的是同样的jvm,那就说明他们的字节码文件应该是一样的,那么,如果我们能看到编译后的文件,那么学的更快了. 操作 1.打开一个.kt文件 2.在Android Stu ...

  2. DB2去重的几种方法

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 例如下表:table1 用户办理套餐的记 ...

  3. 前端Json数据模拟神器mockJs使用教程

    一般项目做法: <html> <head> <script src="http://requirejs.org/docs/release/2.1.16/comm ...

  4. echarts折柱混合(图表数据与x轴对应显示)

    一天24个小时,每个小时不一定都有对应的数据,所以后台给出的数据,只有每个时间点对应的数据,比如4点,给的是112,5点的242,其他时间没有,则只显示4点,5点时候的数据,那么现在对应的时间点就是后 ...

  5. https验证新发现-老知识

    HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 可以设置https全局的域名校验规则 HttpsURLConnecti ...

  6. static int a

    static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的 详见:http://bbs.csdn.net/ ...

  7. HDU 1028 Ignatius and the Princess III伊格和公主III(AC代码)母函数

    题意: 输入一个数n,求组合成此数字可以有多少种方法,每一方法是不记录排列顺序的.用来组成的数字可以有1.2.3....n.比如n个1组成了n,一个n也组成n.这就算两种.1=1,2=1+1=2,3= ...

  8. C++ list类详解

    转自:http://blog.csdn.net/whz_zb/article/details/6831817 双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素 ...

  9. C#调用Python脚本并使用Python的第三方模块

    [转载]http://zh.5long.me/2015/dotnet-call-python/ 前言 InronPython是一种在.NET和Mono上实现的Python语言,使用InronPytho ...

  10. Cygwin 下的 自动安装工具 apt-cyg

    类似 于apt-get 或者 yum Cygwin可以在Windows下使用unix环境Bash和各种功能强大的工具,对于Linux管理员来说不想使用Linux桌面是必备的工具. Cygwin下也有类 ...