【负荷预测】基于改进灰狼算法(IGWO)优化的LSSVM进行负荷预测(Matlab代码实现)

news2025/7/11 7:29:46

 📝个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

准确的电力负荷预测对电网稳定运行有着重要作用。电力负荷大小受多种关键信息影响:温度湿度、风速、日期类型、地区GDP等。然而,通常情况下难以获得所有关键信息的准确数据。因此
,若能在关键信息缺失情况下实施较为准确的电力负荷预测,则可以省去收集和处理多种数据的繁琐过程,简化电力负荷预测步骤。
现有短期电力负荷预测的研究主要分为多元时间序列分析和单一时间序列分析。多元时间序列分析考虑天气等多种关键信息数据。

本文基于改进灰狼算法(IGWO)优化的LSSVM进行负荷预测,并用matlab代码实现。

📚2 运行结果

 部分代码:

namafile = {'Hasil Simulasi IGWO 1';
    'Hasil Simulasi IGWO 2';
    'Hasil Simulasi IGWO 3';
    'Hasil Simulasi IGWO 4';
    'Hasil Simulasi IGWO 5';
    'Hasil Simulasi IGWO 6';
    'Hasil Simulasi IGWO 7';
    'Hasil Simulasi IGWO 8';
    'Hasil Simulasi IGWO 9';
    'Hasil Simulasi IGWO 10';
    'Hasil Simulasi IGWO 11';
};
% hasilsimulasi = zeros(4,30);
hasilsimulasi = zeros(8,30);
for jj = 1:25
    %% I-GWO
    starting = matriksawalhari(jj);
    hasilsimulasi = zeros(8,30);
    for k = 1:30 %% ambil data 30 kali
        %% susun data yang diregress
        barisdata = [];
        %         harilibur = [];
        % weekend = [];
        awalhari = starting;
        panjangdata = 5*7; %%5 minggu -> 4 minggu data forecast + 1 minggu input
        akhirhari = panjangdata+awalhari-1;
        for i = awalhari:akhirhari %%1:35
            barisdata = [barisdata,matriksdata(i,:)];
            %     weekend = [weekend,ones(1,24)*liburdata(i,1)];
            %             harilibur = [harilibur,ones(1,24)*liburdata(i,2)];
        end
        barisdata = barisdata';
        % weekend = weekend';
        %         harilibur = harilibur';
        %% Windowize data
        predictrange = 24*7;
        lagend = 29*24; %%7 hari input+1 output
        lagstep = 24*7;
        datatable = windowize(barisdata,1:lagstep:lagend); %%Y part might be filled by indices
        Xtraindata = datatable(:,1:end-1); %%input training
        Ytraindata = datatable(:,end); %%output training
        skala = 0;
        for ss = 2:168 %% for computing MASE
            skala = skala + abs(Ytraindata(ss) - Ytraindata(ss-1));
        end
        skala = skala/(168-1);
        % datatable = windowize(weekend,1:lagstep:lagend);
        % Xtraindata = [Xtraindata,datatable(:,1)];
        %         datatable = windowize(harilibur,1:lagstep:lagend);
        %         Xtraindata = [Xtraindata,datatable(:,1:end)];
        %% create Xtestdata and Ytestdata
        awalhari = akhirhari-27; %%
        panjangdata = 5*7; %%2 minggu -> 1 input 1 output
        akhirhari = panjangdata+awalhari-1;
        barisdata = [];
        %         harilibur = [];
        % weekend = [];
        for i = awalhari:akhirhari %% 7 dari 7 hari atau 24*7 jam
            barisdata = [barisdata,matriksdata(i,:)];
            %     weekend = [weekend,ones(1,24)*liburdata(i,1)];
            %             harilibur = [harilibur,ones(1,24)*liburdata(i,2)];
        end
        barisdata = barisdata';
        % weekend = weekend';
        %         harilibur = harilibur';
        datatable = windowize(barisdata,1:lagstep:lagend); %%Y part might be filled by indices
        Xtestdata = datatable(:,1:end-1); %%input training
        Ytestdata = datatable(:,end); %%output training
        % datatable = windowize(weekend,1:lagstep:lagend);
        % Xtestdata = [Xtestdata,datatable(:,1)];
        %         datatable = windowize(harilibur,1:lagstep:lagend);
        %         Xtestdata = [Xtestdata,datatable(:,1:end)];
        %% Start 4-fold CV tuning. Error function MAE. Optimization Method Coupled SA then Nelder-Mead Simplex Algorithm
        tic;
        [gam,sig2] = tunelssvmigwo({Xtraindata,Ytraindata,'f',[],[],'RBF_kernel'},'simplex','crossvalidatelssvm',{4,'mae'});
        waktusim = toc;
        %% Get Alpha Beta from best tuning
        [alpha,b] = trainlssvm({Xtraindata,Ytraindata,'f',gam,sig2,'RBF_kernel'});
        %% Start Prediction
        prediction = simlssvm({Xtraindata,Ytraindata,'f',gam,sig2,'RBF_kernel'},{alpha,b},Xtestdata);
        %     plot([prediction Ytestdata]);
        errorMAE = mean(abs(prediction-Ytestdata)); %Forecast error MAE
        errorMAPE = mean(abs(100*(prediction-Ytestdata)./Ytestdata)); %MAPE
        errorMASE = mean(abs((prediction-Ytestdata)./skala)); %error MASE
        [errorR,RPval] = corr(prediction,Ytestdata); %korelasi
        hasilsimulasi(:,k) = [gam;sig2;errorMAE;waktusim;errorMAPE;errorMASE;errorR^2;RPval];
    end
    %     xlswrite(char(namafile(jj)),hasilsimulasi,'GWO','B2');
    xlswrite(char(namafile(jj)),hasilsimulasi,'IGWO','B2');
    % %% GWO
    hasilsimulasi = zeros(8,30);
    for k = 1:30 %% ambil data 30 kali
        %% susun data yang diregress
        barisdata = [];
        %         harilibur = [];
        % weekend = [];
        awalhari = starting;
        panjangdata = 5*7; %%5 minggu -> 4 minggu data forecast + 1 minggu input
        akhirhari = panjangdata+awalhari-1;
        for i = awalhari:akhirhari %%1:35
            barisdata = [barisdata,matriksdata(i,:)];
            %     weekend = [weekend,ones(1,24)*liburdata(i,1)];
            %             harilibur = [harilibur,ones(1,24)*liburdata(i,2)];
        end
        barisdata = barisdata';
        % weekend = weekend';
        %         harilibur = harilibur';
        %% Windowize data
        predictrange = 24*7;
        lagend = 29*24; %%7 hari input+1 output
        lagstep = 24*7;
        datatable = windowize(barisdata,1:lagstep:lagend); %%Y part might be filled by indices
        Xtraindata = datatable(:,1:end-1); %%input training
        Ytraindata = datatable(:,end); %%output training
        skala = 0;
        for ss = 2:168 %% for computing MASE
            skala = skala + abs(Ytraindata(ss) - Ytraindata(ss-1));
        end
        skala = skala/(168-1);
        % datatable = windowize(weekend,1:lagstep:lagend);
        % Xtraindata = [Xtraindata,datatable(:,1)];
        %         datatable = windowize(harilibur,1:lagstep:lagend);
        %         Xtraindata = [Xtraindata,datatable(:,1:end)];
        %% create Xtestdata and Ytestdata
        awalhari = akhirhari-27; %%
        panjangdata = 5*7; %%2 minggu -> 1 input 1 output
        akhirhari = panjangdata+awalhari-1;
        barisdata = [];
        %         harilibur = [];
        % weekend = [];
        for i = awalhari:akhirhari %% 7 dari 7 hari atau 24*7 jam
            barisdata = [barisdata,matriksdata(i,:)];
            %     weekend = [weekend,ones(1,24)*liburdata(i,1)];
            %             harilibur = [harilibur,ones(1,24)*liburdata(i,2)];
        end
        barisdata = barisdata';
        % weekend = weekend';
        %         harilibur = harilibur';
        datatable = windowize(barisdata,1:lagstep:lagend); %%Y part might be filled by indices
        Xtestdata = datatable(:,1:end-1); %%input training
        Ytestdata = datatable(:,end); %%output training
        % datatable = windowize(weekend,1:lagstep:lagend);
        % Xtestdata = [Xtestdata,datatable(:,1)];
        %         datatable = windowize(harilibur,1:lagstep:lagend);
        %         Xtestdata = [Xtestdata,datatable(:,1:end)];
        %% Start 4-fold CV tuning. Error function MAE. Optimization Method Coupled SA then Nelder-Mead Simplex Algorithm
        tic;
        [gam,sig2] = tunelssvmgwo({Xtraindata,Ytraindata,'f',[],[],'RBF_kernel'},'simplex','crossvalidatelssvm',{4,'mae'});
        waktusim = toc;
        %% Get Alpha Beta from best tuning
        [alpha,b] = trainlssvmgwo({Xtraindata,Ytraindata,'f',gam,sig2,'RBF_kernel'});
        %% Start Prediction
        prediction = simlssvm({Xtraindata,Ytraindata,'f',gam,sig2,'RBF_kernel'},{alpha,b},Xtestdata);
        %     plot([prediction Ytestdata]);
        errorMAE = mean(abs(prediction-Ytestdata)); %Forecast error MAE
        errorMAPE = mean(abs(100*(prediction-Ytestdata)./Ytestdata)); %MAPE
        errorMASE = mean(abs((prediction-Ytestdata)./skala)); %error MASE
        [errorR,RPval] = corr(prediction,Ytestdata); %korelasi
        hasilsimulasi(:,k) = [gam;sig2;errorMAE;waktusim;errorMAPE;errorMASE;errorR^2;RPval];
    end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]刘雨薇,刘辉,陈馨凝,李侯君,邹琪骁.基于DE-GWO-LSSVM模型的用电负荷预测[J].湖北工业大学学报,2019,34(4):30-3462

