开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流计算

news2024/10/7 20:35:55

参考文献:

  • [1]乔珊. 主动配电网多源协同运行优化研究[D]. 山东大学, 2021. 
  • [2]高红均,刘俊勇,沈晓东,等. 主动配电网最优潮流研究及其应用实例 [J]. 中国电机工程学报, 2017, 37 (06): 1634-1645. DOI:10.13334/j.0258-8013.pcsee.152839.

1.引言

        主动配电网技术的发展已成为大势所趋,如何协调主动配电网中的各元件进行协同和优化,使可再生能源充分被消纳,是亟待解决的问题。本文针对主动配电网中的主要组成部分,包括分布式电源、储能系统、电动汽车、无功补偿装置等,分析其出力特性及可调潜力,对其进行数学建模,从保障配电网安全稳定运行角度出发,尽量降低运行成本,构建多时间尺度优化调度模型。在优化调度过程中,在满足经济效益最优的同时实现对分布式电源出力的最大化消纳,尽量缩减潮流分布的峰谷差,实现“源”、“荷”、“储”的多方面协同优化运行。

2.主动配电网模型

        在主动配电网框架下,主动管理包括: 1)OLTC调节;2)无功装置调节,包括离散无功补偿和连续无功调节;3)有功调节,包括储能调节以及电动汽车调节;4)分布式电源自身调节。同样,需求响应作为主动配电网的重要参与元素也应充分利用。此外,为适应模型的通用性,文中也增加了综合负荷模型。由于最优潮流的目标函数基本为线性或二次形式,二次形式也能通过分段线性等方式进行转化,且效果均较满意,因此本文主要侧重于对各主动管理设备相关的约束条件进行线性建模处理。此外根据文献[2]知,网络灵活性在主动配电网规划运行中举足轻重,其主要思想为网络重构(开关调节)。本文对网络重构相关约束限制也进行了探讨,如辐射性约束等。

2.1 OLTC建模

2.2 无功调节装置建模

2.3 储能装置建模

        电动汽车作为一种新的主动管理手段 ,得到了广泛的研究。由于充放 电功率也仅为有功功率, 其基本模型与 ESS基本类似,只是每个节点连接有大量的可控电动汽车,因此,对于配 电网各母线节点的等效注入功率可表征为所有单个电动汽车的聚类效果。

2.4 分布式电源建模

2.5 需求响应、综合负荷等建模

        需求响应作为用户侧主动管理方式在很多文献中进行了研究,如文献[2],将需求响应分为基于电价的响应模式和基于激励的响应模式,无论采用何种方式,其对电网的作用仍可表征为节点注入功率的增量,即:

        上式为最简单的负荷响应与电网交互方式,认为无功等比例变化于有功功率,实际上,无功需求也是一个较为复杂的问题,本文不予讨论。

3.运行结果展示

4.matlab代码

%多时段+SVC+CB+OLTC+DG SOCP_OPF   Sbase=1MVA,   Ubase=12.66KV
%目标函数如果只有网损,那么OLTC永远是高挡位,电压越高,网损越小,因此需进一步考虑目标函数如主网购电,或者电压平衡          

%%
%有载调压变压器的位置在那个节点

%%
clear 
clc 
tic 
warning off
%% 1.设参
mpc = IEEE33BW;
wind = mpc.wind;    
pload = mpc.pload;    
pload_prim = mpc.pload_prim/1000;  %化为标幺值
qload_prim = mpc.qload_prim/1000;
a = 3.715;   %单时段所有节点有功容量,MW
b = 2.3;     %单时段所有节点无功容量,MW
pload = pload/a;%得到各个时段与单时段容量的比例系数
qload = pload/b;%假设有功负荷曲线与无功负荷变化曲线相同
pload = pload_prim*pload;   %得到33*24的负荷值,每一个时间段每个节点的负荷
qload = qload_prim*qload;      

branch = mpc.branch;       
branch(:,3) = branch(:,3)*1/(12.66^2);%求阻抗标幺值      
R = real(branch(:,3));            
X = imag(branch(:,3));             
T = 24;%时段数为24小时             
nb = 33;%节点数            
nl = 32;%支路数           
nsvc = 3;%SVC数      静止无功补偿器 Static Var compensator
ncb = 2;%CB数        分组投切电容器组 (capacitorbanks,CB)
noltc = 1;%OLTC数    有载调压变压器 ( on—load tap changer,OLTC )  transformer   
nwt = 2;%2个风机     
ness = 2;%ESS数      
upstream = zeros(nb,nl);
dnstream = zeros(nb,nl);
for i = 1:nl
    upstream(i,i)=1;
