【优化求解】 启发式算法之函数优化分析【Matlab 183期】

一、简介

启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。
在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。
启发中的估价是用估价函数表示的,如:f(n)=g(n)+h(n);
最佳优先搜索的最广为人知的形式称为A*搜索。它把到达节点的耗散g(n)和从该节点到目标节点的消耗h(n)结合起来对节点进行评价:f(n)=g(n)+h(n)。
1 粒子群算法PSO
粒子群算法(PSO)是一种基于群体的随机优化技术。粒子群算法(PS0)首先初始化一组随机值作为粒子群,粒子以一定的速度更新当前最优粒子和最优种群(Shi和Eberhart,1999)。每次迭代,更新“个体最优”值 、“种群最优”值 和粒子速度值 ,最终得到一组较为合理的结果。粒子群算法简单易实现,然而易出现早熟等现象,以致不能全局寻优。因此其改进算法层出不穷。
2 遗传算法GA
遗传算法(GA)是模仿自然界生物进化理论发展而来的一个高度并行,自适应检测算法。遗传算法通过仿真生物个体,区别个体基因变化信息来保留高适应环境的基因特征,消除低适应环境的基因特征,以实现优化目的。遗传算法能够在数据空间进行全局寻优,而且高度的收敛。缺点就是不能有效的使用局部信息,因此需要花很长时间收敛到一个最优点。
3 人群搜索算法SOA
人群搜索算法(SOA)是对人的随机搜索行为进行分析,借助脑科学、认知科学、心理学、人工智能、多Agents系统、群体智能等的研究成果,分析研究人作为高级Agent的利己行为、利他行为、自组织聚集行为、预动行为和不确定性推理行为,并对其建模用于计算搜索方向和步长。由于SOA直接模拟人的智能搜索行为,立足传统的直接搜索算法,概念明确、清晰、易于理解,是进化算法研究领域的一种新型群体智能算法。
4 模拟退火算法SA
模拟退火算法(SA)的依据是固体物质退火过程和组合优化问题之间的相似性。物质在加热的时候,粒子间的布朗运动增强,到达一定强度后,固体物质转化为液态,这个时候再进行退火,粒子热运动减弱,并逐渐趋于有序,最后达到稳定。
5 蚁群算法ACO
蚁群算法(ACO)是由意大利学者M. Dorigo等人于20世纪90年代初期通过观察自然界中蚂蚁的觅食行为而提出的一种群体智能优化算法。蚂蚁在运动的路线上能留下信息素,在信息素浓度高的地方蚂蚁会更多,相等时间内较短路径里信息素浓度较高,因此选择较短路径的蚂蚁也随之增加,如果某条路径上走过的蚂蚁越多,后面的蚂蚁选择这条路径的概率就更大,从而导致选择短路径的蚂蚁越来越多而选择其它路径(较长路径)的蚂蚁慢慢消失,蚁群中个体之间就是通过这种信息素的交流并最终选择最优路径来搜索食物的,这就是蚁群算法的生物学背景和基本原理。
6 鱼群算法FSA
在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食。聚群及追尾行为,从而实现寻优。
在这里插入图片描述
在这里插入图片描述

二、源代码

clc,clear,close all
warning off
N = 40; % 种群个数
c1 = 2; % 粒子群参数
c2 = 2; % 粒子群参数
wmax = 0.9; % 最大权重
wmin = 0.6; % 最小权重
M = 100;    % 循环迭代步数
D = 2;      % 种群中个体个数,2个未知数
format long;
%------初始化种群的个体------------
for i=1:N
    for j=1:D
        x(i,j)=rands(1);  %随机初始化位置
        v(i,j)=rands(1);  %随机初始化速度
    end
end

%% ------先计算各个粒子的适应度----------------------
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end

pg=x(N,:);             % Pg为全局最优
for i=1:(N-1)
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end

%% ------进入主要循环------------
for t=1:M

    for j=1:N
        fv(j) = fitness(x(j,:));  % 适应度值
    end
    fvag = sum(fv)/N;   % 平均适应度值
    fmin = min(fv);     % 最小适应度值
    for i=1:N
        if fv(i) <= fvag
            w = wmin + (fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);  % 自适应权值
        else
            w = wmax;   % 权值
        end
        

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【优化求解】粒子群算法之充电站最优布局【Matlab 061期】
【优化求解】遗传算法之多旅行商问题【Matlab 062期】
【优化求解】遗传和模拟退火之三维装箱问题【Matlab 063期】
【优化求解】遗传算法之求最短路径【Matlab 064期】
【优化求解】粒子群之优化灰狼算法【Matlab 065期】
【优化求解】多目标之灰狼优化算法MOGWO 【Matlab 066期】
【优化求解】遗传算法之求解优化车辆发车间隔【Matlab 067期】
【优化求解】磷虾群算法简介【Matlab 068期】
【优化求解】差分进化算法简介【Matlab 069期】
【优化求解】约束优化之惩罚函数法简介【Matlab 070期】
【优化求解】改进灰狼算法之求解重油热解模型【Matlab 072期】
【优化求解】蚁群算法之配电网故障定位【Matlab 073期】
【优化求解】遗传算法之求解岛屿物资补给优化问题【Matlab 137期】
【优化求解】基于matlab冠状病毒群体免疫优化算法(CHIO)【Matlab 138期】
【优化求解】基于matlab之金鹰优化求解算法(GEO)【Matlab 139期】
【优化求解】基于GUI界面之BP神经网络优化求解【Matlab 179期】
【优化求解】基于GUI界面之遗传算法优化求解【Matlab 180期】
【优化求解】基于GUI界面之蚁群算法优化求解【Matlab 181期】
【优化求解】 免疫算法之数值逼近优化分析【Matlab 182期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/113751782