1 内容介绍

风电功率预测为电网规划提供重要的依据,研究风电功率预测方法对确保电网在安全稳定运行下接纳更多的风电具有重要的意义.针对极限学习机(ELM)回归模型预测结果受输入参数影响的问题,现将粒子群优化算法(PSO)应用于ELM中,提出了一种基于粒子群优化极限学习机的风功率预测方法.该方法首先将数值天气预报信息(NWP)数据进行数据预处理,并构建出训练样本集,随后建立ELM模型,利用粒子群算法优化ELM中的输入权值和阈值,从而建立起基于NWP和PSO-ELM风功率预测模型.对华东地区3个不同装机容量的风场NWP数据进行实验.结果表明:该方法的预测精度高且稳定性能好,能够为风电场功率预测以及风电并网安全可靠性提供科学有效的参考依据.

风的随机性和波动性导致了风电功率的不平 稳性,风电场的接入影响电网的稳定运行环境[1]。 对风电场的输出功率进行精准预测,有助于电网人 员根据风电场输出功率的变化调整发电计划,减少 电网的备用容量以节约能源的消耗。因此,有效的 风电功率预测方法可保障电网的稳定经济运行。 目前,国内外研究人员做了大量的工 作,研 究 方法主要包括物理方法、统计方法以及神经网络方 法[2]。其中物理方法要求风机相关物理信息,建模 复杂且 精 度 不 稳 定。统 计 方 法 模 型 简 单、数 据 单 一,但预测的精度受时间的限制,预测时间越长精 度越低,通常应用于超短期预测。神经网络方法泛 化能力强,能够处理回归问题,适用于风功率预测。 极 限 学 习 机 (Extreme Learning Machine, ELM)是一类基于前馈神经网络的算法[3]。ELM 因结构简单、学习效率高,被用以解决回归、聚类、 分类等问题。ELM 算法的优化问题被很多学者研 究,王浩等[4]利用遗传算法优化极限学习机,并将 风电系统参数模糊化,从而提高预测模型的精度。 龙浩[5]提出了加权极限学习机方法,旨在解决样本 数据不均衡的问题。王文锦等[6]利用蜂群算 法 优 化 ELM,旨在提高模型的稳定性 能。王 宏 刚 等[7] 将蜻蜓算法(DragonflyAlgorithm,DA)分布式应 用于 ELM,优化初始化输入权重和阈值的影响,有 效提高了电能质量扰动识别率。 风电功率的预测主要基于当日的数值天气预 报信 息 (Numerical WeatherPrediction,NWP)。 NWP包括风速、风向、温度、湿度以及气压[8]。实 测 NWP数据在同一风功率下存在奇异值以及波 动的问题。关于风功率 NWP数据的预处理问题, 符杨等[9]针对 NWP数据不准确、爬坡事件频发等 原因将 NWP 数据分类,并对功率波动进 行 预 测。 杨茂等[10]利用经验模态分解对风功率数据进行分 解去噪重构,一定程度上减少了噪点对预测结果的 影响。杨家然等[11]利用模糊聚类的方法将原始信 号进行分类,采用不同的模型组合预测。 本 文 将 粒 子 群 优 化 算 法 (Particle Swarm Optimization,PSO)和 ELM 结 合,欲 提 高 传 统 ELM 预测模型的精度和稳定性能,从而 为 风 电 功 率预测技术提供新的方法。

基本理论

1.1 ELM 算法

ELM 因学习效率高被普遍应用于风电功率预测、变压器故障诊断、风机故障诊断等方面。该 算法任意赋值输入层权重和阈值,训练过程中无需改变模型参数,仅设定隐层神经元个数,便可通过最小二乘法获得输出层权重。