end
for i = [1:16,18:20,22:23,25:31]
    dnstream(i,i+1)=1;
end
dnstream(1,18) = 1;
dnstream(2,22) = 1;
dnstream(5,25) = 1;
dnstream(33,1) = 1;
Vmax = [1.06*1.06*ones(nb-1,T)
        1.06*1.06*ones(1,T)];
Vmin = [0.94*0.94*ones(nb-1,T)
        0.94*0.94*ones(1,T)];%加入变压器后,根节点前移,因此不是恒定值1.06
Pgmax = [zeros(nb-1,T)
         5*ones(1,T)];
Pgmin = [zeros(nb-1,T)
         0*ones(1,T)];
Qgmax = [zeros(nb-1,T)
         3*ones(1,T)];
Qgmin = [zeros(nb-1,T)
         -1*ones(1,T)];
QCB_step = 100/1000;       %单组CB无功,100Kvar 转标幺值     
%% 2.设变量
V = sdpvar(nb,T);%电压的平方
I = sdpvar(nl,T);%支路电流的平方
P = sdpvar(nl,T);%线路有功(是不是平方我就不清楚了,应该不是)
Q = sdpvar(nl,T);%线路无功
Pg = sdpvar(nb,T);%发电机有功
Qg = sdpvar(nb,T);%发电机无功
theta_CB = binvar(ncb,T,5); %CB档位选择,最大档为5
theta_IN = binvar(ncb,T);%CB档位增大标识位
theta_DE = binvar(ncb,T);%CB档位减小标识位   

q_SVC = sdpvar(nsvc,T);%SVC无功    
p_wt = sdpvar(nwt,T);%风机有功     


p_dch = sdpvar(ness,T);   %ESS放电功率
p_ch = sdpvar(ness,T);   %ESS充电功率
u_dch = binvar(ness,T);%ESS放电状态
u_ch = binvar(ness,T);%ESS充电状态
E_ess = sdpvar(ness,25);%ESS的电量,这个25的原因要搞懂才能理解储能一天开始结束时刻(首末)功率相等的意思   

r1 = sdpvar(noltc,T);     
theta_OLTC = binvar(noltc,T,12);%OLTC档位选择,最大档为12
theta1_IN = binvar(noltc,T);%OLTC档位增大标识位
theta1_DE = binvar(noltc,T);%OLTC档位减小标识位
%% 3.设约束
C = [];        

.....省略......

%% 4.设目标函数
objective = sum(Pg(33,:))  +  0.3*sum(sum(I.*(R*ones(1,T))));   %子配电网向主网购电量 + 0.3*子配电网有功损耗
toc%建模时间
%% 5.设求解器
ops = sdpsettings('verbose', 1, 'solver', 'cplex');
ops.cplex= cplexoptimset('cplex');%这两句修改收敛间隙,使MIP问题跑的更快,酌情使用
ops.cplex.mip.tolerances.absmipgap = 0.01;

sol = optimize(C,objective,ops);

objective = value(objective)

toc%求解时间
% clear branch C dnstream upstream i kk mpc nb nl ncb ness noltc npv nwt nsvc...
%       QCB_step ops Pgmax Pgmin pload qload t T theta_DE theta_IN ...
%       Vmax Vmin R X P_ch P_dch P_pv P_wt Q_SVC Qgmax Qgmin Pin Qin...
%       Q_CB k r rjs theta1_DE theta1_IN 

%% 6.分析错误标志
if sol.problem == 0
    disp('succcessful solved');
else
    disp('error');
    yalmiperror(sol.problem)
end



% B = [1 2 3 ;
%     4 5 6 ;
%     7 8 9 ]
V = value(V);        
% for  i = 1 : 33   
%      VV(24*i - 23 : 24*i)   =  V(i,: );   
%      XX(24*i - 23 : 24*i) =   i;
%      YY(24*i - 23 : 24*i ) =  1:24;
% end  
% plot3(XX,YY,VV,'*');
figure(1)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,V);
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('电压幅值(pu)');
title('24小时节点电压图');