[2]李威. 基于灰狼优化算法地区电网负荷预测研究[D].沈阳农业大学,2022.DOI:10.27327/d.cnki.gshnu.2022.000510.

[3]于军琪,聂己开,赵安军,侯雪妍.基于特征挖掘的ARIMA-GRU短期电力负荷预测[J].电力系统及其自动化学报,2022,34(3):91-99

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA 中Git 多次 Commit 合并为一次提交

一、背景 由于个人习惯的原因,喜欢一个功能分多次提交,导致很多提交比较零碎。 有时候经常需要将零碎的提交合并成一次,该怎么办? 可以使用 IDEA 自带的 Git 插件 将多次 Commit 合并成一次。 二、问题描述 如希望将第二次到第…

新品上市 | “电子表格软件”轻装上阵,企业报表用户的新选择

2022年11月14日,恰逢思迈特软件11周年的生日,我们更新了电子表格软件(Smartbi Spreadsheet),希望在一站式BI产品之外,更多的企业用户可以通过成熟、可控、小巧、灵活的报表工具,提升数据化管理的…

分击合进,锦江之星酒店与白玉兰酒店再领投资热潮

2022年11月11日,「山水画中游,暇享好时光」品牌品鉴会在广西桂林隆重召开。锦江酒店(中国区)旗下两大酒店品牌锦江之星酒店和白玉兰酒店携手亮相本次活动。 (品牌矩阵品鉴会活动现场) 后疫情时代&#xff…

