高比例清洁能源接入下计及需求响应的配电网重构(matlab代码)

2023-09-13 19:16:58

主要内容

该程序复现《高比例清洁能源接入下计及需求响应的配电网重构》,以考虑网损成本、弃风弃光成本和开关操作惩罚成本的综合成本最小为目标,针对配电网重构模型的非凸性,引入中间变量并对其进行二阶锥松弛,构建混合整数凸规划模型,采用改进的 IEEE33 节点配电网进行算例仿真,分析了需求响应措施和清洁能源渗透率对配电网重构结果的影响。该程序复现效果和出图较好(详见程序结果部分),注释清楚,方便学习!

注意:该程序运行环境为matlab+mosek,需要各位同学下载并安装mosek求解器,通过官网可以申请学术许可,可免费使用365天。

  • 目标函数

目标函数为配电网综合运行成本最小,其中考虑了网损成本、弃风弃光成本以及分段开关操作惩罚成本。

  • 重要约束条件

常规的功率平衡、节点电压电流等约束不再赘述,重点分析一下网络结构约束和需求响应约束。

网络结构约束:
配电网在重构过程中需满足连通性约束与辐射状约束,具体模型为:

该网络结构约束是采用虚拟潮流方式,之前有几个重构代码也是采用虚拟潮流形式,参考的是《A New Model for Resilient Distribution Systems by Microgrids Formation》,具体模型如下:

仔细观察不难发现,上面的模型是下面的简洁版,在不考虑分布式电源节点对网络切割情况下,两者是等价的。
经验证(见结果图最后一张),该种约束方式下能够保证网络的连通性和辐射性。
需求响应约束:
在配电网中采用需求响应策略,可以在降低负荷峰谷差的同时,减少配电网运行的综合成本,提高配电网运行的经济性和可靠性。

在该模型中,电价弹性系数为已知量,需求响应前后总负荷保持一致。

部分代码

%% 系统参数
mpc = IEEE33;
% 风光负荷曲线
P_wind0=[0.21 0.07 0.11 0.21 0.38 0.42 0.12 0.19 0.22 0.47 0.55 0.71 0.80 0.99 0.89 0.99 0.99 0.98 0.99 0.99 0.98 0.77 0.61 0.19];
P_pv0=[0 0 0 0 0.17 0.24 0.40 0.54 0.60 0.51 0.35 0.29 0.27 0.25 0.18 0.10 0.06 0 0 0 0 0 0 0];
P_L0=[0.37 0.33 0.31 0.28 0.27 0.28 0.28 0.27 0.26 0.24 0.30 0.76 0.82 0.86 0.76 0.54 0.43 0.65 0.81 0.95 0.99 0.91 0.65 0.19];
nb=33;                                      % 节点数
ns=1;                                       % 电源节点数
nl=37;                                      % 支路数
n_pv=2;                                     % 光伏数
n_wind=3;                                   % 风机数
n_ess=2;                                    % 储能数
T=24;                                       % 调度时段总数
F=0.6;                                      % 渗透率
P_DG=sum(mpc.bus(:,3))*F/mpc.baseMVA/5;     % DG额定容量
P_wind_max=P_DG*P_wind0;                    % 风机最大有功
P_pv_max=P_DG*P_pv0;                        % 光伏最大有功
P_load=mpc.bus(:,3)/mpc.baseMVA*P_L0;     % 有功负荷
Q_load=mpc.bus(:,4)/mpc.baseMVA*P_L0;       % 无功负荷
Sij_max=15/mpc.baseMVA;                     % 支路功率最大值
r_ij=mpc.branch(:,3)*ones(1,T);             % 线路电阻
x_ij=mpc.branch(:,4)*ones(1,T);             % 线路电抗
wind=[9 25 32];                             % 风机接入位置
pv=[17 22];                                 % 光伏接入位置
ess=[7 25];                                 % 储能接入位置
Umax=[1;1.06*1.06*ones(32,1)];              % 电压上限的平方
Umin=[1;0.94*0.94*ones(32,1)];              % 电压下限的平方
I_max=10;                                   % 电流上限值
P_ch_max=0.2/mpc.baseMVA;                   % 充电功率上限0.2MW
P_dis_max=0.2/mpc.baseMVA;                  % 放电功率上限0.2MW
E_min=0.15/mpc.baseMVA;                     % 储能容量下限0.15MWh
E_max=0.8/mpc.baseMVA;                      % 储能容量上限0.8MWh
n_ch=0.9;                                   % 充电效率为0.9
n_dis=0.85;                                 % 放电效率为0.85
E0=0.3/mpc.baseMVA;                         % 初始荷电状态为0.3MWh
Q_CB_st=0.15/mpc.baseMVA;                   % 单个电容器无功补偿容量0.15Mvar
N_CB_max=5;                                 % 最大可投切电容器数目
ksai=0.5;                                   % 弹性系数
c1=3;                                       % 网络损耗成本系数3元/kWh
c2=1.2;                                     % 弃风弃光惩罚系数1.2元/kWh
c3=15;                                      % 分段开关操作惩罚成本系数15元/次
rho=zeros(1,24);                            % 分时电价
rho([12:15,19:23])=1.026;                   % 峰时电价
rho([7:11,16:18])=0.691;                    % 平时电价
rho([1:6,24])=0.2561;                       % 谷时电价
rho0=0.35;                                  % 初始节点电价为0.35元/kWh
M=1.1*1.1 - 0.9*0.9;                        % 中间变量                   
P_g_max=10/mpc.baseMVA;                     % 电源有功功率最大值
Q_g_max=10/mpc.baseMVA;                     % 电源无功功率最大值
branch_to_node=zeros(nb,nl);                % 流入节点的支路
branch_from_node=zeros(nb,nl);              % 流出节点的支路
for k=1:nl
    branch_to_node(mpc.branch(k,2),k)=1;     %举例说明,k=1,流入节点2是支路1;同时流出节点1的是支路1;同理,k=2,流入节点3且流出节点2的是支路2;这一步建立支路和节点的连接关系
    branch_from_node(mpc.branch(k,1),k)=1;