figure(2)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,pload);     % pload需要进一步归算(利用pload_prim,a,b反推 )
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('有功负荷(pu)');
title('24小时有功负荷图');

figure(3)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,qload);
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('无功负荷(pu)');
title('24小时无功负荷图');


figure(4)
p_wt= value(p_wt);
plot(wind,'k-*');
hold on 
plot(p_wt',':ro');
xlabel('时刻(h)');
ylabel('风机出力(pu)');
title('24小时风机出力图');


figure(5)
k= value(k);
Q_cb= value(Q_cb);
plot(Q_cb(1,:));
hold on 
plot(Q_cb(2,:));
xlabel('时刻(h)');
ylabel('无功补偿电容器组CB出力(pu)');
title('24小时无功补偿电容器组CB出力图');


figure(6)
q_SVC = value(q_SVC);    
plot(q_SVC(1,:));
hold on 
plot(q_SVC(2,:));
hold on 
plot(q_SVC(3,:));
xlabel('时刻(h)');
ylabel('静止(连续)无功补偿电容器SVC出力(pu)');
title('24小时静止(连续)无功补偿电容器SVC出力图');


figure(7)
r1 = value(r1);    
plot(r1);
xlabel('时刻(h)');
ylabel('有载调压变压器OLTC变比(pu)');
title('24小时有载调压变压器OLTC变比图');


% p_dch = sdpvar(ness,T);   %ESS放电功率                
% p_ch = sdpvar(ness,T);   %ESS充电功率               
BA_dch = value(p_dch)*1.11;     
BA_ch = value(p_ch)*0.9;    
% BA_dch = value(p_dch);     
% BA_ch = value(p_ch);    
BA1 = BA_ch(1,:) - BA_dch(1,:);
BA2 = BA_ch(2,:) - BA_dch(2,:);
figure(8)  
plot(BA1,'-*');
hold on
plot(BA2,'-o');
xlabel('时刻(h)');
ylabel('ESS电池充放电功率(pu)');     
title('24小时ESS电池充放电功率图');       
BA1_P_Sum=sum(BA1);             
BA2_P_Sum=sum(BA2);  


E_ess=value(E_ess);
figure(9)
plot(E_ess','-o');
xlabel('时刻(h)');
ylabel('ESS电池电量Soc(pu)');     
title('24小时ESS电池电量Soc图');     

        以上仅为部分matlab代码,完整代码获取方式如下:

开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流matlab代码资源-CSDN文库

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

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

相关文章

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天,智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分,同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注,养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

Java基础(运算符)

运算符 运算符和表达式 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符(加…

短视频素材哪个软件好?短视频素材那里来?

在当今数字化时代,高质量的视频素材对于提升任何视频项目的吸引力和专业度都至关重要。以下是全球范围内精选的视频素材网站,每个都能为你的视频创作提供独特的视觉支持和灵感。 1. 蛙学府(中国) 主要提供丰富的中文视频素材&…

Centos 5 的yum源

背景 有使用较老的Centos 5 系统内部安装软件无法正常报错,是由于系统叫老yum源存在问题 处理方法 更换下述yum源,可以将其他repo源文件备份移动到其他目录,添加下述源后重新测试 [C5.11-base] nameCentOS-5.11 baseurlhttp://vault.c…

哈希表练习题

前言 本次博客将要写一写,哈希表的一些使用 哈希表主要是一个映射,比如数组就是一个哈希表 是一个整型对应另一个整型,介绍的哈希表还是要以写题目为例 第一题 242. 有效的字母异位词 - 力扣(LeetCode) 直接来看…

vue-manage-system 更新,后台管理系统开发更简单

vue-manage-system 近期进行了一次版本升级,主要是支持了更多功能、升级依赖版本和优化样式,并且上线了官方文档网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业务简单修改,就…

【讯为Linux驱动笔记1】申请一个字符设备

Linux下每个设备都需要有一个专属设备号:主设备号 次设备号 【申请字符设备】 主设备号:一类驱动:如:USB驱动 次设备号:这类驱动下的某个设备 如:键盘鼠标 设备号是32位的dev_t类型的,高12位主…

STL_deque_stack_queue

Deque deque容器(双端队列) ​deque是一种双向开口的分段连续线性空间(对外号称连续,使用者无法感知它是分段的)。deque支持从头尾两端进行元素的插入和删除。deque没有容量的概念,因为它是动态地以分段连续空间组合而成的。随时…

同态加密原理解析

目录 1.数学介绍2.使用多项式环进行加密2.1 私钥和公钥的产生2.2 加密2.3 解密 3.同态计算3.1 同态加法3.2 同态乘法 1.数学介绍 同态加密方案基于一个难以计算的问题Ring Learning with Errorsred。这些方案中的数据在加密和未加密时都用多项式表示。 这里举一个简单的多项式…

最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版 土堆教程

最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程 Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版 教程大纲如何使用此教程快速开始版本 Windows下判断有无NVIDIA GPU安装Anaconda作用流程下载安装 Anaconda 创建虚拟环境利用conda或者…

jmeter安装和简单使用

jmeter安装和简单使用 1. 安装 jmeter是基于Java开发的测试应用,其运行依赖于java环境,所以在下载运行jmeter前,先确保本机已经安装jdk或者jre,安装jdk步骤此处不描述。 下载jmeter: jmeter是Apache旗下的产品&…

电阻理论基础

电流的形成是电荷运动,电子方向相反,标量 电压:电势有参考点,是一个相对量 电阻的值不取决于电压和电流的, Ra表示标准电阻 R表示任意温度的电阻

数据结构:时间复杂度和空间复杂度

目录 1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 推导大O阶方法3.4 常见时间复杂度计算举例 3.空间复杂度 1. 如何衡量一个算法的好坏 下面求斐波那契数列的算法好还是不好,为什么?该如何衡量一个算…

新书推荐机器学习大数据平台的构建、任务实现与数据治理

在大数据与机器学习日新月异的今天,构建稳定、安全、可扩展的数据平台已成为企业和研究机构的迫切需求。这本书应运而生,提供了详尽且实用的指南,帮助读者在云计算环境中构建、优化和治理大数据平台。 作者以清晰明了的写作风格,…

实现基于UDS LIN诊断协议的本地OTA升级

一、目标 在上篇文章LIN诊断实现MCU本地OTA升级_lin ota-CSDN博客中已经基于LIN诊断协议实现了通过PC端上位机对MCU进行本地的OTA升级,但是没有完全按照UDS协议实现。本篇将在上篇文章的基础上进行改进,实现基于UDS LIN诊断协议的本地OTA升级。本篇文章对…

C语言 | Leetcode C语言题解之第52题N皇后II

题目: 题解: struct hashTable {int key;UT_hash_handle hh; };struct hashTable* find(struct hashTable** hashtable, int ikey) {struct hashTable* tmp NULL;HASH_FIND_INT(*hashtable, &ikey, tmp);return tmp; }void insert(struct hashTabl…

nvm 使用教程

在任意目录中的空白处 按住Shift键不放,鼠标点击右键,在弹出的菜单中选择 “在此处打开 Powershell 窗口(S)”。 查看远程线上的nodejs版本 nvm ls available 查看自己安装的nodejs版本 nvm ls 切换nodejs版本号 nvm use 版本号 安装 xxx版本的nodej…

浅谈游戏机制

浅谈游戏机制 前言什么是游戏机制?机制组成机制类别结语 前言 最近在编写游戏开发文档的时候了解到游戏机制,第一次接触游戏机制的概念难免有些陌生,但感觉又跟常见,在网上查阅浏览了一些资料后了解到游戏机制还不止一个。 现在将…

Linux|Awk 变量、数字表达式和赋值运算符

引言 本部分[1]将深入学习 Awk 的高级应用,以应对更为复杂的文本或字符串过滤任务。将介绍包括变量、数值表达式和赋值运算符在内的 Awk 功能。 这些概念与你之前可能在诸如shell、C、Python等许多编程语言中接触过的概念并没有本质上的不同,所以你不必过…

【RAG 论文】Chain-of-Note:为 RAG 引入 CoT 让模型生成阅读笔记来提高面对噪音文档和未知场景的鲁棒性

论文:Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models ⭐⭐⭐ Tencent AI Lab, arXiv:2311.09210 文章目录 一、论文速读二、实现的细节2.1 Note Design2.2 Data Collection2.3 Model Training 三、实验结果3.1 QA Performance3.2 对 …