JDBC编程的基本流程

文章目录1、创建数据源2、让代码和数据源建立连接3、操作数据库3.1 插入操作3.2 删除操作3.3 修改操作3.4 查找操作1、创建数据源 创建DataSource对象,这个对象描述了数据库服务器在哪,需要导入包javax.sql.DataSource DataSource databases new Mysq…

【第006篇】通过impdp命令导入dmp文件到Oracle11g数据库中

准备:按照dmp文件的账号密码,如 gwpc/gwpc 创建好表空间、用户等信息。 1、执行以下命令获取DATA_PUMP_DIR的值。 select * from dba_directories;2、将上图圈主的那个路径复制出来备用:/opt/oracle/app/admin/orcl/dpdump/ 3、将dmp文件放…

3.35 OrCAD中怎么产生Cadence Allegro的第一方网表?OrCAD软件输出Cadence Allegro第一方网表报错时应该怎么处理?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

从0开始搭建ELK日志收集系统

Elasticsearch elasticsearch是一个高度可扩展全文搜索和分析引擎,基于Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。 Logstash 数据收…

一周侃 | 周末随笔

前言 明天又是周一了,感慨时间过得真快,2022年只差一个月就要过去了。大家年初定的目标实现了吗【狗头】 作为一个技术类博主,我平常除了看专业书籍和论文之外,很喜欢看一些闲书,比如时政类、经济类、历史人文类、科…

linux 进程通信 C程序案例

linux 进程通信 C程序案例 编写C程序完成&#xff1a;父进程创建两个子进程&#xff0c;每个进程都在屏幕上显示自己的进程ID号&#xff0c;并在第1个子进程中加载执行一条外部命令。 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #inc…

看5G时代,“一键喊话”的大喇叭如何奏响基层治理最强音

