蚁群优化算法与旅行商问题

蚁群优化算法与旅行商问题

一、蚁群算法简介

蚁群算法(ant colony optimization, ACO)

又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。
ACO当前发展趋势
●1、动态问题,在问题求解过程中,它的实例数据,例如目标函数值、决策参数、约束条件都在发生变化。
●2、随机问题,在这类问题中,由于不确定性、噪音、近似性或其他因素,人们只能得到目标函数值、决策参数值与约束条件的概率信息。
●3、多目标问题,其中使用设个多目标函数作为评估解质量的标准。

二、蚁群算法规则

环境
蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素,信息素有两种,每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。
觅食规则
在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接过去。否则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多,这样,它就朝信息素多的地方走,蚂蚁找窝的规则和上面一样,只不过它对窝的信息素做出反应,而对食物信息素没反应。
移动规则
每只蚂蚁都朝向信息素最多的方向移,并且,当周围没有信息素指引的时候,蚂蚁会按照自己原来运动的方向惯性的运动下去,并且,在运动的方向有一个随机的小的扰动。为了防止蚂蚁原地转圈,它会记住刚才走过了哪些点,如果发现要走的下一点已经在之前走过了,它就会尽量避开。
避障规则
如果蚂蚁要移动的方向有障碍物挡住,它会随机的选择另一个方向,并且有信息素指引的话,它会按照觅食的规则行为。
信息素规则
每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多,并随着它走远的距离,播撒的信息素越来越少。

三、旅行商问题思路

●构建图:构建图与问题描述图是一 致的,成份的集合C对应着点的集合(即: C=N),连接对应着边的集合(即L=4) ,且每一条边都带有-一个权值,代表点i和j之间的距离。
●约束条件:所有城市都要被访问且每个城市最多只能被访问一次。
●信息素和启发式信息: TSP问题中的信息素表示在访问城市i后直接访问城市j的期望度。启发式信息值一般与城市和城市j的距离成反比。
●解的构建:每只蚂蚁最初都从随机选择出来的城市出发,每经过一次迭代蚂蚁就向解中添加一个还没有访问过的城市。当所有城市都被蚂蚁访问过之后,解的构建就终止。

四、旅行商问题解决流程

具体实现

在具体实现上,假设对于旅行商问题而言,我们可以先定义数个固定的城市的坐标,然后分别计算彼此之间的距离,得到一个对称矩阵。
然后,我们再定义足量的蚂蚁(城市数量相同),按照相对随机的方式来选择城市的行走(但是不可以走重复的城市),并对最优路径长度进行记录。在走过之后,会对路径的信息素进行更新,包括对路径的信息素进行添加并计算路径蒸发的信息素。
将蚂蚁重新归位,然后再根据信息素的浓度,以此来寻找下一个所要到达城市,并对最优路径长度进行更新。
当整个算法的迭代次数达到了我们所要求的次数后,我们就可以停止算法,并且可以得到结论:目前找到的路径为最优路径。

AS算法对TSP的求解主要两大步骤

1、路径构建
2、信息素更新

五、旅行商和蚁群问题流程图

在这里插入图片描述

六、旅行商算法代码块(ACO.m)

%% 旅行商问题(TSP)优化
%% 清空环境变量
clear all
clc

%% 导入数据
load citys_data.mat

%% 计算城市间相互距离
fprintf('Computing Distance Matrix... \n');
n = size(citys,1);
D = zeros(n,n);
for i = 1:n
    for j = 1:n
        if i ~= j
            D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));
        else
            D(i,j) = 1e-4;      
        end
    end    
end

%% 初始化参数
fprintf('Initializing Parameters... \n');
m = 50;                              % 蚂蚁数量
alpha = 4;                           % 信息素重要程度因子
beta = 8;                            % 启发函数重要程度因子
rho = 0.5;                           % 信息素挥发因子
Q = 1;                               % 常系数
Eta = 1./D;                          % 启发函数
Tau =
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值