嗯哼,上一篇博客中用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%。没有多次运行,感觉结果一般,但明显比第一版的遗传算法求解效果好很多。再接再厉~~~~

最新文章

  1. C++ 异常机制
  2. EF MySql 配置文件
  3. HTML标签显示在页面上
  4. java基础 数组15
  5. SQLServer:FUNCTION/CURSOR/PROCEDURE/TRIGGER
  6. AngularJS拦截器
  7. Windows 8.1 应用再出发 - 磁贴的更新
  8. DB2数据库性能优化介绍
  9. java collection framework
  10. 预定义变量 - PHP手册笔记
  11. 类之string类、Math类、DateTime类
  12. 编程算法 - 第一个仅仅出现一次的字符 代码(C)
  13. Linux之正则表达式
  14. md5两次加密
  15. 通过UNIX域套接字传递描述符的应用
  16. SpringMVC默认欢迎页面的问题
  17. Elastix GOIP 网关配合
  18. nginx+uwsgi+flask 服务器配置
  19. IO -阻塞,非阻塞, 同步,异步
  20. C#中NPOI操作excel之读取和写入excel数据

热门文章

  1. 2018护网杯-easy_laravel 复现
  2. 现代java开发指南系列
  3. KendoUI 自定义验证:
  4. 13.padding和margin,几种参数
  5. springcloud 之 feign的重复性调用 优化
  6. Servlet的生命周期以及线程安全问题
  7. $(formName).data(“bootstrapValidator”).getFieldElements(&#39;fieldName&#39;); 校验单个字段
  8. Javascript Events
  9. 腾讯云服务器CVM购买详细过程 选择我们需要的腾讯云服务器
  10. 联动选择通过ajax获取选择对应的数据