遗传算法 | Java版GA_TSP (2)
嗯哼,上一篇博客中用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)的更多相关文章
- 遗传算法 | Java版GA_TSP(我的第一个Java程序)
嗯哼,第一次写博客,准确说是第一次通过文字的方式记录自己的工作,闲话少叙,技术汪的博客就该直奔技术主题(关于排版问题,会在不断写博客的过程中慢慢学习,先将就着用吧,重在技术嘛~~~). 遗传算法(Ge ...
- 遗传算法 | C++版GA_TSP
嗯哼,时隔半年,再次有时间整理关于组合优化问题——旅行商问题(Traveling Salesman Problem, TSP),这次采用的是经典遗传算法(Genetic Algorithm, GA)进 ...
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- 【转载】java版打字练习软件
网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...
- Selenium关键字驱动测试框架Demo(Java版)
Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
随机推荐
- 整理:sql server 中sql语句执行顺序
SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是 ...
- P1868 饥饿的奶牛
题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有 ...
- Jquery ajax 与 lazyload的混合使用(实现图片异步加载)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Second Highest Salary
Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...
- redis空间键详解
前言 redis的空间键通知是在2.8.0版本以后加入的,客户端通过发布订阅的方式,订阅某个频道,接收通过某种方式影响redis中数据的事件. 目录: 1.空间键事件分类 2.如何启用redis的空间 ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:8.自定义传输协议
欢迎阅读我的开源项目<迷你微信>服务器)与<迷你微信>客户端 前言 在上一篇中,我们讲到了<迷你微信>服务器)的主体架构,还讲到了如何在现有功能上进行拓展,但是拓展 ...
- 域名与IP地址的联系与区别
我们也知道每一台机都有一个唯一ip地址, 特别难记,所以出现了今天的DNS(域名) 当我们的计算机想要和一个远程机器连接时,我们可以申请连接该机器ip地址下的DNS,例如:www.baidu.com. ...
- linux 命令——46 vmstat(转)
vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行 ...
- 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)
前文描述: 随着.net 推出 MVC框架以来,webform 与 mvc 的争论一直没有停止过,一直以来 mvc 的 拥护者远远高于 webform,但是webfrom的有些优势又是mvc而无法替 ...
- ios 几种快速写法
//NSString .... NSString *str1 = @"str1"; NSLog(@"str %@",str1); //NSArray NSArr ...