蚁群算法

本文介绍了蚁群算法的详细步骤,包括初始化城市距离矩阵、使用贪心算法和轮盘赌算法选择路径、更新信息素矩阵以寻找最优解。经过多次迭代,最终找到全局最优解。还展示了算法的源代码。
摘要由CSDN通过智能技术生成

一、 算法步骤
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] = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值