基本状态转移算法激起MATLAB实现
2021-03-10 14:29
人工智能学派
不同的人从不同的方向研究人工智能理论, 最典型研究方法有三种:
(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)
上一篇:线程间通信的方式