(文章复现)基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

参考文献:

[1]高瑜,黄森,陈刘鑫等.基于改进灰狼算法的并网交流微电网经济优化调度[J].科学技术与工程, 2020,20(28):11605-11611.

[2]邓长征,冯朕,邱立等.基于混沌灰狼算法的交直流混合微网经济调度[J].电测与仪表, 2020, 57(04):99-107.

        这两篇文章不管是从模型、原理、求解方法还是算例分析上看,都非常相似,鉴于文章两篇文章的作者单位没有重合,肯定是两位不同的作者在不同的时间灵感爆发,提出了相同的idea(甚至文献1中目标函数中成本只有4项,但算例分析部分和文献2一样有5项成本),证明了学术论文的可重复性。分析表明,这两篇文章绝对没有谁照搬谁的情况,也不可能是两个人抄了同一篇英文文献,更不可能是找了同一家论文代写机构然后被坑了。

        综上所示,这篇博客就是对上面两篇不同文章中提到的一种相同的方法进行复现,以实现本人水一篇博客的目的。

1.基本原理

        交直流混合微电网运行方式分为孤岛运行方式和并网运行方式,在本次研究中主要考虑并网情况下交直流混合微电网的经济优化调度。交直流混合微电网分为交流侧和直流侧,交流侧与外部大电网互联。交流侧包含交流母线、交流微电源和交流负荷; 直流侧包含直流母线、直流微电源和直流负荷。具体结构如图 1所示。

        交直流混合微电网的主要运行方式有4种:

         ( 1) 满足交流侧和直流侧功率平衡,交流侧和直流侧的微电源相应满足交流负荷和直流负荷的供电需求;

        ( 2) 通过AC /DC 双向换流器使交流侧和直流侧功率交互,交流侧和直流侧互为补充,满足微网内交流负荷和直流负荷总的供电需求;

        ( 3) 直流侧储能系统参与微电网削峰填谷和平抑功率,当微网中微电源总出力大于负荷所需供电要求时; 储能系统充电,反之则储能系统放电;

        ( 4) 当微网中微电源和储能系统在某一时刻的出力不足以满足微网中负荷的需求时,向交流大电网购电; 反之则向大电网售电。储能系统和换流系统在以上运行方式中有重要的作用,因此在建立交直流混合微电网经济优化调度的经济模型中应考虑储能损耗和换流成本。

1.1目标函数

 

        交流微电网内器件维修保养费用 F2 为

 1.2约束条件

 

 

 

2.改进灰狼算法求解

2.1基本灰狼算法

        来自澳大利亚的研究者 Mirjalili 于2014年提出一种新型群体智能算法——灰狼算法( grey wolf optimizer,GWO) [12]。灰狼算法通过模拟灰狼狼群在捕食过程中的特征及狼群等级制度,通过灰狼对猎物不停地搜索追寻,不断更新猎物所处的位置,最终灰狼成功捕捉猎物。在 GWO 算法中,将狼群按照等级由高到低分为 α 狼、β 狼、δ 狼和其余狼群个体 ω,灰狼的等级越高,其自身适应度越好,猎物的位置则对应全局最优解。α 狼为头狼,在狼群中起领导及决策作用; β 狼为头狼候选,在狼群中反馈信息给 α 狼; δ 狼负责对 ω 狼群的统领; ω 狼对猎物实施搜寻与追捕。狼群捕食过程首先要包围猎物,灰狼需要知道自身与猎物的距离大小,然后根据自身与猎物的距离来调整自己的位置。灰狼包围猎物的数学公式为

        在狼群捕食过程中,α 狼、β 狼、δ 狼与猎物之间的距离可由式( 25) ~ 式( 27) 计算。由于 α 狼、β狼、δ 狼在狼群中等级制度,这意味着它们的适应度更好,从而离猎物的距离更近,ω 狼根据 α 狼、β 狼、 δ 狼的位置向猎物靠近,ω 狼朝向 α 狼、β 狼、δ 狼前进的方向与前进步长分别可由式( 28) ~ 式( 30) 计算。

        灰狼算法的流程图如图 2 所示。 

