700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【预测模型-ELM预测】基于麻雀算法优化极限学习机预测附matlab代码

【预测模型-ELM预测】基于麻雀算法优化极限学习机预测附matlab代码

时间:2021-02-13 13:24:09

相关推荐

【预测模型-ELM预测】基于麻雀算法优化极限学习机预测附matlab代码

1 内容介绍

一种基于麻雀搜索算法优化极限学习机的风电功率预测方法,具体包括如下步骤:步骤1,确定影响风电功率的主导影响因子;步骤2,构建麻雀搜索算法优化核极限学习机预测模型,通过该模型对风电功率进行预测。本文解决了目前风电功率预测精度低,预测性能受自身参数影响较大的问题。

2 部分代码

function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)

P_percent = 0.2; % 发现者的种群规模占总种群规模的百分比

pNum = round(N*P_percent); % 发现者数量20%

SD = pNum/2; % 警戒者数量10%

ST = 0.8;% 安全阈值

lb = c.*ones(1, dim); % 下限

ub = d.*ones(1,dim); % 上限

% 初始化

for i = 1:N

% X(i, :) = lb + (ub - lb) .* rand(1, dim);

fitness(i) = fobj(X(i, :));

end

pFit = fitness;

pX = X; % 与pFit相对应的个体最佳位置

[fMin, bestI] = min(fitness); % fMin表示全局最优解

bestX = X(bestI, :);% bestX表示全局最优位置

%% 迭代寻优

for t = 1 : M

[~, sortIndex] = sort(pFit);% 排序

[fmax, B] = max(pFit);

worst = X(B, :);

%% 发现者位置更新

r2 = rand(1);

if r2 < ST

for i = 1:pNum % Equation (3)

r1 = rand(1);

X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));

X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

end

else

for i = 1:pNum

X(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);

X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

end

end

[~, bestII] = min(fitness);

bestXX = X(bestII, :);

%% 跟随者位置更新

for i = (pNum+1):N% Equation (4)

A = floor(rand(1, dim)*2)*2-1;

if i > N/2

X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);

else

X(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);

end

X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

end

%% 警戒者位置更新

c = randperm(numel(sortIndex));

b = sortIndex(c(1:SD));

for j = 1:length(b) % Equation (5)

if pFit(sortIndex(b(j))) > fMin

X(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));

else

X(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);

end

X(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);

fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));

end

for i = 1:N

% 更新个体最优

if fitness(i) < pFit(i)

pFit(i) = fitness(i);

pX(i, :) = X(i, :);

end

% 更新全局最优

if pFit(i) < fMin

fMin = pFit(i);

bestX = pX(i, :);

end

end

Convergence_curve(t) = fMin;

disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);

end

%% 边界处理

function s = Bounds(s, Lb, Ub)

% 下界

temp = s;

I = temp < Lb;

temp(I) = Lb(I);

% 上界

J = temp > Ub;

temp(J) = Ub(J);

% 更新

s = temp;

3 运行结果

​4 参考文献

[1]杨云, 王勇. 基于麻雀搜索优化深度极限学习机的入侵检测方法[J]. 微电子学与计算机, (039-006).

[2]呼梦颖, 杨霈轶, 段建东,等. 基于麻雀搜索算法优化核极限学习机的风电功率预测方法:.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机、雷达通信、无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。