end
​
%% 优化变量
alpha_ij=binvar(nl,1);                      % 支路开断情况
U_i=sdpvar(nb,T);                           % 电压的平方
I_ij=sdpvar(nl,T);                          % 电流的平方
P_ij=sdpvar(nl,T);                          % 线路有功功率
Q_ij=sdpvar(nl,T);                          % 线路无功功率
P_wind=sdpvar(n_wind,T);                    % 风机输出功率
P_pv=sdpvar(n_pv,T);                        % 光伏输出功率
Q_wind=sdpvar(n_wind,T);                    % 风机输出功率
Q_pv=sdpvar(n_pv,T);                        % 光伏输出功率
P_ch=sdpvar(n_ess,T);                       % 储能充电功率
P_dis=sdpvar(n_ess,T);                      % 储能充电功率
y_ch=binvar(n_ess,T);                       % 储能充电状态
y_dis=binvar(n_ess,T);                      % 储能放电状态
E_ESS=sdpvar(n_ess,T);                      % 储能荷电状态
N_CB=intvar(1);                             % 投切的电容器数量
P_cur=sdpvar(nb,T);                         % 需求响应后的负荷量
P_g=sdpvar(nb,T);                           % 节点注入有功
Q_g=sdpvar(nb,T);                           % 节点注入无功
P_g_dot=sdpvar(nb,1);                       % 虚拟电源
P_L_dot=ones(nb,1);                         % 虚拟负荷
P_ij_dot=sdpvar(nl,1);                      % 虚拟功率
​
%% 约束条件
Constraints = [];
%% 1.潮流约束
m_ij=(1-alpha_ij)*M*ones(1,T); 
Constraints = [Constraints, P_g-P_cur+branch_to_node*P_ij-branch_to_node*(I_ij.*r_ij)-branch_from_node*P_ij == 0];
Constraints = [Constraints, Q_g-Q_load+branch_to_node*Q_ij-branch_to_node*(I_ij.*x_ij)-branch_from_node*Q_ij == 0];
Constraints = [Constraints,U_i(mpc.branch(:,1),:)-U_i(mpc.branch(:,2),:)<= m_ij + 2*r_ij.*P_ij + 2*x_ij.*Q_ij - ((r_ij.^2 + x_ij.^2)).*I_ij];
Constraints = [Constraints,U_i(mpc.branch(:,1),:)-U_i(mpc.branch(:,2),:)>= -m_ij + 2*r_ij.*P_ij + 2*x_ij.*Q_ij - ((r_ij.^2 + x_ij.^2)).*I_ij];
for k=1:nl
    for t=1:T
        Constraints = [Constraints, cone([2*P_ij(k,t) 2*Q_ij(k,t) I_ij(k,t)-U_i(mpc.branch(k,1),t)],I_ij(k,t)+U_i(mpc.branch(k,1),t))];
    end
end
Constraints = [Constraints, Sij_max^2*alpha_ij*ones(1,T) >= P_ij.^2+Q_ij.^2];
Constraints = [Constraints, I_max.^2.*alpha_ij*ones(1,T) >= I_ij , I_ij >= 0];
Constraints = [Constraints, Umin*ones(1,T) <= U_i,U_i <= Umax*ones(1,T)];
​
%% 2.拓扑约束
Constraints = [Constraints , sum(alpha_ij) == nb-ns];
Constraints = [Constraints , P_g_dot(2:33) == 0 , P_g_dot(1) <= nb];
Constraints = [Constraints , P_g_dot-P_L_dot+branch_to_node*P_ij_dot-branch_from_node*P_ij_dot == 0];
​
%% 3.DG功率约束
Constraints = [Constraints , P_pv >= 0 , P_wind >= 0];
Constraints = [Constraints , P_pv <= ones(n_pv,1)*P_pv_max , P_wind <= ones(n_wind,1)*P_wind_max];
​
%% 4.储能约束
Constraints = [Constraints , P_ch >= 0 , P_dis >= 0 , y_ch+y_dis <= 1];
Constraints = [Constraints , P_ch <= y_ch*P_ch_max , P_dis <= y_dis*P_dis_max];
Constraints = [Constraints , E_ESS(:,1) ==n_ch*P_ch(:,1)-1/n_dis*P_dis(:,1)+E0];
Constraints = [Constraints , E_ESS >= E_min , E_ESS <= E_max];
for t=2:T
    Constraints = [Constraints , E_ESS(:,t) ==n_ch*P_ch(:,t)-1/n_dis*P_dis(:,t)+E_ESS(:,t-1)];
