灰 狼 优 化 算 法 ( G W O ) 原 理 ( 2 0 2 0 )

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

混合灰狼优化(HGWO,DE-GWO)算法matlab源码

今天学习一个比较新的优化算法,用差分进化(DE)改进原始的灰狼优化(GWO)得到的HGWO(也可以叫DE-GWO)算法。仍然以优化SVR参数为例,需要的同学可以根据需要自己修改源码。

function

[bestc,bestg,test_pre]=my_HGWO_SVR(para,input_train,output_ train,input_test,output_test)

% 参数向量parameters [n,N_iteration,beta_min,beta_max,pCR]

% n为种群规模,N_iteration为迭代次数

% beta_min 缩放因子下界 Lower Bound of Scaling Factor

% beta_max=0.8; % 缩放因子上界Upper Bound of Scaling Factor

% pCR 交叉概率 Crossover Probability

% 要求输入数据为列向量(矩阵)

%% 数据归一化

[input_train,rule1]=mapminmax(input_train');

[output_train,rule2]=mapminmax(output_train');

input_test=mapminmax('apply',input_test',rule1);

output_test=mapminmax('apply',output_test',rule2);

input_train=input_train';

output_train=output_train';

input_test=input_test';

output_test=output_test';

%% 利用差分进化-灰狼优化混合算法(DE_GWO)选择最佳的SVR 参数

nPop=para(1); % 种群规模 Population Size

MaxIt=para(2); % 最大迭代次数Maximum Number of Iterations nVar=2; % 自变量维数,此例需要优化两个参数c和g Number of Decision Variables

VarSize=[1,nVar]; % 决策变量矩阵大小 Decision Variables Matrix Size

beta_min=para(3); % 缩放因子下界 Lower Bound of Scaling Factor

beta_max=para(4); % 缩放因子上界 Upper Bound of Scaling Factor

pCR=para(5); % 交叉概率 Crossover Probability

lb=[0.01,0.01]; % 参数取值下界

ub=[100,100]; % 参数取值上界

%% 初始化

% 父代种群初始化

parent_Position=init_individual(lb,ub,nVar,nPop); % 随机初始化位置

parent_Val=zeros(nPop,1); % 目标函数值

for i=1:nPop % 遍历每个个体

parent_Val(i)=fobj(parent_Position(i,:),input_train,output_ train,input_test,output_test); % 计算个体目标函数值% 突变种群初始化

mutant_Position=init_individual(lb,ub,nVar,nPop); % 随机初始化位置

mutant_Val=zeros(nPop,1); % 目标函数值

for i=1:nPop % 遍历每个个体

mutant_Val(i)=fobj(mutant_Position(i,:),input_train,output_ train,input_test,output_test); % 计算个体目标函数值% 子代种群初始化

child_Position=init_individual(lb,ub,nVar,nPop); % 随机初始化位置

child_Val=zeros(nPop,1); % 目标函数值

for i=1:nPop % 遍历每个个体

child_Val(i)=fobj(child_Position(i,:),input_train,output_tr ain,input_test,output_test); % 计算个体目标函数值%% 确定父代种群中的Alpha,Beta,Delta狼

[~,sort_index]=sort(parent_Val); % 父代种群目标函数值排序

parent_Alpha_Position=parent_Position(sort_index(1),:); % 确定父代Alpha狼

parent_Alpha_Val=parent_Val(sort_index(1)); % 父代Alpha 狼目标函数值

parent_Beta_Position=parent_Position(sort_index(2),:); % 确定父代Beta狼

parent_Delta_Position=parent_Position(sort_index(3),:); % 确定父代Delta狼

%% 迭代开始

BestCost=zeros(1,MaxIt);

BestCost(1)=parent_Alpha_Val;

for it=1:MaxIt

a=2-it*((2)-MaxIt); % 对每一次迭代,计算相应的a值,a decreases linearly fron 2 to 0

% 更新父代个体位置

for par=1:nPop % 遍历父代个体

for var=1:nVar % 遍历每个维度

% Alpha狼Hunting

r1=rand(); % r1 is a random number in [0,1]

r2=rand(); % r2 is a random number in [0,1]

相关文档
最新文档