蚁群算法程序实例

这是一个使用蚁群算法解决旅行商问题(TSP)的C++程序实例,包含Oliver 30城市、Elion50城市和Elion75城市的测试数据。程序通过调整参数可以得到较好的解决方案,例如最小路径长度。程序中定义了蚁群系统类(AntColonySystem)和蚂蚁类(ACSAnt),实现了路径选择、局部和全局信息素更新规则等功能。
摘要由CSDN通过智能技术生成

#include<iostream>  

#include<math.h>  

#include<time.h>  

using namespace std;  

 

//该程序是以蚁群系统为模型写的蚁群算法程序(强调:非蚂蚁周模型),以三个著名的TSP问题为测试对象  

//通过微调参数,都可以获得较好的解  

 

/* 

//----------(1)问题一:Oliver 30 城市 TSP 问题 best_length = 423.7406; ------------------------ 

//该程序最好的结果是423.741,可运行多次获得 

//城市节点数目 

#define N 30 

//城市坐标 

double C[N][2]={ 

    {2,99},{4,50},{7,64},{13,40},{18,54},{18,40},{22,60},{24,42},{25,62},{25,38}, 

    {37,84},{41,94},{41,26},{44,35},{45,21},{54,67},{54,62},{58,35},{58,69},{62,32}, 

    {64,60},{68,58},{71,44},{71,71},{74,78},{82,7},{83,46},{83,69},{87,76},{91,38} 

}; 

//----------上面参数是固定的,下面的参数是可变的----------- 

//蚂蚁数量 

#define M 30 

//最大循环次数NcMax 

int NcMax = 500; 

//信息启发因子,期望启发式因子,全局信息素挥发参数,局部信息素挥发参数, 状态转移公式中的q0 

double alpha = 2, beta = 3, rou = 0.1, alpha1 = 0.1,  qzero = 0.01; 

//-----------问题一结束------------------------------------------------------------------------ 

*/  

 

/* 

//----------(2)问题二:Elion50 城市 TSP 问题 best_length = 427.96; ---------------------------- 

//该程序最好的结果是428.468,可运行多次获得 

//城市节点数目 

#define N 50 

//城市坐标 

double C[N][2]={ 

    {5,64}, {5,25}, {5,6}, {7,38}, {8,52}, {10,17}, 

    {12,42}, {13,13}, {16,57}, {17,33}, {17,63}, 

    {20,26}, {21,47}, {21,10}, {25,32}, {25,55}, 

    {27,68}, {27,23}, {30,48}, {30,15}, {31,62}, 

    {31,32}, {32,22}, {32,39}, {36,16}, {37,69}, 

    {37,52}, {38,46}, {39,10}, {40,30}, {42,57}, 

    {42,41}, {43,67}, {45,35}, {46,10}, {48,28}, 

    {49,49}, {51,21}, {52,33}, {52,41}, {52,64}, 

    {56,37}, {57,58}, {58,27}, {58,48}, {59,15}, 

    {61,33}, {62,42}, {62,63}, {63,69} 

}; 

//----------上面参数是固定的,下面的参数是可变的----------- 

//蚂蚁数量 

#define M 50 

//最大循环次数NcMax 

int NcMax = 1000; 

//信息启发因子,期望启发式因子,全局信息素挥发参数,局部信息素挥发参数, 状态转移公式中的q0 

double alpha = 2, beta = 4, rou = 0.1, alpha1 = 0.1,  qzero = 0.01; 

//-----------问题二结束------------------------------------------------------------------------ 

*/  

 

//----------(3)问题三:Elion75 城市 TSP 问题 best_length = 542.31;  

//该程序最好的结果是542.309,可运行多次获得   

//城市节点数目  

#define N 75  

//城市坐标  

double C[N][2]={  

{6,25}, {7,43}, {9,56}, {10,70}, {11,28},  

{12,17}, {12,38}, {15,5}, {15,14}, {15,56},  

{16,19}, {17,64}, {20,30}, {21,48}, {21,45},  

{21,36}, {22,53}, {22,22}, {26,29}, {26,13},  

{26,59}, {27,24}, {29,39}, {30,50}, {30,20},  

{30,60}, {31,76}, {33,34}, {33,44}, {35,51},  

{35,16}, {35,60}, {36,6}, {36,26}, {38,33},  

{40,37}, {40,66}, {40,60}, {40,20}, {41,46},  

{43,26}, {44,13}, {45,42}, {45,35}, {47,66},  

{48,21}, {50,30}, {50,40}, {50,50}, {50,70},  

{50,4}, {50,15}, {51,42}, {52,26}, {54,38},  

{54,10}, {55,34}, {55,45}, {55,50}, {55,65},  

{55,57}, {55,20}, {57,72}, {59,5}, {60,15},  

{62,57}, {62,48}, {62,35}, {62,24}, {64,4},  

{65,27}, {66,14}, {66,8}, {67,41}, {70,64}  

};  

//----------上面参数是固定的,下面的参数是可变的-----------  

//蚂蚁数量  

#define M 75  

//最大循

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值