(文章复现)基于改进秃鹰算法的微电网群经济优化调度研究

参考文献:

[1]周辉,张玉,肖烈禧,等.基于改进秃鹰算法的微电网群经济优化调度研究[J].太阳能学报,2024,45(02):328-335.

1.基本原理

        微电网群由3个独立的微电网(microgrid , MG)组成,各微电网内部包含光伏(photovoltaic , PV)、风力发电机(windturbine,WT)、电动汽车(electric vehicle,EV)、微型燃气轮机( microturbine, MT)、储能电池(battery , BT)及负荷,通过能量管理中心实现彼此之间电能交互及向配电网买卖电,如图1所示。

1.1 微电网系统模型

1.1.1 微型燃气轮机

1.2.2 储能系统

1.2.3 电动汽车负荷

1.2目标函数

        考虑微电网群系统运行成本及环境成本,构建微电网群经济优化调度模型,其中运行成本包括可控分布式发电单元的发电成本、设备运行维护成本、BT 运行成本、电能交易成本;环境成本为 CO2、SO2、NOx污染物气体的排放惩罚成本,以微电网群系统总运行成本为目标函数进行优化调度。

1.2.1 运行成本

1.2.2 环境成本

1.3约束条件

1.3.1 系统功率平衡约束

1.4.2 MT 爬坡功率约束

1.4.3 BT 约束

1.4.4 MG 之间交互功率约束

1.4.5 MG 与配电网之间交互功率约束

2.求解方法 

2.1基本秃鹰搜索算法

        BES 是一种针对秃鹰狩猎行为提出的自然启发式算法,包含选择搜索空间、搜索猎物及俯冲3个阶段 。

2.1.1 选择搜索空间阶段

        该阶段秃鹰根据猎物数量随机选择搜索区域,飞到当前最优个体附近,计算公式为:

2.1.2 搜索猎物阶段

        该阶段秃鹰在选定的搜索空间内螺旋飞行,加速搜索猎物,计算公式为:

2.1.3 俯冲阶段

        该阶段秃鹰从当前最优位置以螺旋飞行的方式冲向猎物,计算公式为:

2.2改进秃鹰搜索算法

2.2.1 反向学习

        反向学习可根据当前解获得相对中心的反向解,通过对比二者保留更好的解,从而扩大算法寻优范围,计算公式为:

2.2.2 柯西变异

        柯西分布产生的随机数分布范围较广,可有效提高算法的全局搜索能力,跳出局部最优。柯西分布函数为:

2.2.3 融合反向学习和柯西变异策略

        综上所述,在秃鹰算法搜索猎物空间步骤中,通过反向学习扩大秃鹰算法搜索范围,并采用柯西变异跳出局部最优,两者通过选择概率 P 来决定执行,计算公式为:

2.2.4 算法步骤

        综上所述,本文提出的 IBES 流程如图 2 所示。

3.编程思路分析

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

1 相关参数的定义

2 决策变量的定义

3.2编程思路

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

步骤1:输入所需数据

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

步骤2改进秃鹰搜索算法的实现

        实现基本的秃鹰搜索算法和改进秃鹰搜索算法,并使用文中提到的四个测试函数进行验证。文中所提供基准测试函数中,f3和f4都存在问题,其中测试函数f3的公式表述不清,测试函数f4没有提供参数aij的取值。因此我在标准测试函数中随便找了两个当作测试函数。

步骤3将改进秃鹰搜索算法用于微网调度问题

        如表2所示,原文中共包含4个决策变量,都是3×24的变量,也就是说决策变量的总数是3×24×4=288,需要将其组合成一个1×288的变量,便于使用改进秃鹰搜索算法求解,也就意味中文中涉及的优化问题维度为288,具体变量设置如下:

        智能优化算法中对于约束条件的处理有很多种形式,我在代码中使用罚函数法进行处理,即将不满足约束的部分作为惩罚添加到目标函数中。

        此外,文献中忽略了MG之间的交互功率总和需要为0这一约束,也就是下面的公式:

        不加上这一项约束的话,MG之间交互功率即使都为正,也是满足文中所提到的约束,但很明显是不符合实际情况的。另外,如果只遵循上下限约束生成初始种群,可能导致生成的种群中大部分甚至全部的个体都是不满足约束的,因此生成种群和更新种群时,还是要满足一定规则,使得生成的种群尽可能都满足约束。

