首页 > 编程语言 >(文章复现)基于改进秃鹰算法的微电网群经济优化调度研究

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

时间:2024-04-08 22:00:12浏览次数:27  
标签:end max pop 算法 复现 fitness 秃鹰 best

参考文献:

[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.运行结果

标签:end,max,pop,算法,复现,fitness,秃鹰,best
From: https://blog.csdn.net/weixin_44209907/article/details/137525252

相关文章

  • Day5.一刷数据结构算法(C语言版) 242有效的字母异位词; 349两个数组的交集; 202快乐数; 1
        现在我们开始学习哈希表.        经过本次学习我认识到c++的便利,但是我使用的是c,那些功能c又用不了,导致代码长度一下子拉长了...        一刷的时候我还是先用c吧,等二刷的时候试试c++.        进入正题:        什么时候......
  • ROT 复现踩坑记录
    复现了很长很长时间……终于能跑出来了。记录一下有哪些需要注意的地方。由于自己之前完全没有任何服务器跑代码的经验,于是过程比较的痛苦。。。torch安装这b玩意捣鼓了半天。。主要就两个点要选择不高于当前服务器支持的cuda版本的torch。比如服务器cuda=11.6,那我......
  • 生成树算法
    一、Prim算法概论适合稠密图,不进行堆优化的时间复杂度是\(O(n^2)\),进行堆优化则是\(O(mlogn)\)每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小,基于一种贪心的策略。证明的引理对于任意切割(S,V-S),其中S是生......
  • 文心一言 VS 讯飞星火 VS chatgpt (232)-- 算法导论17.1 3题
    三、假定我们对一个数据结构执行一个由n个操作组成的操作序列,当i严格为2的幂时第i个操作的代价为i,否则代价为1。使用聚合分析确定每个操作的摊还代价。文心一言:为了进行聚合分析并确定每个操作的摊还代价,我们需要理解操作序列的性质,特别是代价的变化规律。根据题目描......
  • 基于深度学习的海洋鱼类识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述        深度学习在海洋鱼类识别中常采用卷积神经网络(ConvolutionalNeuralNetworks,CNNs)。CNN由多个层级组成,包括卷积层、池化层、全连接层以及分类层。典型流程如下:   训练......
  • 音频混音算法及应用
     一、音频算法和原理简介在视频会议系统中,音频模块有着很大的重要性,也是评测一个视频会议系统质量的重要方面,相比起视频模块来说,音频质量的好坏涉及到会议内容,有可能会影响到交流的准确性,而质量稍微差一点的视频则是可以承受的.在音频模块中,传统上是使用控制发言权的......
  • tomcat弱口令后台getshell漏洞复现
    漏洞描述tomcat是一个用于快速部署jsp网站的中间件tomcat默认的管理页面manager使用basic认证用户名密码登录,可以使用burp进行爆破,并且一般安装后如果不修改/conf/tomcat-users.xml文件中的默认用户名密码tomcat:tomcat,可以登录管理后台,在部署war包后tomcat默认会将war包中的......
  • 数字图像处理项目——模糊图像边缘检测算法设计及实现(论文/代码)
    完整的论文代码见文章末尾以下为部分内容摘要本研究旨在针对大脑核磁图像中的黑色腔体进行有效分割,以提供可靠的腔体定位和分析。为此,采用了三种常用的图像分割方法:8邻域区域生长法、Canny算子边缘检测和8邻域边界跟踪法。首先,应用8邻域区域生长法来识别具有相似性质的......
  • 【数据结构与算法】:堆排序和选择排序
    1.堆排序堆排序是一种比较复杂的排序算法,因为它的流程比较多,理解起来不会像冒泡排序和选择排序那样直观。1.1堆的结构要理解堆排序,首先要理解堆。堆的逻辑结构是一棵完全二叉树,物理结构是一个数组。(如果不知道什么是二叉树,请前往我的主页查看)。所以堆是一个用数组表......
  • TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用
    TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析,上报识别结果,并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见的厂家品牌设备,可兼容IPC、网络音柱等。同时也支持智能......