Matlab|【免费】智能配电网的双时间尺度随机优化调度

目录

1 主要内容

基础模型

2 部分代码

3 部分程序结果

4 下载链接


主要内容

该程序为文章《Two-Timescale Stochastic Dispatch of Smart Distribution Grids》的源代码,主要做的是主动配电网的双时间尺度随机优化调度,该模型考虑配电网的高效和安全运行涉及到在不同的时间尺度上的决策,如电压控制器可以在慢时间尺度进行调度,而光伏需要在快时间尺度调度和调节,以最佳地跟踪可再生能源发电和需求的变化,两种时间尺度通过耦合方式形成统一的优化调度模型。文中对于随机优化模型建立了两种方式,分别是平均调度算法和概率调度算法,这两种方法均基于辐射网络线性分布潮流(LDF)模型,模型涉及拉格朗日、非凸转换等深度内容,非常适合用来学习。程序采用matlab+cvx进行求解,程序采用模块化方式、采用英文注释,适合有编程经验的同学深度学习!

  • 基础模型

该模型通过引入A建立配网潮流模型,通过电流流向(始端和终端)建立线路和节点关联关系。

以此为基础通过进一步推导和变量集合,形成优化调度模型。

将上述模型中的(9l)替换为下述概率模型即可形成概率调度算法。

模型中目标函数涉及到在慢时间尺度上的能量调度成本加上快速时间尺度上的平均能源管理成本,(9b)-(9c)确保节点(无功)有功功率平衡,(9e)考虑有功功率损失,(9f)是线性潮流容量约束,(9i)-(9l)是电压约束,其中(9l)为平均电压约束,替换成(10)即形成概率电压约束。

部分代码