步骤4输出运行结果

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

4.Matlab代码


%% 设置种群参数
sizepop = 40;                       % 初始种群个数
dim = 10;                           % 空间维数
ger = 500;                          % 最大迭代次数   
% 选择适应度函数
[xmax0, xmin0, fun] = Select_fitnessfun(fitnesfun);
x_max = xmax0*ones(1,dim);          % 位置上限
x_min = xmin0*ones(1,dim);          % 位置下限
v_max = x_max*0.5;                  % 速度上限
v_min = -x_max*0.5;                 % 速度下限
a = 2;                              % 位置变化参数
a1 = 10;                            % 搜索点之间角的参数
R = 1.5;                            % 搜索周期数
c1 = 1.8;                           % 增加秃鹰移动强度的随机数
c2 = 1.8;                           % 增加秃鹰移动强度的随机数
[x,y] = polr(a,R,sizepop);          % 搜索猎物阶段的参数    
[x1,y1]=swoo_p(a,R,sizepop);        % 俯冲阶段的参数

%% 种群初始化
pop = x_min + rand(sizepop,dim).*(x_max-x_min);     % 初始化种群
pop_v = v_min + rand(sizepop,dim).*(v_max-v_min);   % 初始化种群速度        
pop_best = pop(1,:);                                % 初始化群体最优位置
fitness = zeros(1,sizepop);                         % 所有个体的适应度
fitness_best = inf;                                 % 初始化群体最优适应度

%% 初始的适应度
for k = 1:sizepop
    % 计算适应度值
    fitness(k) = fun(pop(k,:));
    if fitness(k) < fitness_best
        fitness_best = fitness(k);
        pop_best = pop(k,:);
    end
end
history_BES = zeros(1,ger);                         % BES历史最优适应度值
%% 迭代求最优解
iter = 1;
while iter <= ger
    for k = 1:sizepop
        % 1.选择搜索空间阶段
        pop_new = pop_best + 2*rand(1,dim).*(mean(pop) - pop(k,:));
        fitness_new = fun(pop_new);
        if fitness_new < fitness(k)
            fitness(k) = fitness_new;
            pop(k,:) = pop_new;
        end
        
        % 2.搜索猎物阶段
        if k <= sizepop - 1
            pop_new = pop(k,:) + y(k)*(pop(k,:) - pop(k + 1,:)) + x(k)*(pop(k,:) - mean(pop));
            fitness_new = fun(pop_new);
            if fitness_new < fitness(k)
                fitness(k) = fitness_new;
                pop(k,:) = pop_new;
            end
        end
        
        % 3.俯冲阶段
        pop_new = rand(1,dim).*pop_best + x(k)*(pop(k,:) - c1*mean(pop)) + y(k)*(pop(k,:) - c2*pop_best);
        fitness_new = fun(pop_new);
        if fitness_new < fitness(k)
            fitness(k) = fitness_new;
            pop(k,:) = pop_new;
        end
        
        % 更新位置并对位置进行边界处理
        for kk = 1:dim
            if  pop(k,kk) > x_max(kk)
                pop(k,kk) = x_max(kk);
            end
            if  pop(k,kk) < x_min(kk)
                pop(k,kk) = x_min(kk);
            end
        end
        
        % 更新种群最优
        if fitness(k) < fitness_best
            fitness_best = fitness(k);
            pop_best = pop(k,:);
        end
    end
    history_BES(iter) = fitness_best;
    iter = iter+1;