2.2改进灰狼算法

        均衡 GWO 的全局搜索能力和局部搜索能力,是 GWO 能否取得高寻优性能的关键因素。当| A | > 1 时,灰狼群体将扩大包围圈,以寻找更让好的猎物,此时对应于全局搜索; 当 | A | < 1 时,灰狼群体将收缩包围圈,从而对猎物完成最后的攻击行为,此时对应于局部精确搜索[13]。因此 GWO 的全局搜索能力和局部搜索能力与 | A | 的取值之间有着极大关联,另外根据式( 23) 可知 | A| 的取值也与收敛因子 a 的取值紧密相关。由于原始 GWO 的收敛因子是线性的,且收敛因子 a 从 2 线性递减至 0,这种线性递减策略不能完全体现出实际的优化搜索过程。因此,引进一种基于非线性变化的收敛因子更新公式:

        采取非线性变化的收敛因子在寻优初始阶段,a 衰减程度低,这时候,算法的全局寻优能力较强,能够搜索到更好的全局最优解;寻优末尾阶段,a 衰减程度高,这时候,算法的局部寻优能力较强,能够搜索到更好的局部最优解。这种基于非线性变化的收敛因子可以更够更好地均衡 GWO 的全局寻优能力和局部寻优能力,从而获得精度更好的解。

3.编程思路分析

3.1相关参数和决策变量定义

 1 相关参数的定义

2 决策变量的定义

3.2编程思路

        根据对文献内容的解读,可以设计下面的编程思路:

        步骤1:输入所需数据

        这一步比较简单。算例分析用到的部分数据可以从原文中找到,其他数据可以自己假设一下。然后将所有需要的数据,按照表1的定义格式输入即可。

        步骤2灰狼算法的实现

        实现基本的灰狼优化算法和改进灰狼优化算法,并使用文中提到的四个测试函数进行验证,两篇文章中对灰狼算法改进各不相同,一个是改进了收敛因子,一个是改进了初始化策略,这篇博客中的代码是将两种改进策略结合起来。以Sphere函数为例,基本灰狼优化算法和改进灰狼优化算法的对比如下(优化问题维度取10,种群数和最大迭代次数分别为200,100):

        基本灰狼算法的运行结果:

最优解:x=1.6921e-13  9.8087e-15  -1.527e-13 -3.2711e-15 -3.2045e-14 -7.4947e-14  1.5045e-14  1.6444e-14 -2.0382e-14  2.4686e-14

最优函数值=6.0224e-26

        改进灰狼算法的运行结果:

最优解:x=1.5078e-17 -1.7022e-16  1.3285e-18  3.5724e-17  2.0807e-16  3.5095e-17 -2.8155e-16    2.14e-16  1.5832e-16 -9.8643e-17

最优函数值=2.3486e-31

        仅针对Sphere函数而言,改进灰狼算法的效果要更好一些。

        步骤3将灰狼算法用于微网调度问题

        如表2所示,原文中共包含3个决策变量,都是1×24的变量,需要将其组合成一个1×72的变量,便于使用灰狼算法求解,也就意味中文中涉及的优化问题维度为72,具体变量设置如下:

 

        智能优化算法中对于约束条件的处理有很多种形式,我在代码中参考这篇文章给的罚函数法进行处理:粒子群算法求解带约束优化问题 - 知乎

        另外,如果只遵循上下限约束生成初始种群,可能导致生成的种群中大部分甚至全部的个体都是不满足约束的,因此生成种群和更新种群时,还是要满足一定规则,使得生成的种群尽可能都满足约束。

        步骤4输出运行结果

        参考文中的图表的格式,输出结果即可。

4.Matlab代码

%% 清除变量
clc
clear
close all
warning off

%% 设置种群参数
sizepop = 200;                      % 初始种群个数
dim = 10;                           % 空间维数
ger = 100;                          % 最大迭代次数
x_max = 100*ones(1,dim);            % 位置上限
x_min = -100*ones(1,dim);           % 位置下限

%% 种群初始化
pop = x_min + rand(sizepop,dim).*(x_max-x_min);     % 初始化种群
fitness = zeros(1,sizepop);                         % 所有个体的适应度
for k = 1:sizepop
    fitness(k) = Sphere(pop(k,:));
end

