蚁群算法人工智能实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人工智能实验报告-

姓名:

学号:

班级:

实验时间:

'

蚁群算法

·

实验原理:

蚂蚁在觅食过程中可以找出巢穴到食物源的最短路径,为什么

(1)信息素(pheromone)

(2)正反馈现象:某一路径上走过的蚂蚁越多,则后来者选择该路径的概率就越大。

(3)挥发现象:路径上的信息素浓度会随着时间推进而逐渐衰减。

蚁群算法的缺点:

1)收敛速度慢

2)易于陷入局部最优

改进:

1)采用局部优化,设计了三种优化算子。

2)采用蚁群优化算法。

3)其它优化算法

实验内容:

旅行商问题(TSP,traveling salesman problem):

一商人去n个城市销货,所有城市走一遍再回到起点,使所走路程最短。

~

实验步骤:

算法代码:

%%蚁群算法的优化计算——旅行商问题(TSP)优化

%% 清空环境变量

|

clear all

clc

%% 导入数据

load

%% 计算城市间相互距离

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

%% 初始化参数

m = 50; % 蚂蚁数量

alpha = 1; % 信息素重要程度因子

@

beta = 5; % 启发函数重要程度因子rho = ; % 信息素挥发因子

Q = 1; % 常系数

Eta = 1./D; % 启发函数

Tau = ones(n,n); % 信息素矩阵

Table = zeros(m,n); % 路径记录表

iter = 1; % 迭代次数初值

iter_max = 200; % 最大迭代次数

Route_best = zeros(iter_max,n); % 各代最佳路径

Length_best = zeros(iter_max,1); % 各代最佳路径的长度Length_ave = zeros(iter_max,1); % 各代路径的平均长度

.

%% 迭代寻找最佳路径

while iter <= iter_max

% 随机产生各个蚂蚁的起点城市

start = zeros(m,1);

for i = 1:m

temp = randperm(n); %返回n个[0, n]间的随机元素向量 start(i) = temp(1);

end

Table(:,1) = start;

% 构建解空间

{

citys_index = 1:n; %访问1~n这n个城市

% 逐个蚂蚁路径选择

for i = 1:m

% 逐个城市路径选择

for j = 2:n %各个蚂蚁都需要访问n-1个城市

tabu = Table(i,1:(j - 1)); % 已访问的城市集合(禁忌表)

allow_index = ~ismember(citys_index,tabu); %判断citys_index中元素有没有在tabu中出现,出现用1表示,否则用0表示。

allow = citys_index(allow_index); % 待访问的城市集合

P = allow;

% 计算城市间转移概率

for k = 1:length(allow)

`

P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta;

end

P = P/sum(P);

% 轮盘赌法选择下一个访问城市

Pc = cumsum(P); %返回矩阵不同维数的累加

target_index = find(Pc >= rand); %选择下一个访问城市,往往转移概率大的城市被选中的概率也更大。

target = allow(target_index(1));

Table(i,j) = target; %已选定的下一个待访问城市

end

end

% 计算各个蚂蚁的路径距离

~

Length = zeros(m,1);

for i = 1:m

Route = Table(i,:);

for j = 1:(n - 1)

Length(i) = Length(i) + D(Route(j),Route(j + 1));

end

Length(i) = Length(i) + D(Route(n),Route(1)); %构成环

end

% 计算最短路径距离及平均距离

if iter == 1

[min_Length,min_index] = min(Length);

Length_best(iter) = min_Length;

Length_ave(iter) = mean(Length);

Route_best(iter,:) = Table(min_index,:); %Table,访问城市列表,也就是路径记录表

相关文档
最新文档