1.2 PSO-ELM 预测模型 如前文所述,ELM 的 初 始 输 入 权 值 和 阈 值 是 随机确 定 的,其 训 练 的 效 果 会 受 初 始 值 影 响。因 此,采用 PSO 优化 ELM 的输入权重和阈值,可避 免盲目 性 训 练 ELM 模 型。PSO 算 法 优 化 ELM 的步骤中,先 初 始 化 PSO 参 数,包括粒子群的规 模、空间维度、惯性参数w、学习因子c1 和c2、迭代 次数和最 大 速 度vmax等。PSO-ELM 预 测 模 型 是 将每个粒子对应的输入权值和阈值代入 ELM 预 测模型中,将 ELM 学习样本输出与实际输出的均 方误差(MeanSquaredError,MSE)作为 PSO 的 适应度。将粒子的当前适应度与最优适应度做对 比,若比最优适应度小,说明当前输入权值和阈值 所建立的 ELM 模型进行预测产生的均方误差较 小,则将当前适应度更新为最优适应度,将当前位 置更新为Pb,否则保持最优适应度不变。同 理 比 较适应度和全局适应 度,更 新 Gb。当 迭 代 次 数 达 到最大值或适应度达到设定值时停止算法。PSO 优化得到的最优输入权值 W 和 阈 值b 后,代 入 ELM 模型中进行预测。具体步骤如图1所示。

2 仿真代码

%% 极限学习机在回归拟合问题中的应用研究
%% 导入数据
clear all;clc
load data
% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化

% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
tic
%% 节点个数
inputnum=2;  
hiddennum=20;         
outputnum=1;
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=100;       % 进化次数  
sizepop=30;       % 种群规模
Vmax=10^(2);      % 最大速度
Vmin=-Vmax;       % 最小速度
function Y = elmpredict(P,IW,B,LW)
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
H = 1 ./ (1 + exp(-tempH));
% 计算预测输出

% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化
% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
Y = (H' * LW)';
disp(zbest)
x=zbest;%% 优化结束后种群中的最好个体
IW=x(1:inputnum*hiddennum); 
B=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum); 
%赋给网络权值和阈值
IW=reshape(IW,hiddennum,inputnum);
B=reshape(B,hiddennum,1);
%% ELM创建/训练
LW = elmtrain(IW,B,Pn_train,Tn_train,'sig');
% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化
% 训练集

% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化

% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
tic
%% 节点个数
inputnum=2;  
hiddennum=20;         
outputnum=1;
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=100;       % 进化次数  
sizepop=30;       % 种群规模
Vmax=10^(2);      % 最大速度
Vmin=-Vmax;       % 最小速度
function Y = elmpredict(P,IW,B,LW)
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
H = 1 ./ (1 + exp(-tempH));
% 计算预测输出

% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化
% 训练集

[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
%% 结果对比
result = [T_test' T_sim'];
% 均方误差
E = mse(T_sim - T_test)
% 决定系数
N = length(T_test);
R2 = (N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2))
%% 绘图
figure
plot(1:length(T_test),T_test,'r*')
hold on
plot(1:length(T_sim),T_sim,'b:o')
xlabel('测试集样本编号')
ylabel('测试集输出')
title('ELM测试集输出')
legend('期望输出','预测输出')

figure
plot(1:length(T_test),T_test-T_sim,'r-*')
xlabel('测试集样本编号')
ylabel('绝对误差')
title('ELM测试集预测误差')