% 初始化Alpha、Beta、Delta狼群
[SortFitness,Index] = sort(fitness);
A_pop = pop(Index(1),:);                            % 初始化α狼群
A_fitness = SortFitness(1);                         % 初始化α狼群适应度
B_pop = pop(Index(2),:);                            % 初始化β狼群
B_fitness = SortFitness(2);                         % 初始化β狼群适应度
D_pop = pop(Index(3),:);                            % 初始化δ狼群
D_fitness = SortFitness(3);                         % 初始化δ狼群适应度
history = zeros(1,ger);                             % 历史最优适应度值
%% 迭代求最优解
iter = 1;
while iter <= ger
    a = 2 - iter*(2/ger);                           % 线性调整a的值
    for k = 1:sizepop
        % 1.根据Alpha狼群更新位置X1
        r1 = rand;
        r2 = rand;
        A1 = 2*a*r1 - a;
        C1 = 2*r2;
        D_A = abs(C1*A_pop - pop(k,:));
        X1 = A_pop - A1*D_A;
        
        % 2.根据Beta狼群更新位置X2
        r1 = rand;
        r2 = rand;
        A2 = 2*a*r1 - a;
        C2 = 2*r2;
        D_B = abs(C2*B_pop - pop(k,:));
        X2 = B_pop - A2*D_B;
        
        % 3.根据Delta狼群更新位置X3
        r1 = rand;
        r2 = rand;
        A3 = 2*a*r1 - a;
        C3 = 2*r2;
        D_D = abs(C3*D_pop - pop(k,:));
        X3 = D_pop - A3*D_D;
        
        % 4.更新后的狼群位置
        pop(k,:) = (X1+X2+X3)/3;
        
        % 修复越限的狼群位置
        pop(k,pop(k,:) > x_max) = x_max(pop(k,:) > x_max);
        pop(k,pop(k,:) < x_min) = x_max(pop(k,:) < x_min);
        
        % 更新狼群的适应度
        fitness(k) = Sphere(pop(k,:));
    end
    % 更新Alpha、Beta、Delta狼群位置
    [SortFitness,Index] = sort(fitness);
    A_pop = pop(Index(1),:);                            % 初始化α狼群
    A_fitness = SortFitness(1);                         % 初始化α狼群适应度
    B_pop = pop(Index(2),:);                            % 初始化β狼群
    B_fitness = SortFitness(2);                         % 初始化β狼群适应度
    D_pop = pop(Index(3),:);                            % 初始化δ狼群
    D_fitness = SortFitness(3);                         % 初始化δ狼群适应度
    history(iter) = A_fitness;
    iter = iter+1;
end

%% 画图
disp(['最优解:x=',num2str(A_pop)])
disp(['最优函数值=',num2str(A_fitness)])
plot(history,'linewidth',1)
ylabel('最优适应度值')
xlabel('迭代次数')
%% 适应度函数
function fitness = Sphere(pop)
fitness = sum(pop.^2);
end

        运行结果如下:

最优解:x=-2.7836e-14  1.1833e-13  2.0262e-13  1.0821e-14  -2.534e-14  6.7367e-14 -7.4143e-14 -1.6845e-13 -1.5746e-13  3.9423e-14
最优函数值=1.2135e-25

        以上仅为基本灰狼算法求解Sphere函数最优解的matlab代码(优化问题维度取10,种群数和最大迭代次数分别为200,100),完整论文复现的matlab代码可以从这个链接获取:

基于灰狼算法(GWO)的交直流混合微网经济调度matlab代码

5.运行结果分析

        文献结果和复现结果对比如下:

 

 

        GWO算法改进前后的对比,改进GWO算法险胜: 

         运行结果画成条形图稍微好看一些:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JUL 日志 - 最简单易用的Java日志框架

在正式的生产环境下是不能使用 System.out 进行日志记录的 因为 System.out 不能提供时间、线程、执行过程 等信息&#xff0c;如果要手动打印输出则会非常麻烦 而日志就帮我们把这些事给干了 接下来我们学一个最简单的日志框架 JUL JUL全称Java util Logging是java原生的日志框…

Centos7.9安装lrzsz进行文件传输---Linux工作笔记059

这里咱们lrzsz命令,需要用来进行文件传输,因为如果不安装这个命令的话,那么 传输安装包什么的就不方便因为只有少数传输工具,才支持,直接拖拽的.没有的时候就可以用这个工具,用命令来传输 直接就是: sz 文件名 就可以把文件下载下来 rz 选择一个文件, 就可以把文件上传到当…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本&#xff1a; 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本&#xff0c;开启鉴权 1.在application.properties配置文件开启鉴权&…

LeetCode 34题:在排序数组中查找元素的第一个和最后一个位置

