码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-12-22 11:58:24      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:state   str   采样   这一   不同的   推理   变量   pwd   环境   

状态转移算法是由周晓君博士等[4]于2012年正式提出的一种新颖的智能型随机性全局优化方法,它的基本思想是将最优化问题的一个解看成是一个状态, 解的迭代更新过程看成是状态转移过程, 利用现代控制理论的状态空间表达式来作为产生候选解的统一框架, 基于此框架来设计状态变换算子. 与大多数基于种群的进化算法不同, 基本的状态转移算法是一种基于个体的进化算法, 它基于给定当前解, 通过采样方式, 多次独立运行某种状态变换算子产生候选解集, 并与当前解进行比较, 迭代更新当前解,直到满足某种终止条件. 值得一提的是, 基本状态转移算法中的每种状态变换算子都能够产生具有规则形状、可控大小的几何邻域, 它设计了包括旋转变换、平移变换、伸缩变换、坐标轴搜索等不同的状态变换算子以满足全局搜索、局部搜索以及启发式搜索等功能需要, 并且以交替轮换的方式适时地使用各种不同算子, 使得状态转移算法能够以一定概
率很快找到全局最优解。
状态转移算法一种基于结构主义学习的智能优化算法,它抓住最优化算法的本质、目的和要求,以全局性、最优性、快速性、收敛性、可控性为核心结构要素,需要什么才学习什么。
 
论文部分参考以下链接:https://kns.cnki.net/kcms/detail/detail.aspxdbcode=CAPJ&dbname=CAPJLAST&filename=MOTO20191231000&v=S471vEmhvVp0AAB3vgx1oY61pgEUb56jMtkkZynKFfnoaOnX6y9ztmYSpMi7RX35
 
理解上主要存在的问题是全局搜索算子的理解,文章前面提到设计几种搜索算子,但后面涉及到具体的旋转、平移、伸缩、坐标算子时,并未提及各自的功能,当时不太理解,请教老师之后明白了全局功能是由伸缩算子实现的,体会到了设计的精妙之处:
伸 缩 变 换 (Expansion Transformation,
ET)
xk+1 = xk + γRexk,
(6)
其中, γ > 0为伸缩因子; Re ∈ Rn×n是一个其非
零元素取值服从高斯分布的随机对角矩阵. 从
理论上看, 伸缩变换能够把xk中的每个元素伸缩
到(?∞, +∞) 的范围内.
 
实际上是用正态分布来把原来的元素做一个放缩和延伸,这样就依概率达到了实轴上的每一个点。达到了全局效果,并且正态分布满足的性质(靠近均值分布集中,远离均值逐渐减少)也契合优化问题中局部与全局的关系。集中当前,探索全局。
当然,实际使用中,状态转移可根据问题调整各个算子的顺序和使用比例,需要什么才学什么,在这个意义上是优化问题的通解,而一般的仿生算法往往是根据某个具体过程去建立一个复杂的描述模型,形式比较局限,只能解决一类问题。在这个意义上,有两点理解:
1.仿生算法实际上是从大自然那里“偷”了一个特殊问题的特殊解。自然选择最终收敛到的一种生物现象,可能适用于生物的某些生存需要和自然条件,但这种解太复杂,受太多变量影响,而且不一定在因果上有什么必然性,我坚信一个观点:存在不一定合理,存在一定稳定。毕竟自然选择不是由特定环境得出特定性状,而是多种性状早已由随机性各自大量存在,适应的生,不适应的就死而已。某种生物在行为上显示出来的“智慧”,更多是一种针对当前它生存需要的一种特殊表现。而生物主观上并不具有形成这样策略的智慧。例如:灰狼知道大致的搜索捕猎,先探索再包围,跟着头狼走等等,但这并不是他们后天经过思考和实验得出的理论。而仅仅是自然选择遗留下来,保存在灰狼基因里面的一种禀赋。因此,在这个意义上面不算是真正的“智能”。
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 < alpha_min
        alpha = alpha_max;
    end
    % flag
    oldfBest = fBest;%f的best,函数值
    
    [Best,fBest] = expand(funfcn,Best,SE,Range,beta,gamma);
    
    [Best,fBest] = rotate(funfcn,Best,SE,Range,alpha,beta);
    
    [Best,fBest] = axesion(funfcn,Best,SE,Range,beta,delta);
    
    %  termination conditions
    if norm(oldfBest-fBest) < 1e-8 % 计算矩阵范数表示误差,误差可以修改
        counter = counter + 1;
        if counter > 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_Lb
changeRows = State > Pop_Ub;
State(find(changeRows)) = Pop_Ub(find(changeRows));
changeRows = State < Pop_Lb;
State(find(changeRows)) = Pop_Lb(find(changeRows));
%Apply  for State > Pop_Ub or State < Pop_Lb把超过上下界的值自动替换为上下界,这里的作用是用MATLAB控制台写实验程序理解的
[newBest,fGBest] = fitness(funfcn,State);
if fGBest < fBest
    fBest = fGBest;
    Best = newBest;
    flag = 1;
else
    flag = 0;
end

if flag ==1
    State = op_translate(oldBest,Best,SE,beta);%translation operator
    %Apply  for State > Pop_Ub or State < Pop_Lb
    changeRows = State > Pop_Ub;
    State(find(changeRows)) = Pop_Ub(find(changeRows));
    changeRows = State < Pop_Lb;
    State(find(changeRows)) = Pop_Lb(find(changeRows));
    %Apply  for State > Pop_Ub or State < Pop_Lb
    [newBest,fGBest] = fitness(funfcn,State);
    if fGBest < fBest
        fBest = fGBest;
        Best = newBest;
    end
end

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)

 

  

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

标签:state   str   采样   这一   不同的   推理   变量   pwd   环境   

原文地址:https://www.cnblogs.com/ltymaster/p/14147804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!