风力发电系统的随机调度研究(matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥


🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


座右铭:行百里者,半于九十。

📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现

💥1 概述

文献来源:

时域调度模拟是预测风力发电系统运行成本最有效的工具,因为它可以表示限制热电厂、储能和需求侧措施平衡行动的跨时间约束。高风侵度要求及时调度决策能够反映风馈的不确定性,因此使用随机单元承诺(SUC)和滚动规划生成调度决策是可取的。然而,计算负担可能使这种方法在长时间的模拟中不切实际。我们提出了SUC问题的一个有效公式,设计用于单母线电力系统调度仿真。

与传统的SUC技术不同,该公式采用了基于分位数的情景树结构,避免了对外生运营储备的需求。在长达一年的大型系统模拟中,我们比较了各种树拓扑的性能。与固定分位数确定性方法相比,简单的基于分位数的树在统计上具有显著的成本改进,并且与基于蒙特卡罗生成场景的树相比更优。

任何国家的政府都致力于大幅降低其电力部门的碳强度。脱碳的电力系统可能具有以下特点:大的、相对不灵活的核基载;间歇性和部分不可预测的可再生能源的高渗透率,在许多国家将由风能主导;化石燃料车队的载客率比目前低得多。因此,大规模风力集成的一个核心挑战是利用灵活性降低的热机组吸收风力发电的能力。

衡量系统吸收风的能力的一个指标是风的不确定性成本,即由于短期风的不确定性而运行系统的额外成本。简单的统计分析无法告诉我们这一成本,因为平衡风力间歇性的可调度要素受制于限制其响应能力的跨时间约束。这些限制的例子是热发电机的启动时间,以及对可存储能量的限制。为了理解这些限制对系统吸收风的能力的影响,我们必须在时域内模拟整个系统的调度,在一定程度上考虑跨时间约束。如[1]所述,在许多研究中使用时域模拟来评估集成风的成本。

📚2 运行结果

部分代码:

%%

clearvars

clc

%% Inputs

load('Data\InputData.mat')

load('Data\SystemParameters.mat')

% The units are GW, k/GW and k to keep the range of variables closer

%% Define the optimisation model:

Load_balance = [];

Aux_constraints = [];

Constraints_Gen_limits = [];

Constraints_Ramp_limits = [];

Cost_node = [];

scenarios = size(Wind_scenarios,1);

% Create some matrices of DVs:

Wind_curtailed = sdpvar(scenarios,time_steps);

Load_curtailed = sdpvar(scenarios,time_steps);

% And some matrices of constraints:

Aux_constraints = [Aux_constraints,...

0 <= Wind_curtailed <= Wind_scenarios,...

0 <= Load_curtailed <= ones(scenarios,1)*Demand];

tic % Start time counter

for k=1:time_steps

%% Define DVs

x{k} = sdpvar(scenarios,num_Clusters);

% x{k} = [x1 x2 x3... (scenario 1)

% x1 x2 x3... (scenario 2)]; % Power generated by each Cluster in each scenario

y{k} = intvar(scenarios,num_Clusters);

% y{k} = [y1 y2 y3... (scenario 1)

% y1 y2 y3... (scenario 2)]; % Commitment decision for each Cluster in each scenario

% FORCE y{k} to be lower than number of CCGTs and number of OCGTs

Aux_constraints = [Aux_constraints,...

zeros(scenarios,1)*num_Gen <= y{k} <= ones(scenarios,1)*num_Gen];

% NO INITIAL COMMITMENT

% if k==1

% Aux_constraints = [Aux_constraints,...

% y{n,k}==Initial_commitment];

% end

% Fix commitment decision of inflexible_gen to be same as in the first

% scenario in this time-step "k"

Aux_constraints = [Aux_constraints,...

(ones(scenarios,1)*inflexible).*y{k} == ones(scenarios,1)*(inflexible.*y{k}(1,:))];

% Define DVs for generators started up

startup_DV{k} = sdpvar(scenarios,num_Clusters);

if k==1

Aux_constraints = [Aux_constraints,...

startup_DV{k} == y{k}];

else

% These 2 constraints model the startup, it's easy to verify

% that they indeed do:

Aux_constraints = [Aux_constraints,...

startup_DV{k} >= y{k} - y{k-1},...

startup_DV{k} >= zeros(scenarios,num_Clusters)];

end

%% Constraints:

Load_balance = [Load_balance,...

sum(x{k},2)+Wind_scenarios(:,k)-Wind_curtailed(:,k) == ones(scenarios,1)*Demand(k)-Load_curtailed(:,k)];

% Generation limits:

for i=1:num_Clusters

Constraints_Gen_limits = [Constraints_Gen_limits,...

y{k}.*(ones(scenarios,1)*Gen_limits(:,1)') <= x{k} <= y{k}.*(ones(scenarios,1)*Gen_limits(:,2)')];

end

% % Ramp limits:

% if k>1

%

% Constraints_Ramp_limits = [Constraints_Ramp_limits,...

% -tau*(ones(scenarios,1)*Ramp_limits(:,1)') <= x{k}-x{k-1} <= tau*(ones(scenarios,1)*Ramp_limits(:,2)')];

%

% end

%% Finally, define the nodal costs:

Cost_node = horzcat(Cost_node,...

sum((ones(scenarios,1)*stc').*startup_DV{k},2)... % Startup costs

+ tau*(sum((ones(scenarios,1)*NLHR').*y{k},2)... % fixed generation costs

+ sum((ones(scenarios,1)*HRS').*x{k},2)... % variable generation costs

+ VOLL*Load_curtailed(:,k))); % load shed cost

end

time.BuildingModel = toc;

tic

Objective = sum(sum(prob_nodes.*Cost_node));

Constraints = [Aux_constraints,...

Load_balance,...

Constraints_Gen_limits

Constraints_Ramp_limits];

options = sdpsettings('solver','gurobi','gurobi.MIPGap',0.1e-2);

solution = optimize(Constraints,Objective,options)

time.Optimisation = toc;

%% Analyse results

tic

sol.Wind_curtailed = value(Wind_curtailed);

sol.Load_curtailed = value(Load_curtailed);

sol.Cost = [];

sol.Cost_StartUp = [];

sol.Cost_NLHR = [];

sol.Cost_HRS = [];

sol.Cost_VOLL = [];

sol.Check_Load_balance(scenarios,time_steps) = 0;

for k=1:time_steps

sol.x{k} = value(x{k});

sol.y{k} = value(y{k});

sol.startup_DV{k} = value(startup_DV{k});

sol.Cost = horzcat(sol.Cost,...

sum((ones(scenarios,1)*stc').*sol.startup_DV{k},2)... % Startup costs

+ tau*(sum((ones(scenarios,1)*NLHR').*sol.y{k},2)... % fixed generation costs

+ sum((ones(scenarios,1)*HRS').*sol.x{k},2)... % variable generation costs

+ VOLL*sol.Load_curtailed(:,k)));

sol.Cost_StartUp = horzcat(sol.Cost_StartUp,...

sum((ones(scenarios,1)*stc').*sol.startup_DV{k},2));

sol.Cost_NLHR = horzcat(sol.Cost_NLHR,...

tau*(sum((ones(scenarios,1)*NLHR').*sol.y{k},2)));

sol.Cost_HRS = horzcat(sol.Cost_HRS,...

tau*(sum((ones(scenarios,1)*HRS').*sol.x{k},2)));

sol.Cost_VOLL = horzcat(sol.Cost_VOLL,...

tau*(VOLL*sol.Load_curtailed(:,k)));

sol.Check_Load_balance(:,k) = sum(sol.x{k},2)+Wind_scenarios(:,k)-sol.Wind_curtailed(:,k)-(ones(scenarios,1)*Demand(k)-sol.Load_curtailed(:,k));

end

time.GetSolution = toc;

clearvars -except Wind_scenarios Demand options sol solution time

save('Solution.mat')

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码实现

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

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

相关文章

面向订单交付的ETO项目管理数字化解决方案︱高远科技PMO副总经理董方好

北京高远华信科技有限公司PMO副总经理董方好先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;面向订单交付的ETO项目管理数字化解决方案。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 订单…

基于matlab开发和评估停车场场景中的视觉定位算法(附源码)

一、前言 本示例展示了如何使用虚幻引擎模拟环境中的合成图像数据开发视觉定位系统。 获取基本事实以评估定位算法在不同条件下的性能是一项具有挑战性的任务。与使用高精度惯性导航系统或差分GPS等更昂贵的方法相比&#xff0c;不同场景下的虚拟仿真是一种经济高效的方法来获…

电脑免费简单又好用的记事本app软件推荐

很多职场人士在办公时都需要用到电脑&#xff0c;在电脑上有很多好用的工具软件可以用来辅助工作的展开&#xff0c;其中记事本类的App就有不少优质软件存在。那电脑免费简单又好用的记事本app软件推荐哪些呢&#xff1f;这里小编就以自己的Windows10电脑为例&#xff0c;为大家…

MCU是否会从ADAS域控制器消失

摘要&#xff1a; ADAS架构及MCU功能概览、未来ADAS架构的两种方案、MCU是否从ADAS域消失的一点思考 ADAS的装机量和渗透率再提升&#xff0c;尤其L2及L2级&#xff1b;那么随着ADAS域控制器主控芯片的增强&#xff0c;未来&#xff0c;MCU是否还会存在&#xff1f; 转自佐思汽…

网络编程4——传输层TCP协议的三大安全机制:三次握手四次挥手+确认应答机制+超时重传机制

文章目录 前言一、TCP协议段与机制TCP协议的特点TCP报头结构TCP协议的机制与特性 二、TCP协议的 连接管理机制 TCP建立连接&#xff1a;三次握手 TCP断开连接&#xff1a;四次挥手 三、TCP协议的 确认应答机制 四、TCP协议的 超时重传机制 总结 前言 本人是一个刚刚上路的I…

基础算法-子矩阵的和

1 课堂笔记 2 代码 3.代码解析 #include<iostream> using namespace std; const int maxn1010; int a[maxn][maxn],s[maxn][maxn]; int n,m,q,x1,y1,x2,y2;int main(){scanf("%d%d%d",&n,&m,&q);//为数组赋值for(int i1;i<n;i){for(int j1;j&…

《黑马头条》 内容安全 自动审核 feign 延迟任务精准发布 kafka

04自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的 内容&#xff08;文本内容和图片&#xff09; 3 借助 第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

Hadoop/Hive/Spark小文件处理

什么是小文件&#xff1f; 小文件指的是文件size比HDFS的block size小很多的文件。Hadoop适合处理少量的大文件&#xff0c;而不是大量的小文件。 hadoop小文件常规的处理方式 1、小文件导致的问题 首先&#xff0c;在HDFS中&#xff0c;任何block&#xff0c;文件或者目录…

E2. Rudolf and Snowflakes (hard version) codeforces1846E2

Problem - E2 - Codeforces 题目大意&#xff1a;在无向图中&#xff0c;初始有一个点&#xff0c;然后将k个点连接到1号点上&#xff0c;之后每次操作分别将k歌点连接到之前新加的点上&#xff0c;这样的操作至少有1次&#xff0c;t次询问&#xff0c;每次询问给出一个数n&am…

Mockplus Cloud - June 2023crack

Mockplus Cloud - June 2023crack 添加便签以澄清情节提要上的任何设计概念。 新的流程图工具直接在情节提要上可视化任何设计流程和过程。 添加了在发布到Mockplus Cloud时删除RP页面的功能。 添加设计注释时包括图像和链接。 添加了一个新的提示&#xff0c;用于在断开互联网…

vue使用富文本编辑器 Wangeditor 可显示编辑新增回显禁用

1.效果图 2.安装依赖 npm install wangeditor 3.在main.js 全局引入 富文本组件 import editorBar from "/components/editor/editor.vue";Vue.component(editorBar, editorBar) 全局引入页面使用 <editor-bar v-model"form.nr" :flag"false&quo…

JVM源码剖析之Java对象创建过程

关于 "Java的对象创建" 这个话题分布在各种论坛、各种帖子&#xff0c;文章的水平参差不齐。并且大部分仅仅是总结 "面试宝典" 的流程&#xff0c;小部分就是copy其他帖子&#xff0c;极少能看到拿源码作为论证。所以特意写下这篇文章。 版本信息如下&…