目录 题目 思路 代码 C语言 Python 题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(…

腾讯出品Pag动画框架在Android端的使用-初级

Pag动画框架作为一个第三方框架&#xff0c;它的优缺点与Lottie是相似&#xff0c;此处不过多赘述。如果你们的项目中打算用了&#xff0c;肯定是经过了一定的调研的。Pag动画框架分几个版本&#xff0c;有免费的有收费的。我们目前用的社区免费版&#xff0c;只用来展示Pag动画…

大数据面试题:说下Spark中的Transform和Action,为什么Spark要把操作分为Transform和Action?

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;Spark常见的算子介绍一下 参考答案&#xff1a; 我们先来看下Spark算子的作用&#xff1a; 下图描述了Spark在运行转换中通过算…

uniapp的UI框架组件库——uView

在写uniapp项目时候&#xff0c;官方所推荐的样式库并不能满足日常的需求&#xff0c;也不可能自己去写相应的样式&#xff0c;费时又费力&#xff0c;所以我们一般会去使用第三方的组件库UI&#xff0c;就像vue里我们所熟悉的elementUI组件库一样的道理&#xff0c;在uniapp中…

(6)所有角色数据分析-6

http://t.csdn.cn/KrurEhttp://t.csdn.cn/KrurE &#xff08;5&#xff09;中的页面&#xff0c;倾向于向用户展示所有数据&#xff0c;但却没有对数据进行比较、分析&#xff0c;用户不能直观的感受到各种数据之间的关系与变化幅度&#xff0c;所以&#xff0c;下面将向用户提…

TCPDF生成PDF文件,含jpjraph生成雷达图

TCPDF生成PDF文件&#xff0c;含jpjraph生成雷达图 依赖自行安装 "tecnickcom/tcpdf": "^6.6","amenadiel/jpgraph": "4"雷达图生成 中文字体添加安装 没有封装&#xff0c;只作为测试案例展示 // 创建新的PDF文档$pdf new \TCPD…

中心极限定理例题

关于大数定律的两个题目。 例1 注意牢记公式&#xff1a; P { X } P { ∑ i 1 n x i − n μ n σ < x } ∫ − ∞ x e − x 2 2 d x 2 π P\{ X\} P \{\frac { \sum_{i1}^{n} x_i - n \mu}{\sqrt {n} \sigma} < x \} \frac {\int _{-\infty} ^{x} e ^{- \frac {x^…

18.3.0:Dynamic Web TWAIN Crack Web 文档扫描 SDK

Dynamic Web TWAIN用于快速部署 Web 应用程序的文档扫描 SDK&#xff0c;文档扫描SDK&#xff0c;&#xff0c;超过 5300 家公司信任 Dynamic Web TWAIN &#xff0c;因其稳健性和安全性而受到超过 5300 家公司的信赖&#xff0c;Dynamic Web TWAIN 是一款基于浏览器的文档扫描…

项目架构简介

目录 1 单体应用架构 2 垂直应用架构 3 分布式架构 3.1 RPC 3.2 SOA 4 微服务架构 本文介绍后台应用的各种架构,以及各架构的优缺点对比 1 单体应用架构 将所有的代码功能都写在一个项目中(例如:MVC结构,SSM框架),同时打包,同时部署 优点:便于管理,减少开发、维护、运维成…

Git全栈体系(六)

第十章 自建代码托管平台-GitLab 一、GitLab 简介 GitLab 是由 GitLabInc.开发&#xff0c;使用 MIT 许可证的基于网络的 Git 仓库管理工具&#xff0c;且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的 web 服务。GitLab 由乌克…

类与对象(加深)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 6.const成员 7.取地址及const取地址操作符重载 1.类的6个默认成员函数 如果…

01 - 工作区、暂存区、版本库、远程仓库 - 以一次连贯的提交操作为例

1. 工作区、暂存区、版本库、远程仓库 以一次连贯的提交操作为例。 1.1 工作区 Git的工作区也就是我们平时编辑代码的目录文件夹。 新建一个kongfu_person.txt文件&#xff0c;工作区的变化&#xff1a; 1.2 工作区 > 暂存区&#xff1a;git add 1.3 暂存区 > 版本库…

【踩坑】最新亲测能用!修复MacOS安装软件时提示“应该移到废纸篓”并且无法打开软件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 网上方法的尝试 方法一&#xff1a;xattr 方法二&#xff1a;UPX 真的能用的方法 GateKeeper_Helper.command的内容 网上方法的尝试 方法一&#xff1a;xattr 以前的Mac版本可以通过以下方式来解开限…

Gopeed-全平台开源高速下载器 支持(HTTP、BitTorrent、Magnet)协议

一、软件介绍 Gopeed&#xff08;全称 Go Speed&#xff09;&#xff0c;是一款由GolangFlutter开发的高速下载器&#xff0c;开源、轻量、原生&#xff0c;支持&#xff08;HTTP、BitTorrent、Magnet 等&#xff09;协议下载&#xff0c;并且支持全平台使用&#xff0c;底层使…

大华智慧园区综合管理平台文件上传漏洞复现(HW0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 0x02 漏洞概述 大华智慧园…

Android图形-合成与显示-SurfaceTestDemo

目录 引言&#xff1a; 主程序代码&#xff1a; 结果呈现&#xff1a; 小结&#xff1a; 引言&#xff1a; 通过一个最简单的测试程序直观Android系统的native层Surface的渲染显示过程。 主程序代码&#xff1a; #include <cutils/memory.h> #include <utils/L…

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中&#xff0c;我们希望找到图像中对象的位置。我们可以搜索一种类型的对象&#xff08;单对象检测&#xff0c;如本教程所示&#xff09;或多个对象&#xff08;多对象检测&#xff09;。通常&#xff0c;我们使用边界框定义对象的位置。有几种方法可以…