end
​

程序结果

4 下载链接

见文章下方联系方式-->发消息-->【程序目录】

更多推荐

Compositional Minimax Optimization学习之路

梯度最优化理论最优化基础---基本概念:凸优化、梯度、Jacobi矩阵、Hessian矩阵_哔哩哔哩_bilibili从图像来看:存在两点连线上的点不在集合内定义ax1+(1-a)x2其实就是两点连线上的点可用与函数围成的面积和与坐标轴围成的面积角度理解凸函数凸优化在定义域和F(X)都是凸集的问题(凸凸问题),就是凸优

如何使用Python和Numpy实现简单的2D FDTD仿真:详细指南与完整代码示例

第一部分:引言及FDTD简介引言:计算机模拟在许多科学和工程领域中都得到了广泛应用。在电磁学领域,有许多不同的数值方法用于模拟波的传播和散射。其中最为知名和广泛使用的一种方法是有限差分时域方法(FiniteDifferenceTimeDomain,FDTD)。在这篇文章中,我们将使用Python和Numpy库为你提供一

ES-索引管理

前言数据类型​搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据非结构化数据结构化数据:也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:又可

ArcGIS Maps SDK for JavaScript系列之四:添加自定义底图

目录Basemap类介绍Basemap类的常用属性Basemap类的常用方法使用Basemap添加自定义底图引用Basemap引用切片图层创建一个新的Basemap对象将自定义图层应用到地图视图中引入并创建Camera对象引入并创建SceneView对象Basemap类介绍Basemap类是ArcGISMapsSDKf

TypeScript算法题实战——剑指 Offer篇(5)

目录一、平衡二叉树1.1、题目描述1.2、题解二、数组中数字出现的次数2.1、题目描述2.2、题解三、数组中数字出现的次数II3.1、题目描述3.2、题解四、和为s的两个数字4.1、题目描述4.2、题解五、和为s的连续正数序列5.1、题目描述5.2、题解六、翻转单词顺序6.1、题目描述6.2、题解七、滑动窗口的最大值7

竞赛 基于机器视觉的银行卡识别系统 - opencv python

1前言🔥优质竞赛项目系列,今天要分享的是基于深度学习的银行卡识别算法设计该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🧿更多资料,项目分享:https://gitee.com/dancheng-senior/postgraduate2算法设计流程银行卡卡号识别技术原理是先对银行卡图像定位,保障获取图像绝对位置

OpenCV(四十六):特征点匹配

1.特征点匹配的定义特征点匹配是一种在两幅图像中寻找相互对应的特征点,并建立它们之间的对应关系的过程。具体而言,首先通过特征检测算法在两幅图像中寻找相互对应的特征点,然后,对于每个特征点,通过描述子提取算法计算其描述子,最后,使用匹配算法对两组特征点的描述子进行比较,以找到相互匹配的特征点对。2.DMatch()用于表

XREAL 联合创始人吴克艰谈AR:下一代计算平台及其关键技术

//编者按:一种行业观点是,AR或是未来十年、三十年的革命性技术,是下一代计算平台。近半个世纪,我们总能听到苹果在AR行业的创新动作,开辟了新的硬件范式。AR/VR行业为苹果不断欢呼的同时,激发了人们的好奇心——究竟,人类在戴上AR眼镜的那一瞬间,感知与交互从二维平面延伸到三维空间,科幻片场景触手可及之时,和世界的交互

Android studio 断点调试、日志断点

目录参考文章参考文章1、运行调试2、调试操作3、断点类型行断点的使用场景属性断点的使用场景异常断点的使用场景方法断点的使用场景条件断点日志断点4、断点管理区参考文章参考文章1、运行调试开启Debug调试模式有两种方式:DebugRun:直接以Debug模式运行APP,该模式的优点是可以调试程序启动相关的代码,例如App

Spring基础(2w字---学习总结版)

目录一、Spirng概括1、什么是Spring2、什么是容器3、什么是IoC4、模拟实现IoC4.1、传统的对象创建开发5、理解IoC容器6、DI概括二、创建Spring项目1、创建spring项目2、Bean对象2.1、创建Bean对象2.2、存储Bean对象(将Bean对象注册到容器中)2.3、获取Bean对象【1

计算机网络(二):TCP篇

文章目录1.TCP头部包含哪些内容?2.为什么需要TCP协议?TCP工作在哪一层?3.什么是TCP?4.什么是TCP连接?5.如何唯一确定一个TCP连接呢?6.UDP头部大小是多少?包含哪些内容?7.TCP与UDP的区别?9.TCP和UDP可以使用同一个端口吗?10.TCP三次握手过程是怎样的?11.如何在Linux系

热文推荐