基本状态转移算法激起MATLAB实现

2021-03-10 14:29

阅读:343

2.仿生算法可能与生物的实际表现不一致,如灰狼算法中灰狼表现出规则的三头狼结构,并且三头狼持续为剩下的狼提供位置信息。这一点虽然形象,但不免想象成分过多,没有人证明狼群中存在这样三头狼确定一个目标范围(随机圆)的机制。因此,尽管这策略很像我们脑海中的一般印象里的狼群,但不如说这是作者自己用自己的想象构建了一种虚构的狼群:狼群中每一只狼都能够能够评估自己的当前得分,无间断吸收头狼信息并更新自己的位置,这显然是人类智慧的风格。因此灰狼算法可以说是套了个灰狼壳子的一种特殊设计的搜索算法,效果可能是不错的,但与实际的灰狼的智能可能没有那么相像,而且灰狼有没有智能也是一个问题。所以这是行为主义学习。

 

人工智能学派
不同的人从不同的方向研究人工智能理论, 最典型研究方法有三种:

(1) 结构主义
第一个思路是从人类大脑皮层和神经网络入手, 模仿大脑中很多神经元互相联系起来成为神经网络。模拟这个结构组成系统的结构, 试图通过使很多人工神经元组在一起的方式形成智能系统。这是神经网络的研究方法, 也可以叫做结构主义。

(2) 功能主义
第二种研究方法是想用计算机模拟人的智能。系统只要有智能的功能就可以了, 不需要理会结构, 所以也有人给它起名叫做功能主义。这种系统和知识工程密切结合, 需要专门的知识库, 对于知识的研究也最为关心。

(3) 行为主义
第三种研究方法设计出感知-动作系统,设计动作和不同具体情景匹配, 只关心系统可以做出的动作, 也被人称为行为主义。

 

可以看出,仿生算法侧重于过程,模仿一种行为,属于行为主义学习。而状态转移算法重在构建一种通解或者结构,这种结构在设计时尽量考虑所有的情形,使用时能够自适应地搭配各种子结构的比例,实现智能优化,因此属于结构主义学习。

(1)结构模拟:神经网络,联结主义(又称为仿生学 派或生理学派)的代表,其原理主要为神经网络及神经网络 间的连接机制。即模拟人的生理神经网络结构,并认为功能、 结构和智能行为是密切相关的。原理主要为神经网络及神经 网络间的连接机制与学习算法。

(2)功能模拟:符号逻辑系统,符号主义的代表。通 过分析人类认知系统所具备的功能和机能,并用计算机模 拟,实现人工智能。原理主要为物理符号系统假设和有限合 理性原理。符号主义认为人工智能源于数学逻辑,可以应用 计算机研究人的思维过程,模拟人类智能活动。发展了启发 式算法、专家系统、知识工程理论与技术,至今仍是人工智 能的主流派。

(3)行为模拟:感知-动作系统,行为主义的代表。认 为功能、结构和智能行为是不可分割的,同时认为不同的行 为表现出不同的功能和不同的控制结构。行为主义早期模拟 人在控制过程中的智能行为和作用,如对自寻优、自适应、 自校正、自组织、自学习等控制系统的研究。80 年代诞生 了智能控制和智能机器人系统。行为主义者认为智能不需要 知识,不需要表示,不需要推理;人工智能可以像人类智能 一样逐步进化(所以称为进化主义),智能行为只能在现实世 界中与周围环境交互作用而表现出来。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上面为论文理解与理论对比方面,后面为MATLAB源码中关于基本状态转移算法的一些关键部分的理解,关键理解已用中文注释出来。

initialization.m :

function  State=initialization(SE,Dim,Range)
Pop_Lb = Range(1,:);%Range的第一行,全是-5.12
Pop_Ub = Range(2,:);%Range的第二行,全是5.12
State  = rand(SE,Dim).*repmat(Pop_Ub-Pop_Lb,SE,1)+repmat(Pop_Lb,SE,1);
%State是状态集,大小等于dim*SE

STA.m  :

alpha_min = 1e-4;
alpha = alpha_max;
beta = 1;
gamma = 1;
delta = 1;
fc = 2;
% initialization
State = initialization(SE,Dim,Range);
[Best,fBest] = fitness(funfcn,State);%当前最优的解向量Best和当前最优函数值fBest
counter = 0;
% iterative process
for iter = 1:Iterations
    if alpha  10 % can be changed
            break;
        end
    else
        counter = 0;
    end
    fprintf(‘iter=%d      ObjVal=%g\n‘,iter,fBest);
    history(iter) = fBest;
    alpha = alpha/fc;
end

 rotate.m :

function [Best,fBest] = rotate(funfcn,oldBest,SE,Range,alpha,beta)

Pop_Lb=repmat(Range(1,:),SE,1);
Pop_Ub=repmat(Range(2,:),SE,1);

Best = oldBest;
fBest  = feval(funfcn,Best);
flag = 0;

State = op_rotate(Best,SE,alpha); %rotation operator
%Apply  for State > Pop_Ub or State  Pop_Ub;
State(find(changeRows)) = Pop_Ub(find(changeRows));
changeRows = State  Pop_Ub or State  Pop_Ub or State  Pop_Ub;
    State(find(changeRows)) = Pop_Ub(find(changeRows));
    changeRows = State  Pop_Ub or State 

fitness.m :

function [Best,fBest] = fitness(funfcn,State)
% calculate fitness
SE = size(State,1);
fState = zeros(SE,1);
for i = 1:SE
    fState(i) = feval(funfcn,State(i,:));
end
[fGBest, g] = min(fState);%返回最小值fGBest和其索引g
fBest = fGBest;
Best = State(g,:);%最值对应那一行的解

op_rotate.m :

function y=op_rotate(Best,SE,alpha)
n = length(Best);
y = repmat(Best‘,1,SE) + alpha*(1/n/(norm(Best)+eps))*reshape(unifrnd(-1,1,SE*n,n)*Best‘,n,SE);
y = y‘;%转置,画一下就懂,注意分清行列哪个是SE,哪个是Dim

Test_sta.m :

clear all
clc
currentFolder = pwd;
addpath(genpath(currentFolder))
% parameter setting
warning(‘off‘)
SE =  30; % degree of search enforcement
Dim = 30;% dimension
Range = repmat([-5.12;5.12],1,Dim);%range
Iterations = 1e3;% maximum number of iterations
tic
[Best,fBest,history] = STA(@Rastrigin,SE,Dim,Range,Iterations);
toc
history
semilogy(history)

 

  


评论


亲,登录后才可以留言!