【优化求解】基于matlab蚁群算法的函数优化分析【含Matlab源码 219期】

408 阅读2分钟

一、简介

1 蚁群算法的提出
蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。遗传算法在模式识别、神经网络、机器学习、工业优化控制、自适应控制、生物科学、社会科学等方面都得到应用。
2 算法的基本原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码

%% 基于蚁群算法ACO的函数优化分析
% Designed by Yu Shengwei, From SWJTU University, 2014 08 12
clc         % 清屏
clear all;  % 删除workplace变量
close all;  % 关掉显示图形窗口
warning off
tic;        % 计时开始

%% 取值范围
popmax = 5;                 % 待寻优阈值最大取值初始化
popmin = -5;                % 待寻优阈值最小取值初始化

%% 蚁群算法ACO参数初始化
Ant = 100;    % 蚂蚁数量
Times = 100; % 蚂蚁移动次数
Rou = 0.8;   % 信息素挥发系数
P0 = 0.2;    % 转移概率常数

%% 产生初始粒子和速度
for i=1:Ant
    % 随机产生一个种群
    for j = 1: 2
        pop(i,j) = (rand(1,1) * ( popmax-popmin ) + popmin );  % 初始种群个体
    end
    % 计算适应度
    fitness(i) = Fitness_ACO( pop(i,:), 'aco');   % 染色体的适应度
end

% 找最好的染色体
[bestfitness bestindex]=min(fitness); % 最大适应度值
zbest = pop(bestindex,:);             % 全局最佳
gbest = pop;                          % 个体最佳
fitnessgbest = fitness;               % 个体最佳适应度值
fitnesszbest = bestfitness;           % 全局最佳适应度值

%% 迭代寻优
for T = 1:Times   
     disp(['迭代次数:   ',num2str(T)])        % 迭代次数

    lamda = 1/T;                               % 随着迭代次数进行,蚂蚁信息素挥发参数
    [bestfitness, bestindex]=min(fitness);     % 找最好的适应度值
    ysw(T) = bestfitness;                      % 存储最好的适应度值
    for i=1:Ant
        P(T,i)=(fitness(bestindex)-fitness(i))/fitness(bestindex);  % 计算状态转移概率
    end
    % 蚂蚁个体更新
    for i=1:Ant
        if P(T,i)<P0  % 局部搜索
            temp(i,:) = pop(i,:)+(2*rand-1)*lamda;
        else          % 全局搜索
            temp(i,:) = pop(i,:)+(popmax-popmin)*(rand-0.5);
        end
        % 越界处理
        temp(i,find(temp(i,:)>popmax))=popmax;
        temp(i,find(temp(i,:)<popmin))=popmin;
        % 判断蚂蚁是否移动
        if Fitness_ACO( temp(i,:), 'aco') < Fitness_ACO(pop(i,:), 'aco')  % 判断蚂蚁是否移动
            pop(i,:) = temp(i,:);
        end

三、运行结果

在这里插入图片描述

四、备注

版本:2014a