function Y = elmpredict(P,IW,B,LW)
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
H = 1 ./ (1 + exp(-tempH));
% 计算预测输出
Y = (H' * LW)';

% 随机生成训练集、测试集
k = randperm(size(input,1));
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
%% 归一化

% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
tic
%% 节点个数
inputnum=2;  
hiddennum=20;         
outputnum=1;
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=100;       % 进化次数  
sizepop=30;       % 种群规模
Vmax=10^(2);      % 最大速度
Vmin=-Vmax;       % 最小速度
function Y = elmpredict(P,IW,B,LW)
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
H = 1 ./ (1 + exp(-tempH));
% 计算预测输出

%% SOTracking - Single Object Tracking
% data format
% *data format:* 1-X, 2-Y, 3-Z, 4-RANGE, 5-AZIMUTH, 6-ELEVATION, 7-DOPPLER, 
% 8-POWER, 9-POWER_VALUE, 10-TIMESTAMP_MS

%% env init
clear, clc, close
addpath(genpath('./utils'));

%% param
% path and data
result_dir = './result/';
data_dir = './data/mmWave_radar_data/';
data_item = 'SOT/';

start_frame = 1;
end_frame = 10000;
traj_dim = 2; % 2d/3d trajectory

% denoise
param_denoise.dpl_thr = 0.15;
param_denoise.loc_thr = [-40, 40, 0, 40, -5, 40];

% cluster
epsilon = 5;
MinPts = 20;
obj_count = 1;

% Kalman filter
motion_type = 'ConstantVelocity'; % 'ConstantVelocity' | 'ConstantAcceleration'
param_kf = getDefaultKFParameters(motion_type);
% param.initialEstimateError  = 1E5 * ones(1, 2);
% param.motionNoise           = [25, 10];
param.measurementNoise      = 100;

% show
% axis_range = [-5, 5, 0, 20, -2, 5];
axis_range = [-10, 10, 0, 20, -1, 5];
show_delay = 0.0;

%% denoise, cluster, KF_tracking
% ---- file info ----
datas = dir([data_dir data_item '*.txt']);
data_names = {datas.name};
data_num = length(data_names);
end_frame = min(data_num, end_frame);
if start_frame>end_frame
    error("start frame over range")
end

% ---- init ----
KF = []; % KF handle
det_loc = []; % detected location
meas_traj = NaN(start_frame-1,traj_dim); % trajectory points
kf_traj = NaN(start_frame-1,traj_dim);   % KF corrected trajectory points
bounding_box = NaN(start_frame-1,traj_dim*2); % bounding box
isDetected = false; % detected flag

figure;

for k = start_frame:end_frame
    % ---- load data
    frame=importdata([data_dir data_item data_names{k}]);
    
    % ---- denoise ----
    frame_clean = point_cloud_denoise(frame, param_denoise);
    disp(['effective points num: ' num2str(size(frame_clean,1))])
    
    %  [ToDo] TBD
    if size(frame_clean, 1) < 4
        isDetected = false;
    end

idx = DBSCAN(frame_clean(:,[1,2]),epsilon,MinPts); % DBSCAN Cluster
    
    % delete noise points cluster(idx==0)
    frame_clean(idx==0,:) = []; 
    idx(idx==0,:) = [];

%     [idx,C] = kmeans(frame_doppler(:,[1,2]),2); % K-Means Cluster

[idx, Dg] = cluster_idx_arranege(frame_clean(:,[1,2]), idx);
    disp(['cluster count:' num2str(numel(unique(idx)))])

if isempty(idx)
        isDetected = false;
    else
        isDetected = true;
    end
    
    if isDetected
        frame_obj = frame_clean(idx<=obj_count,:);

subplot(121)
        gscatter3(frame_obj(:,1),frame_obj(:,2),frame_obj(:,3),idx,[],[],10,'on')
        axis(axis_range)
        
        % calc bounding box
        rect_min = min(frame_obj(:,1:3),[],1);
        rect_max = max(frame_obj(:,1:3),[],1);
        rect_size = rect_max - rect_min;
        rect_center = calcCentroid(frame_obj(:,1:3));
        det_loc = rect_center(1:traj_dim);

% show bounding box
        plotBoundingbox(rect_min, rect_size, [0 0 1], 'obj1', k, axis_range)
    
    else
        det_loc = NaN(1,traj_dim);
    end
    
    % Kalman Filter
    [kf_loc, KF, states] = KF_step(det_loc, KF, param_kf);
    if isempty(kf_loc)
        kf_loc = NaN(1,traj_dim);
    end
    
    meas_traj(k,:) = det_loc;
    kf_traj(k,:) = kf_loc;
    
    
    % show trajectory
    subplot(122)
%     cmpTraj(meas_traj, kf_traj, 'plot', 'xlim', axis_range(1:2), 'ylim', axis_range(3:4));
    plotTraj(kf_traj, k, axis_range)

figtitle(data_item(1:end-1),'color','blue','linewidth',4,'fontsize',15);
    drawnow
    pause(show_delay)
    
end

%% save data
data_save_dir = [result_dir data_item 'ResData/'];
if ~exist(data_save_dir,'dir')
    mkdir(data_save_dir)
end
save([data_save_dir 'traj.mat'], 'meas_traj', 'kf_traj')
disp(['result data saved to: ' data_save_dir])

%% -------------------------------------------------------
%% sub functions
% get KF default parameters
function param = getDefaultKFParameters(motion_type)
    if nargin<1
        motion_type = 'ConstantVelocity';
    end
    
    param.motionModel = motion_type;
    param.initialLocation       = 'Same as first detection';
    
    if strcmp(motion_type, 'ConstantAcceleration')
      param.initialEstimateError  = 1E5 * ones(1, 3);
      param.motionNoise           = [25, 10, 1];
      param.measurementNoise      = 25;
    elseif strcmp(motion_type, 'ConstantVelocity')
      param.initialEstimateError  = 1E5 * ones(1, 2);
      param.motionNoise           = [25, 10];
      param.measurementNoise      = 25;        
    else
        error(['No assigned motion type - ' motion_type])
    end
end

function plotBoundingbox(rect_p, rect_size, clr, lgd, frame_idx, axis_range)
    plotcube(rect_size, rect_p, 0.1, clr,lgd)
    title(['Frame #' num2str(frame_idx) ' - 3D detection']);
    xlabel('X'), ylabel('Y'), zlabel('Z');
    axis(axis_range);
    view(3);
    grid on
end

function plotTraj(traj, frame_idx, axis_range)
    if size(traj, 2)==2
        plot(traj(:,1),traj(:,2),'r-o','MarkerSize',4,'LineWidth',1.5)
    elseif size(traj, 2)==3
        plot3(traj(:,1),traj(:,2),traj(:,3),'r-o','MarkerSize',4,'LineWidth',1.5)
    end
    
    title(['Frame #' num2str(frame_idx) ' - XY trajectory']);
    xlabel('X'), ylabel('Y'), zlabel('Z');
    legend('KF Traj.')
    axis(axis_range);  
    view(2);
    grid on
end

%% MOTracking - Multiple Object Tracking
% data format
% *data format:* 1-X, 2-Y, 3-Z, 4-RANGE, 5-AZIMUTH, 6-ELEVATION, 7-DOPPLER, 
% 8-POWER, 9-POWER_VALUE, 10-TIMESTAMP_MS

%% env init
clear, clc, close
addpath(genpath('./utils'));

%% param
% path and data
result_dir = './result/';
data_dir = './data/mmWave_radar_data/';
data_item = 'MOT/';

start_frame = 1;
end_frame = 10000;
traj_dim = 2; % 2d/3d trajectory 

% denoise
param_denoise.dpl_thr = 0.1;

% detection
param_det.minObjPoints = 30;
param_det.DBSCAN_epsilon = 0.3;
param_det.DBSCAN_MinPts = 30;
% param_det.max_obj_count = 2;

% Kalman filter
motion_type = 'ConstantVelocity'; % 'ConstantVelocity' | 'ConstantAcceleration'
param_kf = getDefaultKFParameters(motion_type);
param.initialEstimateError  = [200 50];
param.motionNoise           = [100 25];
param.measurementNoise      = 600;

% show
axis_range = [-5, 5, 0, 20, -2, 5];
% axis_range = [-20, 20, 0, 20, -10, 10];

%% denoise, cluster, KF_tracking
% ---- file info ----
datas = dir([data_dir data_item '*.txt']);
data_names = {datas.name};
data_num = length(data_names);
end_frame = min(data_num, end_frame);
if start_frame>end_frame
    error("start frame over range")
end

% ---- init ----
KF = []; % KF handle
tracks = initializeTracks(); % object tracks
nextId = 1; % next track id
meas_traj = NaN(start_frame-1,traj_dim); % trajectory points
% isDetected = false; % detected flag

figure;

for k = start_frame:end_frame
    % ---- load data
    frame = importdata([data_dir data_item data_names{k}]);
    
    % ---- denoise ----
    frame_clean = point_cloud_denoise(frame, param_denoise);
    disp(['clean points num: ' num2str(size(frame_clean,1))])
    
    % ---- detect ----
    [centroids, bboxes, obj_frame, obj_idx, obj_features] = getDetections(frame_clean,param_det);
    disp(['cluster count:' num2str(size(centroids,1))])
    
    % ---- track ---- 
    % predict new locations of last location (for cost calculation)
    tracks = predictNewLocationsOfTracks(tracks);

    % determine assignment of detection to tracks
    [assignments, unassignedTracks, unassignedDetections] = ...
    detectionToTrackAssignment(tracks, centroids, obj_frame, obj_idx, obj_features);

    % undate assigned tracks
    tracks = updateAssignedTracks(tracks, assignments, centroids, bboxes);
    
    % update unassigned tracks;
    tracks = updateUnassignedTracks(tracks, unassignedTracks);
    
    % update track states
    tracks = updateTrackStates(tracks);
    
    % create new tracks(tracks);
    [tracks,nextId] = createNewTracks(tracks, unassignedDetections, ...
        centroids, bboxes, obj_features, param_kf, nextId, k);

    % display track results
    showTrackingResults(obj_frame, obj_idx, tracks, k, axis_range, data_item(1:end-1))

    end

%% save data
data_save_dir = [result_dir data_item 'ResData/'];
if ~exist(data_save_dir,'dir')
    mkdir(data_save_dir)
end
save([data_save_dir 'track.mat'], 'meas_traj', 'tracks')
disp(['result data saved to: ' data_save_dir])

%% -------------------------------------------------------
%% sub functions
% get KF default parameters
function param = getDefaultKFParameters(motion_type)
    if nargin<1
        motion_type = 'ConstantVelocity';
    end
    
    param.motionModel = motion_type;
    param.initialLocation       = 'Same as first detection';
    
    if strcmp(motion_type, 'ConstantAcceleration')
      param.initialEstimateError  = 1E5 * ones(1, 3);
      param.motionNoise           = [25, 10, 1];
      param.measurementNoise      = 25;
    elseif strcmp(motion_type, 'ConstantVelocity')
      param.initialEstimateError  = 1E5 * ones(1, 2);
      param.motionNoise           = [25, 10];
      param.measurementNoise      = 25;        
    else
        error(['No assigned motion type - ' motion_type])
    end
end

% show tracking results
function showTrackingResults(obj_frame, obj_idx, tracks, frame_idx, axis_range, fig_name)
    % init
    % default bbox color
    clr = [1 0 0;
           0 1 0;
           0 0 1;
           0 1 1;
           1 0 1;
           1 1 0];
    show_delay = 0.0;
    % show 3d condition
    minVisibleCount = 5;   % minimal consecutive appearing frame count
    maxInvisibleCount = 5; % maximal consecutive disappearing frame count
    
    % get normal tracks & effect tracks
    normal_track_ind = ...
            [tracks(:).totalVisibleCount] > minVisibleCount &...
            [tracks(:).consecutiveInvisibleCount] < maxInvisibleCount &...
            strcmp([tracks(:).state],"normal"); 
        
    normalTracks = tracks(normal_track_ind);

    effect_track_ind = ...
            [tracks(:).totalVisibleCount] > minVisibleCount &...
            ~strcmp([tracks(:).state],"noise"); 
    effectTracks = tracks(effect_track_ind);
    
    clf(gcf) % clear figure before new display
    if ~ isempty(effectTracks) && ~isempty(obj_idx)
        % show 3d
        subplot(121)        
        % scatter3(obj_frame(:,1),obj_frame(:,2),obj_frame(:,3),10,'filled')
        gscatter3(obj_frame(:,1),obj_frame(:,2),obj_frame(:,3),obj_idx,0.3*ones(10,3),[],10,'off')

        for m = 1:length(normalTracks)
            plotBoundingbox(normalTracks(m).bbox(1:3), normalTracks(m).bbox(4:6), clr(normalTracks(m).id,:), ['obj' num2str(normalTracks(m).id)], axis_range)
        end
        legend
         % view(2) % 2D view for debug

        % show 2D
        subplot(122)
        hold on
        for m = 1:length(effectTracks)
            plotTraj(effectTracks(m).traj_rec(:,1:2), axis_range, ['obj' num2str(effectTracks(m).id)], clr(effectTracks(m).id,:))
        end
        hold off
        legend
        
    end
    
    % fig info
    figtitle([fig_name ' - Frame #' num2str(frame_idx)],'color','blue','linewidth',4,'fontsize',15);
    drawnow
    pause(show_delay)

end

3 运行结果

4 参考文献

[1]赵睿智, and 丁云飞. "基于粒子群优化极限学习机的风功率预测." 上海电机学院学报 22.4(2019):6.

[2]郭城, 刘新忠, and 苗宇. "基于粒子群优化极限学习机的轧制力预测." 冶金自动化 45.S01(2021):4.

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

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

【回归预测-ELM预测】基于粒子群算法PSO优化极限学习机预测附matlab代码相关推荐

  1. 【ELM预测】基于粒子群算法PSO优化极限学习机预测含Matlab源码

    1 模型 为了提高空气质量预测精度,提出一种基于粒子群算法优化极限学习机的空气质量预测模型.运用粒子群算法优化极限学习机的初始权值和偏置,在保证预测误差最小的情况下实现空气质量最优预测.选择平均绝对百 ...

  2. 【微电网优化】基于粒子群算法求解智能微电网调度问题附matlab代码

    1 简介 搭建光伏,风力发电机和储能电池的数学模型.充分考虑对蓄电池的充放电保护,制定优化调度策略.应用粒子群算法(PSO)对其优化调度模型进行求解,在算法中增加了蓄电池满充满放的限制条件,同时使系统 ...

  3. ​【预测模型】基于粒子群算法优化核极限学习机实现数据预测matlab代码

    1 简介 煤与瓦斯突出是煤矿煤炭生产过程中面临的主要动力灾害之一.研究表明,在有发生煤与瓦斯突出的矿井中,煤层均发育一定程度的构造煤,且构造煤厚度越大,瓦斯突出的危险性越严重.因此,如果能够准确预测出 ...

  4. 【多式联运】基于粒子群结合遗传算法实现陆海空多式联运问题附matlab代码

    1 简介 物流运输方式由公路.水路.空运及管道等 3 种方式组成,3 种运输方式在技术上.经济上各有长短,都有适宜的 使用范围,每种运输方式单独运用很难实现节约资源.降本增效.随着我国经济不断发展以及 ...

  5. 【无人机】基于混合粒子群算法求解无人机航迹规划问题附Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. 【图像配准】基于粒子群改进sift实现SAR图像配准附matlab代码

    1 简介 1.1 SIFT综述 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找 ...

  7. 【VRP问题】基于蚁群算法求解配送路径最短问题附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  8. 【无人机三维路径规划】基于蚁群算法实现无人机三维路径规划含Matlab代码

    ⛄ 内容介绍 随着无人机可执行任务的多样化,航迹规划成为其顺利完成任务的基本前提.针对该问题,提出了基于蚁群算法的无人机航迹规划方法.运用等效地形模拟方法,将作战区域中的敌方威胁.地形障碍等效为山峰, ...

  9. 【路径规划】基于蚁群算法求解运钞车路径规划VRPSD问题matlab代码

    1 简介 近年来,国内各大城市陆续建立了专业的金融押运企业,为银行网点的现钞运送提供服务.为了实现运钞智能化,降低银行运营成本,需要对银行现钞运送车辆路径规划提供决策支持.而银行运钞车路线规划问题是车 ...

最新文章

  1. 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
  2. 警告:攻击者利用 SonarQube 漏洞盗取国内多个机构的大量源码!
  3. Pytorch-张量相加的四种方法 / .item()用法
  4. rateLimiter令牌桶限流算法
  5. 2 引入失败_苦等2年!总投资2800万!镇江首个民国风商场,来了!
  6. 【转载】最全最详细Hadoop学习文章
  7. 人人都能看懂的 6 种限流实现方案!
  8. 力扣-830 较大分组的位置
  9. python人脸识别代码_一行Python代码搞定人脸识别
  10. 笨方法学python3 epub_Python3.5从零开始学[azw3+epub+mobi][77.37MB]
  11. Flask实现个人博客系统(附源码)
  12. 分享个解决右键没有新建TXT文档的办法
  13. ESP8266 SmartConfig一键配网
  14. linux之下载工具那些事
  15. C# 计算两条线段交点的位置
  16. [福建]福建企业的现实与渴望
  17. 树莓派教程(1)——手把手教你在无显示器的情况下使用树莓派
  18. 这几个软件和网站不容错过
  19. 网络 || 路由 || arp协议
  20. 【基于蜂窝网络的物联网开发】你需要了解的若干关于物联网卡的常规知识

热门文章

  1. AV3680A天馈线测试仪使用方式
  2. P2404 自然数拆分问题
  3. java计算机毕业设计高校教师工作量管理系统MyBatis+系统+LW文档+源码+调试部署
  4. 基于数据库的企业内部邮件系统的设计
  5. 动易Powereasy 2006 SP6升级至PowerEasy_SiterWeaver_CMS6.8 ACCESS版本纪录
  6. Markdown学习(入门级)
  7. Vmware16安装(详细)
  8. 小脚本之windows批量修改文件后缀名
  9. 京东java电话面试问题_【京东Java面试】京东电话技术面试,面试题目完全没思路。-看准网...
  10. .o0博客导读0o. 12/13/2010最后更新