end
% time0 = toc;
% disp(['运行时间为:',num2str(time0) , '秒'])
% disp(['最优解:x=',num2str(pop_best)])
% disp(['最优函数值=',num2str(fitness_best)])
% plot(history_BES,'linewidth',1)
% ylabel('最优适应度值')
% xlabel('迭代次数')


function [xR,yR] = swoo_p(a,R,N)
th = a*pi*exp(rand(N,1));
xR = R.*sinh(th);
yR = R.*cosh(th);
xR = xR/max(abs(xR));
yR = yR/max(abs(yR));
end

function [xR,yR] = polr(a,R,N)
th = a*pi*rand(N,1);
r = th+R*rand(N,1);
xR = r.*sin(th);
yR = r.*cos(th);
xR = xR/max(abs(xR));
yR = yR/max(abs(yR));
end

        以上仅为基本秃鹰搜索算法的matlab代码主函数部分,完整论文复现的matlab代码可以从这个链接获取:

(文章复现)基于改进秃鹰算法的微电网群经济优化调度研究的matlab代码资源-CSDN文库

5.运行结果

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

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

相关文章

h5 笔记3 多媒体素材运用

关于电影编码 我们经常用扩展名来判断文件的类型&#xff0c;但是对于影音文件未必适用&#xff0c;影音文件的文件格式(container)和编码(codec)之间并非绝对相关。决定影音文件播放的关键在于浏览器是否含有适合的影音编解码技术。 笔记来源&#xff1a; ©《HTML5CSS3J…

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

Centos 7 安装通过yum安装google浏览器

在CentOS 7上使用yum安装Google Chrome浏览器稍微复杂一些&#xff0c;因为Chrome并不直接包含在默认的Yum仓库中。按照以下步骤来操作&#xff1a; 1、添加Google Chrome仓库 首先&#xff0c;您需要手动添加Google Chrome的Yum仓库。打开终端&#xff0c;并使用文本编辑器&a…

物联网实战--驱动篇之(四)LoRa应用(modbus)

目录 一、前言 二、板级收发 三、主机请求 四、从机接收及回复 五、主机接收 一、前言 之前两篇分别介绍了modbus和sx1278的驱动&#xff0c;但是都并未具体讲解如何应用&#xff0c;那么这一篇就把两者结合起来&#xff0c;做个小demo&#xff0c;便于理解这两个驱动的使…

2005-2023年各省国内生产总值指数分季度数据

2005-2023年各省国内生产总值指数分季度数据 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、各省统计局 3、指标&#xff1a;地区生产总值指数(上年同期100)_累计值(%) 4、范围&#xff1a;31省 5、时间跨度&#xff1a;季度 6、缺失情况&#xff1a;无…

20240325-1-HMM

HMM 直观理解 马尔可夫链&#xff08;英语&#xff1a;Markov chain&#xff09;&#xff0c;又称离散时间马尔可夫链&#xff08;discrete-time Markov chain&#xff0c;缩写为DTMC&#xff09;&#xff0c;因俄国数学家安德烈马尔可夫&#xff08;俄语&#xff1a;Андре…

Ubuntu 20.04.06 PCL C++学习记录(十六)

[TOC]PCL中点云分割模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16 学习内容 用一组点云数据做简单的平面的分割 源代码及所用函数 源代码 #include<iostr…

Linux 内核:线程的实现

在linux中的线程是轻量级线程&#xff08;Light-Weight-process&#xff0c;LWP&#xff09; 文章目录 线程概念线程实现 线程概念 线程分类 用户级线程内核级线程&#xff0c;没有用户空间&#xff0c;完全工作在内核中&#xff08;下图中没有[]的就是用户级线程&#xff09…

跨服务器迁移nextcloud数据

背景 阿里云最近做活动,99一年的2U2G的服务器,比我原来的1U1G的服务器不知道高到哪里去了,于是决定迁移服务器数据到另一台主机上。原先的计划是直接做一个自定义镜像,然后复制到另一台主机就行,结果发现旧主机是aliyunOS,新主机不想踩这个坑了,决定换成乌班图,因此决定重新搭…

