Matlab|【重磅】配电网故障重构/孤岛划分

news2024/11/25 21:45:10

目录

1 主要内容

1.1 背景

1.2 流程图

2 部分代码

3 程序结果

4 下载链接


主要内容

程序主要复现《基于GA_BFGS算法的配电网故障恢复性重构研究_郑海广》,采用matlab编程软件实现,依据网络结构和DG供电方式对配电网进行孤岛划分,将含有 DG 的配电网拓扑结构看成一个树,搭建成连通图模型,使得将孤岛的划分变成了求取最小生成树,以网损和开关开断次数作为目标,采用 IEEE33 节点配电网为算例,通过遗传算法寻优计算,从而得到最佳的重构方案。

1.1 背景

当配电网系统发生系统故障由正常的运行状态进入故障状态运行时,一般的恢复性重构的做法是控制一些开关的通断来将故障线路断开,并将非故障线路重新恢复供电,当配电网中含有 DG 并网运行时,这种做法有可能会导致 DG被迫断开停止供电或者转为孤岛运行,只有等到电力系统的故障排除恢复正常后DG 才能重新接入电网运行,这种做法使得 DG 的利用率和供电能力大大降低,使得 DG 无法充分利用。所以当系统发生故障时,如何使 DG 能够充分的参与到网络的恢复性重构,而不是中断供电,对于提高 DG 的利用率和供电可靠性、降低系统中线路的有功损耗、提高系统的电能质量。

恢复重构目标:当配电系统发生系统故障时,具有独立供电能力的 DG 划为孤岛,使得失电负荷量尽可能最小;孤岛外的配电网可以通过控制开关的通断实现故障后的恢复。对孤岛外的配电网进行恢复性重构的过程中,需要检测岛外是否还有失电负荷,若有,则需要利用联络开关将其接入剩余的配电网中,若存在能够和主网相连接且不具有独立供电能力的 DG,将其接入主网,进行配电网重构。

1.2 流程图

部分代码

clear,clc,close all
currentFolder = pwd;
​
addpath(genpath(currentFolder));% 将matpower加入搜索路径
dgData.dgBus = [6 13 24 31]+1;
dgData.bFlag = [0 1 1 1];% 是否具有独立供电能力
dgData.sFlag = [1 1 0 1];% 故障后能够与主网保持连接
dgData.cFlag = [1 1 1 1];% 是否具有控制调度中心保持通信的能力
dgData.factor = [0.85 0.9 0.8 0.9];
dgData.power = [700 500 1000 650];
netData = case33bw;
disp('****************划分孤岛******************');
island = SetIsland(dgData,netData);% 设置孤岛
falutBranch  = [28];
% falutBranch = [9 22];% 故障支路
disp('****************发生故障******************');
netData = RunIsland(netData,dgData,island,falutBranch);%根据故障确定实际孤岛
disp('****************恢复重构******************');
netData = Reconfig(netData);% 恢复重构
rmpath(genpath(currentFolder));
  if nargin<1
    dgBus = [6 13 24 31]+1;
    bFlag = [0 1 1 1];% 是否具有独立供电能力
    sFlag = [0 0 1 0];% 故障后能够与主网保持连接
    cFlag = [1 1 1 1];% 是否具有控制调度中心保持通信的能力
​
    dgPower = [700 500 1000 650];
    netData = case33bw;
  else
    dgBus = dgData.dgBus;
    bFlag = dgData.bFlag;% 是否具有独立供电能力
    sFlag = dgData.sFlag;% 故障后能够与主网保持连接
    cFlag = dgData.cFlag;% 是否具有控制调度中心保持通信的能力