clear; close all
%%
preprocess;
​
%buses_pm = [3 5 14 25 32 51];
buses_pm = [];
b_pm = false(1, Nb);
b_pm(buses_pm) = 1;
buses_pd = [10, 18, 21, 30, 36, 43, 51, 55];
b_pd = false(1, Nb);
b_pd(buses_pd) = 1;
​
params = struct();
params.pm_lower = zeros(Nb, 1);
params.pm_upper = zeros(Nb, 1);
params.pm_upper(b_pm) = 0.25;
%http://www.powermag.com/microturbine-technology-matures/
microturbine_pf = 0.8;
params.pm_diag_phi = diag(b_pm)*tan(acos(microturbine_pf));
params.pm_linear = 40*ones(Nb,1);    % reasonable value 
params.pm_quadratic = 20*ones(Nb,1); % to give some curvature
% pm_space = linspace(0, 0.2, 100);
% plot(pm_space, mean(params.pm_linear)    * pm_space + ...
%                mean(params.pm_quadratic) * pm_space.^2);
params.pd_lower  = zeros(Nb, 1);
params.pd_upper  = zeros(Nb, 1);
params.pd_upper(b_pd) = 0.5;
params.pd_linear = 30*ones(Nb, 1); %must be higher than solar% should be lower than the microturbines linear term
params.pd_quadratic = 15*ones(Nb, 1);
if(0),pd_space = linspace(0, 0.5, 100);plot(pd_space, mean(params.pd_linear)    * pd_space + ...mean(params.pd_quadratic) * pd_space.^2);
end
params.S2 = 7.^2*ones(Nb,1); % indirectly effects a limit on the substation injection
params.pi_inverter = 0.0*ones(Nb,1);  % typical value (1/2 ret)
params.beta   = 37;
params.gammaB = 45;
params.gammaS = 19;
%buses_pv = [15 22 31 40 44 50];
%buses_pv = 44;
buses_pv = [44 50];
b_pv = zeros(Nb,1);
b_pv(buses_pv) = 1;
%nominal_pv = 2*b_pv; % smaller PV systems than in SCE model
nominal_pv = 5*b_pv; %SCE 56 nodes (Gan, Li, Topcu and Low)
params.s2_inverter = (1.2*nominal_pv).^2;
inverter_pf = 0.85; % Dall'Anese, Dhople, and Giannakis, 2014
params.phi_inverter = b_pv*tan(acos(inverter_pf));
​
params.alpha = 0.05;
​
%%
v_bounds_tight = struct();
v_bounds_tight.v_upper = 1.02.^2*ones(Nb, 1);
v_bounds_tight.v_lower = 0.98.^2*ones(Nb, 1);
​
v_bounds_loose = struct();
v_bounds_loose.v_upper = 1.03.^2*ones(Nb, 1);
v_bounds_loose.v_lower = 0.97.^2*ones(Nb, 1);
​
v0_bounds = struct();
v0_bounds.v_upper = 1.03.^2;
v0_bounds.v_lower = 0.97.^2;
​
%%
load_max_pf = 0.85; load_phi = tan(acos(load_max_pf));
tnomi_p_load = 1; %how many times the nominal load is the mean
stdev_p_load = 0.2; %standard deviation of the random var
stdev_q_load = load_phi*(tnomi_p_load/3 - stdev_p_load);
% This line adjusts the reactive load's stdev_q considering that 
% the "worst-case" power factor takes place when
% the active load is 3*stdev_p below the mean and reactive load
% is 3*stdev_q in absolute value.
prop_p_avail = 0.5; %proportion of the available p that is 
% randomized via a uniform distribution.
​
n_rlz = 500; % number of realizations of the random vars
hyp.seed = 20;
​
rng(hyp.seed);
random_vars = struct();
random_vars.p_load = ...tnomi_p_load*nominal_loads(2:end)*ones(1, n_rlz) ...+ stdev_p_load*diag(nominal_loads(2:end))*randn(Nb, n_rlz);
random_vars.q_load = ...stdev_q_load*diag(nominal_loads(2:end))*randn(Nb, n_rlz);
random_vars.pinv_available = ...diag(nominal_pv)*(1-prop_p_avail*rand(Nb, n_rlz));
​
random_vars_mean = struct();
random_vars_mean.p_load = tnomi_p_load*nominal_loads(2:end);
random_vars_mean.q_load = 0*nominal_loads(2:end);
random_vars_mean.pinv_available = (1-prop_p_avail/2)*nominal_pv;
​
first_stage_initial = solve_average (benchmark, params, ...random_vars_mean, v_bounds_tight);
​
%nu_initial = 0.2;
​
%%
hyp.n_iterations = n_rlz;
hyp.epsilon0_p0 = 4/50/5;
hyp.epsilon0_v0 = 0.02/50;
hyp.epsilon0_pd = 0.3/50;
hyp.mu0         = 1.5*50*3;
hyp.evaluate_output = 0;
%hyp.stepsize_mode = 'constant';
hyp.stepsize_mode = 'O(1/sqrt(k))';
hyp.precision = 'low';
hyp.r = 0.5;
nu_upper_initial = zeros(Nb, 1); nu_upper_initial(1) = 0;  %0.8;
nu_lower_initial = zeros(Nb, 1); nu_lower_initial(36) = 0; %0.6;
results = stochastic_solver_avg(benchmark, ...first_stage_initial, nu_lower_initial, nu_upper_initial, ...random_vars, params, ...v_bounds_tight, v_bounds_loose,  v0_bounds, hyp, ...struct('plot', 1));
​
%%
filename = ['run-' datestr(now)];
filename(16)='_';
filename(filename==':') = [];
save(filename)
display(['Saved ' filename]);
beep

部分程序结果

4 下载链接

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

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

相关文章

计算机网络——25Internet-Protocol

Internet Protocol 互联网中的网络层 主机、路由器中的网络层功能 IP数据报格式 项目说明ver版本号,如Ipv4就是0100head len头部的长度,一般头部是20个字节(也就是上图中的5行),但是也有可选项,也就是头部是变长的,因…

【C语言】指针基础知识(二)

一,指针变量类型的意义 1,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。 例如:char* 的指针解引⽤访问⼀个字节,int* 的指针解引⽤访问四个字节,short*…

[SAP MM] 名词专业术语解释

采购凭证 采购凭证通常是一种证明文件,用于记录和跟踪特定时间点的采购活动 采购凭证是指企业在采购物品或服务时所开立的一种凭证,用于记录采购的信息和流程 采购凭证通常包括采购申请、采购订单、采购合同等,其中采购订单是最常用的采购…

C语言UNIX域套接字CS模型

