一、 算法步骤
1 初始化城市的距离矩阵
2 用贪心算法,随机选择起点,根据信息素初始化公式初始化信息素矩阵
3 蚁群的每一只蚂蚁随机选择出发点,通过计算公式算出转移到其他城市的概率,再根据轮盘赌算法选择下一个城市,直到城市全部走完
4 根据蚂蚁所走路线的长度,使用参数公式更新信息素矩阵,并得到局部最优解
5 迭代3和4直至结果满足特定条件或设定迭代次数,得到全局最优解。
此处简化了第一步,初始化的城市的距离矩阵如下:
city[0][1] = city[1][0] = 3;
city[0][2] = city[2][0] = 1;
city[0][3] = city[3][0] = 2;
city[1][2] = city[2][1] = 5;
city[1][3] = city[3][1] = 4;
city[2][3] = city[3][2] = 2;
二、源代码
/************************************************************
//蚁群算法,可用于解决旅行商等TSP问题
//代码中注释掉很多输出流语句,原用于检查函数算法是否出现问题
//
************************************************************/
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
int city[4][4];
float imf_record[4][4];
int num_city=4;
int num_ant=3;
const int alpha=1;
const int blta=2;
const float run=0.5;
int visited[4]={
0,0,0,0};
int ant_road[3][5];
int ant_length[3]={
0};
int xth_ant=0;
int yth_city=1;
bool IsIn(int i,int j,int a,int b,int c,int d,int e )//to judge whether (i,j) belongs to Ck
{
if((i==a)&&(j==b))return true;
if((i==b&&j==c))return true;
if((i==c&&j==d))return true;
if((i==d&&j==e))return true;
return false;
}
void InitCity()//initial the distances between the cities
{
city[0][1] = city[1][0] = 3;
city[0][2] = city[2][0] = 1;
city[0][3] = city[3][0] = 2;
city[1][2] = city[2][1] = 5;
city[1][3] = city[3][1] = 4;
city[2][3] = city[3][2] =