​
    dgPower = dgData.power;
  end
  bus = netData.bus;
  busPower = bus(:,3)'*1e3;% 有功功率
  busQower = bus(:,4)'*1e3;% 无功功率
  branch = netData.branch;
  branch(branch(:,11)==0,:) = [];% 删除联络开关
  busNum = length(netData.bus(:,1));% 节点数量
  island = zeros(1,busNum);
  w = zeros(1,busNum);
  w([5 6 12 13 23 24 29 31]+1) = 100;% 一类负荷
  w([7 11 15 22 26 30 32]+1) = 10;% 二类负荷
  w([1 2 3 4 8 9 10 14 16 17 18 19 20 21 25 27 28]+1) = 1;% 三类负荷
  M1 = sparse(branch(:,1),branch(:,2),branch(:,3),busNum,busNum);
  % tril returns the lower triangular part of the matrix.
  islandPower = zeros(1,length(dgBus));
  M2 = tril(M1+M1');
  for idg = 1:length(dgBus)
    
    if bFlag(idg)==1% 是否具有独立供电能力
      island(dgBus(idg)) = idg;
      islandPower(idg) = busPower(dgBus(idg));
      flag = 1;
      while flag% 当flag=0跳出循环
        islandBus = find(island==idg);% 已纳入孤岛的节点
        willBus = [];
        willPower = [];
        willDis = [];
        for ibus = 1:busNum
          if island(ibus)==0% 节点ibus尚未纳入孤岛
            [dist,path] = graphshortestpath(M2,dgBus(idg),ibus,'Directed',false);
            path(end) = [];
            if all(ismember(path,islandBus))% 拟加入节点到DG的路径上的节点已经被纳入孤岛
              willPower = [willPower,busPower(ibus)*w(ibus)];
              willDis = [willDis,dist];
              willBus = [willBus,ibus];
            end
          end
        end
        [~,idx] = sort(willPower,'descend');% 排序
        % willPower = willPower(idx);
        % willDis = willDis(idx);
        willBus = willBus(idx);
        flag = 0;
        for ift = 1:length(willBus)
          if islandPower(idg)+busPower(willBus(ift))<=dgPower(idg)% 判断新纳入的节点容量是否超过DG容量
            island(willBus(ift)) = idg;
            islandPower(idg) = islandPower(idg)+busPower(willBus(ift));
            flag = 1;
            break;
          end
        end
      end
    end
  end
  for idg = 1:length(dgData.dgBus)
    fprintf('DG%d对应的孤岛\n',idg);
    disp(find(island==idg));
    fprintf('岛内负荷%d+j%d\n',sum(busPower(island==idg)),sum(busQower(island==idg)));
  end
end

程序结果

4 下载链接

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

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

相关文章

避免使用for循环操作高维数组:numpy.apply_along_axis用法

文章目录 场景实际操作编写相关函数np.apply_along_axis 场景 设想我有一列高维向量&#xff0c;读取之后的数据都是字符串变量&#xff0c;我需要把这些字符串数据转换为复数之后求绝对值 实际操作 在使用pd.read_csv()读取数据之后&#xff0c;将这一列数据转换为numpy数…

Python高阶学习记录

文章导读 阅读本文需要一定的python基础&#xff0c;部分知识点是对python入门篇学习记录和python并发编程学习记录的深入探究&#xff0c;本文记录的Python知识点包括函数式编程&#xff0c;装饰器&#xff0c;生成器&#xff0c;迭代器&#xff0c;正则表达式&#xff0c;内存…

面试题------>JVM虚拟机!!!

一、Java对象内存布局 二、JVM 内存结构 程序计数器: 线程私有的(每个线程都有一个自己的程序计数器),是一个指针.代码运行,执行命令.而每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了.记录代码执行的位置. Java虚拟机栈: 线程私有的(每个线程都有一个自己…

【计算机网络】计算机网络的组成与功能

计算机网络的组成与功能 导读一、计算机网络的组成1.1 从组成方式上1.1.1 硬件1.1.2 软件1.1.3 协议 1.2 从工作方式上1.3 从功能组成上 二、计算机网络的功能2.1 数据通信2.2 资源共享2.3 分布式处理2.4 提高可靠性2.5 负载均衡2.6 其它 结语 导读 大家好&#xff0c;很高兴又…

可视化数据科学平台在信贷领域应用系列五:零代码可视化建模

信贷风控模型是金融机构风险管理的核心工具&#xff0c;在信贷风险管理工作中扮演着至关重要的角色。随着信贷市场的环境不断变化&#xff0c;信贷业务的风险日趋复杂化和隐蔽化&#xff0c;开发和应用准确高效的信贷风控模型显得尤为重要。信贷风险控制面临着越来越大的挑战和…

orbslam2代码解读(1):数据预处理过程

写orbslam2代码解读文章的初衷 首先最近陆陆续续花了一两周时间学习视觉slam&#xff0c;因为之前主要是做激光slam&#xff0c;有一定基础所以学的也比较快&#xff0c;也是看完了视觉14讲的后端后直接看orbslam2的课&#xff0c;看的cvlife的课&#xff08;课里大部分是代码…

规则引擎LiteFlow发布v2.12.1版本,决策路由特性

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 简介 标题其实是不准确的&#xff0c;了解过的会知道在LiteFlow的2.12.0已经有了决策路由的特性&…

python数据文件处理库-pandas

内容目录 一、pandas介绍二、数据加载和写出三、数据清洗四、数据转换五、数据查询和筛选六、数据统计七、数据可视化 pandas 是一个 Python提供的快速、灵活的数据结构处理包&#xff0c;让“关系型”或“标记型”数据的交互既简单又直观。 官网地址: https://pandas.pydata.o…

树形表/树形数据接口的开发

数据表格式 需要返回的json格式 点击查看json数据 [{"childrenTreeNodes" : [{"childrenTreeNodes" : null,"id" : "1-1-1","isLeaf" : null,"isShow" : null,"label" : "HTML/CSS","na…

14.pinia初始与安装

pinia初始与安装 pinia官网 https://pinia.vuejs.org/ https://pinia.vuejs.org/introduction.html pinia安装 npm install pinia main.ts引入pinia import { createApp } from vue // import ./style.css import App from ./App.vue import router from ./router/index // …

LangChain :构建个人AI代理从这里开始

LangChain&#xff0c;一个强大的工具&#xff0c;允许根据用户输入创建对语言模型和其他工具的复杂调用链。就像拥有一个私人助理&#xff0c;可以根据手头的任务做出决定。本文来分享一下在 LangChain 中使用 Agents 的心路历程。 LangChain中代理的概念 在 LangChain 中&a…

网络高频攻击手段与基本防护措施总结

主要攻击手段 一、云平台攻击 云平台攻击是指针对云服务器的恶意行为&#xff0c;旨在获取非法访问权限、窃取敏感数据或者破坏服务器的正常运行。云平台攻击的形式多样&#xff0c;以下是对云平台攻击的一些主要类型和特点的详细分析&#xff1a; 攻击类型&#xff1a; 凭据…

苹果手机数据不见了怎么恢复?3个方法,搞定苹果手机数据恢复!

在许多错误的情况下&#xff0c;当你更新到最新的 iOS 版本或使用越狱来获得更多功能和权限、误删重要的手机文件时&#xff0c;苹果手机中的数据可能会丢失或被意外删除。一旦发现数据丢失&#xff0c;你就会查看 iTunes 备份或 iCloud 备份&#xff0c;并希望在其中恢复丢失的…

Rust 性能分析

都说Rust性能好,但是也得代码写得好,猜猜下面两个代码哪个快 . - 力扣&#xff08;LeetCode&#xff09; use std::collections::HashMap; use lazy_static::lazy_static;lazy_static! {static ref DIGIT: HashMap<char, usize> {let mut m HashMap::new();for c in …

electron打包时资源下载失败cannot resolve xxx/30.0.9/electron-v30.0.9-win32-ia32.zip

同学们可以私信我加入学习群&#xff01; 正文开始 问题描述解决方案总结 问题描述 最近electron更新频繁&#xff0c;而我在用electron做个人项目&#xff0c;对稳定性没有太高要求&#xff0c;希望保持着electron的最新版本&#xff0c;所以就没有固定版本。 单位网络不太好…

Jmeter性能分析及调优详解(入门)

一、系统性能理解 如果说需求、开发、DB、运维、测试是单一一门学科&#xff0c;那么性能就是综合学科&#xff0c;它包含了需求分析、DB、开发、测试、运维的所有学科。其实一般来说在实际性能分析和调优中&#xff0c;测试担任的角色就是写压测脚本并执行脚本查看结果&#…

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测 目录 区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现QRCNN-GRU-…

在Linux上的Java项目导出PDF乱码问题

在Linux上的Java项目导出PDF乱码问题 场景&#xff1a;一个Java项目导出PDF&#xff0c;在我本地导出是没有问题&#xff0c;但是部署上Linux上后&#xff0c;导出就出现了乱码了。 处理方案 我这里使用的处理方案是在Linux服务器上安装一些PDF需要使用的字体 1.把字体上传到…

中国出海企业“奔赴”俄罗斯蓝海 有哪些认知需要对齐? | TopOn变现干货

中国企业加速出海已成常态化。在出海大潮席卷下&#xff0c;中国企业的身影已遍布欧美、东南亚、拉美、中东等多个成熟市场和潜力市场&#xff0c;眼下&#xff0c;这些热门市场几成红海&#xff0c;准入门槛也相对提高。而俄罗斯市场&#xff0c;作为全球TOP10的经济体之一&am…

初学者如何对大模型进行微调?

粗略地说&#xff0c;大模型训练有四个主要阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练消耗的时间占据了整个训练pipeline的99%&#xff0c;其他三个阶段是微调阶段&#xff0c;更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非…