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

一、简介

1 蚁群算法概述
蚁群算法ACO是一种新型的模拟进化算法,该算法采用蚁群在搜索食物源的过程中所体现出来的寻有能力来解决一些离散系统优化中的困难问题。应经用该方法求解了旅行商问题(TSP问题)、指派问题、调度问题等,取得了一系列较好的实验结果。
单只蚂蚁的行为极其简单,但由这样的单个简单个体所组成的蚁群群体却表现出极其复杂的行为,究其原因是因为蚂蚁个体之间通过一种称之为信息素(pheromone)的物质进行信息传递,蚂蚁在运动过程中,能够在它所过的路径上留下该物质,并以此指导自己的运动方向。蚂蚁倾向于朝着该物质强度高的方向移动。若在蚁群的运动方向上遇到障碍物,开始由于蚂蚁是均匀分布的,因此不论路径的长短,蚂蚁总是按同等概率选择各种路径。蚂蚁在运动的路线上能留下信息素,在信息素浓度高的地方蚂蚁会更多,相等时间内较短路径里信息素浓度较高,因此选择较短路径的蚂蚁也随之增加,如果某条路径上走过的蚂蚁越多,后面的蚂蚁选择这条路径的概率就更大,从而导致选择短路径的蚂蚁越来越多而选择其它路径(较长路径)的蚂蚁慢慢消失,蚁群中个体之间就是通过这种信息素的交流并最终选择最优路径来搜索食物的,这就是蚁群算法的生物学背景和基本原理。
2 蚁群算法的性能分析
它具有以下优点:
(1)较强的鲁棒性:对基本蚁群算法模型稍加修改,便可以应用于其他问题。
(2)分布式计算:蚁群算法是一种基于种群的进化算法,具有本质并行性,易于并行实现。
(3)易于与其它智能算法结合:蚁群算法很容易与多种启发式算法(粒子群算法、遗传算法等)结合,以改善算法的性能。
蚁群算法也有一些缺陷:
(1)搜索时间较长:由于蚁群中多个个体的运动是随机的,虽然通过信息的交流能够向着最优路径进化,但是当群体规模较大时,很难在短时间内从复杂无章的路径中找出一条较好的路径。
(2)容易出现停滞现象(stagnation behavior):即在搜索进行到一定程度后,所有个体所发现的解完全一样,不能对解空间进一步进行搜索,不利于发现更好的解,以至于陷入局部最优。
(3)难以处理连续空间的优化问题:由于每个蚂蚁在每个阶段所作的选择总是有限的,它要求离散的解空间,因而它对组合优化等离散优化问题很适用,而对线性规划等连续空间优化问题的求解不能直接应用。

二、源代码

%% 基于蚁群算法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

三、运行结果

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

四、备注

完整代码或者代写添加QQ1564658423
往期回顾>>>>>>
【优化求解】基于matlab粒子群优化灰狼算法【含Matlab源码 006期】
【优化求解】基于matlab多目标灰狼优化算法MOGWO 【含Matlab源码 007期】
【优化求解】基于matlab粒子群算法的充电站最优布局【含Matlab源码 012期】
【优化求解】基于matlab遗传算法的多旅行商问题【含Matlab源码 016期】
【优化求解】基于matlab遗传算法求最短路径【含Matlab源码 023期】
【优化求解】基于matlab遗传和模拟退火的三维装箱问题【含Matlab源码 031期】
【优化求解】基于matlab遗传算法求解车辆发车间隔优化问题【含Matlab源码 132期】
【优化求解】磷虾群算法【含matlab源码 133期】
【优化求解】差分进化算法【含Matlab源码 134期】
【优化求解】基于matlab约束优化之惩罚函数法【含Matlab源码 163期】
【优化求解】基于matlab改进灰狼算法求解重油热解模型【含Matlab源码 164期】
【优化求解】基于matlab蚁群算法配电网故障定位【含Matlab源码 165期】
【优化求解】基于matalb遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】
【优化求解】冠状病毒群体免疫优化算法(CHIO)【含Matlab源码 186期】
【优化求解】金鹰优化求解算法(GEO)【含Matlab源码 187期】
【多目标优化求解】基于matlab金鹰算法(MOGEO)的多目标优化求解【含Matlab源码 188期】
【优化求解】基于matlab GUI界面之BP神经网络优化求解【含Matlab源码 208期】
【优化求解】基于matlab GUI界面之遗传算法优化求解【含Matlab源码 209期】
【优化求解】 基于matlab免疫算法的数值逼近优化分析【含Matlab源码 211期】
【优化求解】 基于matlab启发式算法的函数优化分析【含Matlab源码 212期】
【优化求解】基于matalb改进的遗传算法(GA+IGA)的城市交通信号优化【含Matlab源码 213期】
【优化求解】基于matalb改进的遗传算法GA的城市交通信号优化【含Matlab源码 214期】

【优化求解】基于matalb改进的遗传算法IGA的城市交通信号优化【含Matlab源码 215期】
【优化求解】基于matlab罚函数的粒子群算法的函数寻优【含Matlab源码 216期】
【优化求解】基于matlab细菌觅食算法的函数优化分析【含Matlab源码 217期】
【优化求解】基于matlab引力搜索算法的函数优化分析【含Matlab源码 218期】

你可能感兴趣的:(matlab,优化求解)