写了半天,效率还是有点低的,以后有空再优化下:

//用次序表示法来表示个体编码
#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<time.h>
using namespace std; struct individual{
int DNA[];
int p; //1-p为可以进行杂交的概率
}; int n; //城市的数量
int dist[][]; //城市之间的距离
individual group[]; //总群,保持总群数量在10以内
individual nextGroup[]; //总群备份
int size; //总群大小
int varyP=; //变异概率(总概率为10)
int season;
#define MAX 9999 void show(int season)
{
//打印总群
cout<<"time"<<season<<":"<<endl;
for(int i=;i<=size;i++)
{
for(int j=;j<=n;j++)
{
cout<<group[i].DNA[j]<<" ";
}
cout<<MAX-group[i].p<<endl;
}
cout<<endl;
} //获取相关数据
void getInfo()
{
ifstream input("input.txt");
input>>n;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
input>>dist[i][j];
}
}
} //产生初始总群
void original()
{
//用次序表示法来表示个体编码
srand(unsigned(time()));
for(int i=;i<=size;i++)
{
group[i].DNA[]=;
for(int j=;j<=n;j++)
{
group[i].DNA[j]=rand()%(n-j+)+; //根据定义,编码的第i位为1~n-j+1的数
}
}
} //计算个体的适应度
int adaption(individual individual)
{
//城市集合的顺序排列
int *t=new int[n];
for(int i=;i<=n;i++)
{
t[i]=i;
} //根据个体的编码计算巡游城市的顺序
int *order=new int[n];
for(int i=;i<=n;i++)
{
//得到下一个要巡游的城市
order[i]=t[individual.DNA[i]];
//在t中将该城市删除
for(int j=individual.DNA[i]+;j<=n;j++)
{
t[j-]=t[j];
}
} //根据巡游的顺序计算所需要的代价
int cost=; //代价总数
cost+=dist[][order[]];
for(int i=;i<n;i++)
{
cost+=dist[order[i]][order[i+]];
}
cost+=dist[order[n]][]; return MAX-cost;
} //杂交
void hybrid(int individual1,int individual2)
{
//随机选择基因交换位置
srand(unsigned(time()));
int p=rand()%n+;//只能在长度范围内进行交换
int t;
for(int i=p;i<=n;i++)
{
t=group[individual1].DNA[i];
group[individual1].DNA[i]=group[individual2].DNA[i];
group[individual2].DNA[i]=t;
}
} //变异
void vary(int individual)
{
//随机选择一个基因变异位置
srand(unsigned(time()));
int p=rand()%(n-)+;//只能在长度范围内变异
group[individual].DNA[p]=rand()%(n-p+)+;
} //选择接下来进行杂交的个体
void choose()
{
int total=; //代价总和
for(int i=;i<=n;i++)
{
total+=group[i].p;
} //根据概率选择n个个体
srand(unsigned(time()));
for(int i=;i<=n;i++)
{
for(int j=,p=,pointer=rand()%total+;j<=n;j++)
{
p+=group[j].p;
if(p>=pointer)
{
nextGroup[i]=group[j];
break;
}
}
} //将下一代总群作为当前总群
for(int i=;i<=n;i++)
{
group[i]=nextGroup[i];
}
} //美丽的大自然
void nature()
{
srand(unsigned(time())); //输入种群大小
cout<<"please input the size of the group:";
cin>>size;
//输入将进行的杂次数
cout<<"input the time:";
cin>>season; //获取大自然的信息
getInfo();
//初始化第一代
original(); for(int i=;i<=season;i++)
{//在时间限内发生的事
show(i);
for(int j=;j<size;j++)
{
//第 j 个个体和第 j+1 个个体进行杂交
hybrid(j,j+); //有一定的几率个体会发生变异
int p=rand()%+;
if(p>=varyP) vary(j); //计算个体被选中的概率
group[j].p=adaption(group[j]); //选择优良的个体
choose();
}
}
show(season);
} void main()
{
nature();
system("pause");
}

TSP问题 遗传算法 智能优化算法的更多相关文章

  1. 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

  2. 智能优化算法对TSP问题的求解研究

    要求: TSP 算法(Traveling Salesman Problem)是指给定 n 个城市和各个城市之间的距离,要 求确定一条经过各个城市当且仅当一次的最短路径,它是一种典型的优化组合问题,其最 ...

  3. 群智能优化算法-测试函数matlab源码

    群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%% ...

  4. 【优化算法】遗传算法GA求解混合流水车间调度问题(附C++代码)

    00 前言 各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵.于是,今天我们带来了一个神奇的优化算法--遗传算法! 它的优点包括但不限于: 遗传算法对所求解的优化问题没有太多的 ...

  5. 最优化算法——常见优化算法分类及总结

    之前做特征选择,实现过基于群智能算法进行最优化的搜索,看过一些群智能优化算法的论文,在此做一下总结. 在生活或者工作中存在各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成 ...

  6. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  7. 粒子群优化算法及其java实现

    憋了两周终于把开题报告憋出来了,再一次证明自己不适合搞学术,哎--,花了点时间把报告中提到的粒子群算法看了看,看了些资料,用java跑起来. 算法简介 粒子群算法最先由Barnhart博士和Kenne ...

  8. 【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解

    01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(co ...

  9. ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)

    ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...

随机推荐

  1. Ubuntu 14.04 待机死机问题原来是自己改了这个配置

    使用专有驱动没问题.使用开源驱动就会死机.驱动还是厂商的好@@

  2. JavaScript 面向对象(一)

    参考:http://www.iteye.com/topic/1123555

  3. AngularJS Front-End App with Cloud Storage Tutorial Part 1: Building a Minimal App in Seven Steps

    原文 : http://www.codeproject.com/Articles/1027709/AngularJS-Front-End-App-with-Cloud-Storage-Tutoria ...

  4. docker私有仓库搭建(ubuntu 14.04和centos7)

    最近是在做一个关于docker云化的项目,马上就要开始实战.下午先做了一个私有仓库搭建的实验,先大概做个笔记,有兴趣的蛮看一下吧. 先在所有机子上都安装上docker,我的是两台ubuntu,分别是1 ...

  5. 如何把一个TXT文本文件按行数分割成多个文本文件

    2011-04-27 12:00:24|  分类: 默认分类 |字号 订阅     网上有很多文本分割软件都是按字节大小来分割的,主要用于小说类的文本分割,对于比较有规则的内容按行数进行分割非常不方便 ...

  6. 关于WebAPI安全认证的问题

    之前项目遇到了一个对外提供API的问题,有些粗浅的想法,抽空记录下. 以下所讨论的都是要解决:谁有资格调用这个API的问题(谁有权限进行这个操作的问题) 为了简化思路,就拿一个查看Java班级的学生举 ...

  7. 多元线性回归----Java简单实现

    http://www.cnblogs.com/wzm-xu/p/4062266.html 多元线性回归----Java简单实现   学习Andrew N.g的机器学习课程之后的简单实现. 课程地址:h ...

  8. javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析

    问题:我们有一个需求,用js 实现一个无限极累加的函数, 形如 add(1) //=> 1; add(1)(2)  //=> 2; add(1)(2)(3) //=>  6; add ...

  9. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  10. 轻量级别的Cache和反向代理软件---Varnish

    1.Varnish描述 1.1 Varnish的结构与特点 Varnish是一个轻量级别的Cache和反向代理软件,先进的设计理念和成熟的设计框架是Varnish的主要特点: 基于内存进行缓存,重启后 ...