实验目标: 1 实现基于流的unix域套接字通信cs模型 2 实现基于数据报的unix域套接字通信cs模型 3 可以观察到CS两端的完整启动退出流程,为了实现这一目标仅进行一次通信 实验心得: 1 使用unlink避免地址冲突 清理资源 2 传统udp在首次sendto时系统临时分配端口,在套接字关…

周末分享一篇关于html和http的文章吧

前面咱们说了https://blog.csdn.net/luohaitao/article/details/136974344(说道说道JSP和HTTP吧-CSDN博客),把http的方法和jsp中httpservle对象的方法对上号了,其实从开发的角度看,jsp就是html中混入了java的服务端代码…

Rust并发编程thread多线程和channel消息传递

安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。 并发(concurrent)的概念是指程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是"同…

DNS、DNS劫持与HTTPDNS:原理、应用与安全分析

文章目录 一、DNS原理和应用1.1 原理1.2 应用 二、DNS劫持的场景和原因分析2.1 场景2.2 原因分析 三、HTTPDNS的应用场景3.1 应用场景3.2 HTTPDNS服务商 四、总结 一、DNS原理和应用 DNS(Domain Name System,域名系统)是互联网的一项核心服务…

人工智能之Tensorflow批标准化

批标准化(Batch Normalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深,训练会越来越困难,收敛速度会很慢,常常会导致梯度消失问题。梯度消失问题是在神经网络中,当前…

chatgpt和 github copilot chat哪个更强

chatgpt大家应该都不陌生 ChatGPT 是由 OpenAI 开发的一种基于 GPT(生成式预训练模型)的聊天机器人。它可以生成语言上下文相关的响应,从而进行自然语言对话。ChatGPT 利用大规模的语言数据进行预训练,并通过微调或在线学习来适应…

【云开发笔记No.12】再说测试

一、自动化测试 自动化测试是软件开发过程中的重要环节,旨在通过自动化工具来执行测试用例,从而验证软件的功能、性能、安全性等方面是否符合预期。自动化测试能够显著提高测试效率,减少人为错误,并持续监控软件的质量。 关键技…

微服务(基础篇-002-Ribbon)

目录 Ribbon负载均衡(1) 负载均衡的原理(1.1) 负载均衡策略(1.2) Ribbon-IRule(1.2.1) 修改负载均衡的方法(1.2.2) 懒加载(1.3) 饥饿加载(1…

ES聚合查询

ES聚合查询 {"query": {"bool": {"must": [{"terms": {"orderId": ["58880570952990","58882596943998","58880654706404"]}},{"term": {"billType": "110"}…

【Python操作基础】——for语句用法

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

力扣74---搜索二维矩阵

目录 题目描述: 思路: 代码: 题目描述: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 targ…

mac 解决随机出现的蓝色框

macbookair为什么打字的时候按空格键会出现蓝色框? - 知乎

求任意数任何可能的乘方的个位数

形如该题:用到了循环节 1 2 4 8 6 3 9 7 1 4 6 5 6 7 9 3 1 8 4 2 6 9 1 如图为一到十的数字乘方的个位数的循环,可以看出有的数1个数一循环,有的是2个数一循环,有的是4个一循环。 例题: 则4肯定是所有所有个位数n次方…

前端学习笔记 | JS进阶

一、作用域 1、局部作用域 (1)函数作用域 (2)块作用域 let和const会产生块作用域 ,而var不会产生块作用域 2、全局作用域 script标签和js文件的【最外层】变量 3、作用域链 本质:底层的变量查找机制 4、JS…

js 数组方法汇总(ES5数组方法,ES6新增的数组方法)

ES5,ES6数组方法汇总 ES5 数组方法:: concat():合并多个数组为一个数组。 var array1 [1, 2, 3];var array2 [4, 5, 6];var newArray array1.concat(array2);console.log(newArray); // [1, 2, 3, 4, 5, 6]join():将数组的所…

Docker(二):Docker常用命令

docker 查看docker支持的所有命令和参数。 ➜ ~ docker Management Commands:config Manage Docker configscontainer Manage containersimage Manage imagesnetwork Manage networksnode Manage Swarm nodesplugin Manage pluginssecret …

《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)

1.简介 对于前端隐藏元素,一直是selenium自动化定位元素的隐形杀手,脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,这一篇只为交流隐藏元素自动化定位处理方法以及宏哥…