“喂喂&#xff0c;各位居民朋友快下楼做核酸啦……” 通过广播传递最新政策、应急预警、疫情防控等信息&#xff0c;利用智能信息播报系统&#xff0c;打通基层宣讲“最后一公里”&#xff0c;已成为全国多地的常见景象。“多亏了它&#xff0c;需要紧急通知的时候&#xff0c…

Vue--》超详细教程——vue-cli脚手架的搭建与使用

目录 vue-cli vue-cli 的安装 (可能出现的问题及其解决方法) vue-cli 创建 Vue 项目 Vue项目中目录的构成 Vue项目的运行流程 Vue组件的使用 vue-cli vue-cli是Vue.js开发的标准工具。它简化了程序员基于webpack创建工程化的Vue项目的工程。其好处就是简省了程序员花费时…

Nacos——配置中心源码详解

Nacos——配置中心源码详解配置中心客户端主动获取客户端服务端客户端长轮询更新客户端1.入口2.配置文件分片处理3.配置文件处理4.本地配置文件与缓存数据的对比5.开启长轮询与服务端对比6.通知监听器7.监听回调处理服务端1.入口2.长轮询机制3.长轮询的延迟任务4.数据变更事件总…

【U8+】用友U8同一个账套使用了好多年,需要将以前年度进行分离、删除。

【问题需求】 用友U8一个账套使用了好多年了&#xff0c; 需要将以前年度进行删除&#xff0c; 但是在系统管理中&#xff0c;查看该账套只有一个年度账&#xff08;账套库&#xff09;。 例如&#xff1a; 图中002账套&#xff0c;是从2020年开始使用至2024年&#xff0c; 现在…

SpringBoot集成Spring Security——【认证流程】

一、认证流程 上图是 Spring Security 认证流程的一部分&#xff0c;下面的讲解以上图为依据。 &#xff08;1&#xff09; 用户发起表单登录请求后&#xff0c;首先进入 UsernamePasswordAuthenticationFilter&#xff1a; 在 UsernamePasswordAuthenticationFilter中根据用户…

第十四届蓝桥杯模拟赛第一期试题【Java解析】

目录 A 二进制位数 问题描述 答案提交 参考答案 解析 B 晨跑 问题描述 答案提交 参考答案 解析 C 调和级数 问题描述 答案提交 参考答案 解析 D 山谷 问题描述 答案提交 参考答案 解析 E 最小矩阵 问题描述 答案提交 答案 解析 F 核酸日期 问题描述…

香港和新加坡,谁是亚洲加密金融中心?

去新加坡&#xff0c;还是去中国香港? 对中国Web3的创业者来说&#xff0c;是一个问题。 2022年11月&#xff0c;中国香港金融科技周和新加坡金融科技周同时举办&#xff0c;将这场竞赛推向高潮。 抢人、抢钱、抢公司……中国香港和新加坡对于“加密金融中心”或者“全球We…

2、云原生微服务实践-服务开发框架设计和实践

目录 一、依赖管理 二、服务模块管理 api、svc 三、其他文件管理 1、私密配置文件 2、前端页面单页文件 四、单体仓库 mono-repo 1、单体仓库和多仓库的对比&#xff1a; 2、单体仓库优点 五、接口参数校验 六、统一异常处理 七、DTO(数据传输对象)和DMO(数据模型对…

尝试改善科研V2

参考链接&#xff1a; https://fulequn.github.io/2022/09/26/Article202209261/ https://www.xljsci.com/ https://apps.ankiweb.net/ https://www.explainpaper.com/ 1 从动机上促成科研 将科研这件事情分成准备工作、活动本身、活动的结果。 1.1 准备工作 准备工作十分简…

湖南郴州王瑞平、大衣哥、谷传民、孟文豪唱响《知心世界》主题曲

在大衣哥和谷传民对簿公堂之时&#xff0c;来自湖南郴州的王瑞平&#xff0c;准备在他们之间架起一座沟通的桥梁。众所周知&#xff0c;大衣哥和谷传民的官司&#xff0c;是因为《火火的情怀》版权&#xff0c;其实这首歌的版权&#xff0c;并不是只属于谷传民一人。 著名音乐人…

第一个springBoot maven 项目

1. env: java 11 IntelliJ IDEA 2021.3.2 (Community Edition) 2. file->new project->Maven: pom.xml 需要导入的包&#xff1a;后面三个是jdk8升级到11后&#xff0c;可能会出错&#xff0c;需要用到的包 <parent><groupId>org.springframework.boot<…