大模型基础知识 - 语言模型及其演进

开场白 人工智能发展到现在&#xff0c;在2个重要领域取得了重大突破&#xff0c;有望达到人类水平&#xff1a; 计算机视觉 &#xff08;Computer Vision, CV&#xff09;-> 希望机器帮助人类处理图像数据自然语言处理&#xff08;Natural Language Processing, NLP&…

基于R语言lavaan结构方程模型(SEM)实践技术应用

原文链接&#xff1a;基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;实践技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596681&idx4&sn08753dd4d3e7bc492d750c0f06bba1b2&chksmfa823b6ecdf5b278ca0b94213391b5a222d1776743609cd…

文章自动生成器

1.前言 最近开始想写一些东西&#xff0c;脑子里也有不少想法&#xff0c;但是自己写又比较费时间&#xff0c;而且还要排版&#xff0c;精修&#xff0c;刚开始写的字数甚少&#xff0c;想法也是断断续续&#xff0c;不连贯&#xff0c;本想放弃&#xff0c;但是想到放弃就太…

HarmonyOS实战开发-如何实现跨应用数据共享实例。

介绍 本示例实现了一个跨应用数据共享实例&#xff0c;分为联系人&#xff08;数据提供方&#xff09;和联系人助手&#xff08;数据使用方&#xff09;两部分&#xff1a;联系人支持联系人数据的增、删、改、查等功能&#xff1b;联系人助手支持同步联系人数据&#xff0c;当…

15.队列集

1.简介 在使用队列进行任务之间的“沟通交流”时&#xff0c;一个队列只允许任务间传递的消息为同一种数据类型&#xff0c;如果需要在任务间传递不同数据类型的消息时&#xff0c;那么就可以使用队列集。FreeRTOS提供的队列集功能可以对多个队列进行“监听”&#xff0c;只要…

【数据结构与算法】—— 二叉树

目录 一、树 1、初识树 2、树的一些概念 3、树的表示形式 二、二叉树 1、初识二叉树 2、两种特殊的二叉树 3、二叉树的性质 4、二叉树的遍历 5、实现一棵二叉树 6、二叉树题目&#xff08;没代码的后面会给补上&#xff09; 一、树 1、初识树 &#xff08;1&…

从人机界面设计黄金三法则视角看 ChatGPT 的界面设计的“好”与“坏”

热门文章推荐&#xff1a; &#xff08;1&#xff09;《为什么很多人工作 3 年 却只有 1 年经验&#xff1f;》&#xff08;2&#xff09;《一文掌握大模型提示词技巧&#xff1a;从战略到战术巧》&#xff08;3&#xff09;《AI 时代&#xff0c;程序员的出路在何方&#xff1…

破晓数据新纪元:隐语隐私计算,携手共创安全智能的未来生态

1.业务背景&#xff1a;安全核对产生的土壤 隐语隐私计算在安全核对业务背景下的应用&#xff0c;主要聚焦于解决企业在数据交换和分析过程中面临的隐私保护问题。 在许多行业中&#xff0c;特别是在金融、医疗、政务等领域&#xff0c;数据的安全核对至关重要&#xff0c;例如…

三流大学毕业,物流专业转行自述:“从月薪4K到现在月入2W+,我做到了哪些?”

我是25岁转行学python的。说实在&#xff0c;转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景&#xff0c;三流大学毕业&#xff0c;物流专业&#xff0c;学习能力一般&#xff0c;没啥特别技能&#xff0c;反正就很普通的一…

《springcloud alibaba》 四 seata安装以及使用

目录 准备调整db配置准备创建数据库 seata配置nacos配置confi.txt下载向nacos推送配置的脚本 启动seata新建项目order-seata项目 订单项目数据库脚本pom.xmlapplication.yml启动类实体类dao类service类controller类feign类mapper类 stock-seata 库存项目数据库脚本pom.xmlappli…

python代码使用过程中使用快捷键注释时报错

1.代码 2.代码报错 3.代码注释后的结果 4. 原因