基于分布鲁棒联合机会约束的能源和储备调度(Matlab代码实现)
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 文献来源
🌈4 Matlab代码实现
💥1 概述
本文为可再生能源渗透率高的联合电力和天然气系统的能源和储备调度制定了两阶段随机程序。数据驱动的分布式鲁棒机会约束确保了不存在高概率的甩负荷和可再生溢出。我们使用条件风险值近似和线性决策规则有效地解决了这个问题。样本外实验表明,该模型在没有机会约束的情况下主导了相应的随机程序,该程序明确地模拟了甩负荷和可再生能源溢出的影响。
风能、太阳能和潮汐能等可再生能源的增加部署极大地改变了发电结构。可再生能源虽然有利于可持续发展,但由于其间歇性和有限的可预测性,会损害输电系统的稳定性[27]。因此,广泛建造柔性燃气发电厂(GFPP),以取代退役的热电厂或核电站,以平衡不稳定的可再生能源发电,因此,电力和天然气系统的紧密耦合是可以预见的[28]。这种观点促使我们同时研究这两个系统在存在不确定的可再生能源的情况下,如果实际的可再生能源产量与其预测值不符,则日前调度可能无法实施。在这种情况下,传统发电厂需要实时调整其生产水平。如果在某些极端情况下,这些发电厂不够灵活,无法恢复输电系统的完整性,那么可再生能源泄漏或甩负荷可能变得必要。然而,这种激烈的措施带来了高昂的经济成本。
能源和储备调度问题可以通过鲁棒优化[3]、随机规划[26]和机会约束规划[24]的方法来解决。稳健的优化模型最大限度地降低了日前调度的成本,以及在规定的不确定性集合内最坏情况下实现可再生预测误差的纠正补救措施[4,35]。然而,对最坏情况的关注以及在线性决策规则中解决更大问题实例的必要性可能会导致过于保守的解决方案
另一方面,随机规划模型在规定的离散分布下使预期成本最小化[21,23],但除非离散点的数量随问题维度呈指数增长,否则其解决方案可能表现出较差的样本外性能。最后,机会约束规划模型不考虑可再生能源泄漏和甩负荷,但确保在没有这些严重的补救措施的情况下,系统保持高概率稳定[5,18,25]。当难以或甚至不可能以有意义的方式将追索权和不可行性货币化时,机会受限的编程公式尤其具有吸引力。不利的是,这些公式通常不能保证产生可行的可实施的第一阶段解决方案。
本文的结果表明,为了最小化样本外成本,解决分布式鲁棒机会约束程序可能比(看起来更现实的)两阶段分布式鲁棒优化问题更好。这可能令人惊讶,因为机会约束计划忽略了所有低概率情况,在这些情况下,电力系统的稳定性只能通过成本高昂的追索行动(如甩负荷和可再生能源泄漏)来维持,而两阶段问题说明了所有可能的情况,并真实地模拟了必要的追索行动及其成本。
📚2 运行结果
文章运行结果:
部分代码:
function[sol] = DRO_CVaR_ICC(si,DRO_param,jcc)
% This script implements the Bonferroni approximation
yalmip('clear')
% Getting the number of thermals power plants, wind farms, scenarions,
% transmission lines and nodes
Nunits = size(si.Pmax,1);
Nwind = size(si.Wmax,1);
Nscen = size(si.Wscen,2);
% Definition of variables
p = sdpvar(Nunits, 1); % Day-ahead power production from thermal power plants
ru = sdpvar(Nunits, 1); % Upward reserve dispatch from thermal power plants
rd = sdpvar(Nunits, 1); % Downward reserve dispatch from thermal power plants
Y = sdpvar(Nunits, Nwind, 'full'); % Linear decision rule for real-time power production
s_obj = sdpvar(1, Nscen); % sigma variable for obj
lambda_obj = sdpvar(1, 1); % lambda variable for obj
% create x by stacking up p, ru and rd
x = [p; ru; rd];
% Constraints set
CS = [];
% Day-ahead constraints
CS = [CS, si.Pmin <= p - rd, p + ru <= si.Pmax, 0 <= ru <= si.ResCap, 0 <= rd <= si.ResCap];
CS = [CS, sum(p) + sum(si.Wmax.*si.mu) - sum(si.D) == 0];
CS = [CS, sum(Y, 1) == -si.Wmax'];
% Run a for-loop to add the constraints related to the individual cvar
% The set of code below is generic, it can be copied and paste for any
% structure joint chance constraint of interest
% find the number of Individual chance constraints we have
nICC = 0;
for j=1:size(jcc, 1)
nICC = nICC + size(jcc{j, 1}, 1);
end
for j=1:size(jcc, 1)
A_C{j,1} = jcc{j,1};
B_C{j,1} = jcc{j,2};
C_C{j,1} = jcc{j,3};
b_C{j,1} = jcc{j,4};
end
A = cell2mat(A_C);
B = cell2mat(B_C);
C = cell2mat(C_C);
b = cell2mat(b_C);
for j=1:size(jcc, 1)
eps_C(j) = jcc{j,5}/size(jcc{j, 1}, 1);
end
eps = [repmat(eps_C(1),size(jcc{1, 1}, 1),1);repmat(eps_C(2),size(jcc{2, 1}, 1),1);repmat(eps_C(3),size(jcc{3, 1}, 1),1)];
% create variables
s = sdpvar(nICC, Nscen, 'full');
lambda = sdpvar(nICC, 1);
tau = sdpvar(nICC, 1);
for j = 1:nICC
CS = [CS, DRO_param.rho*lambda(j) + sum(s(j, :))/Nscen <= 0];
CS = [CS, tau(j) <= s(j,:)];
CS = [CS, (1 - 1/eps(j))*repmat(tau(j), 1, Nscen) + 1/eps(j)*( repmat(A(j,:)*x - b(j), 1, Nscen) + (B(j,:)*Y+C(j,:))*si.xi ) <= s(j,:) ];
CS = [CS, norm(1/eps(j)*(B(j,:)*Y + C(j,:)), DRO_param.dual_norm) <= lambda(j)];
end
% Build the objective function
Obj = si.Cr1'*ru + si.Cr2'*rd + si.C'*p + DRO_param.rho*lambda_obj + 1/Nscen * sum(s_obj);
CS = [CS, si.C'*Y*si.xi <= s_obj];
CS = [CS, norm( Y' * si.C, DRO_param.dual_norm) <= lambda_obj];
% Settings
optim_options = sdpsettings('solver', 'gurobi','gurobi.TimeLimit',1000,'gurobi.NumericFocus',3,'verbose',0);
% Solve
sol = optimize(CS, Obj, optim_options);
sol.p = value(p);
sol.Y = value(Y);
sol.ru = value(ru);
sol.rd = value(rd);
sol.Y = value(Y);
sol.fy = si.Qg*value(p) + si.Qw*si.DiagWmax * si.mu - si.Qd*si.D;
sol.fY = si.Qg*value(Y) + si.Qw*si.DiagWmax;
sol.q = si.PG * value(p);
sol.qY = si.PG * value(Y);
sol.Obj = value(Obj);
sol.Flag = sol.problem;
end
🎉3 文献来源
部分理论来源于网络,如有侵权请联系删除。
🌈4 Matlab代码实现
相关文章:

基于分布鲁棒联合机会约束的能源和储备调度(Matlab代码实现)
👨🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…...
ETL和数据建模
一、什么是ETL ETL是数据抽取(Extract)、转换(Transform)、加载(Load )的简写,它是将OLTP系统中的数据经过抽取,并将不同数据源的数据进行转换、整合,得出一致性的数据&…...

ccc-pytorch-回归问题(1)
文章目录1.简单回归实战:2.手写数据识别1.简单回归实战: 用 线性回归拟合二维平面中的100个点 公式:ywxbywxbywxb 损失函数:∑(yreally−y)2\sum(y_{really}-y)^2∑(yreally−y)2 迭代方法:梯度下降法,…...

【JAVA八股文】框架相关
框架相关1. Spring refresh 流程2. Spring bean 生命周期3. Spring bean 循环依赖解决 set 循环依赖的原理4. Spring 事务失效5. Spring MVC 执行流程6. Spring 注解7. SpringBoot 自动配置原理8. Spring 中的设计模式1. Spring refresh 流程 Spring refresh 概述 refresh 是…...

二叉树的相关列题!!
对于二叉树,很难,很难!笔者也是感觉很难!虽然能听懂课程,但是,对于大部分的练习题并不能做出来!所以感觉很尴尬!!因此,笔者经过先前的那篇博客,已…...

Java设计模式 - 原型模式
简介 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直…...
深度学习中的 “Hello World“
Here’s an interesting fact—Each month, there are 186.000 Google searches for the keyword “deep learning.” 大家好✨,这里是bio🦖。每月有超18万的人使用谷歌搜索深度学习这一关键词,是什么让人们对深度学习如此感兴趣?接下来请跟随我来揭开深度学习的神秘面纱。…...

购买WMS系统前,有搞清楚与ERP仓库模块的区别吗
经常有朋友在后台询问我们关于WMS系统的问题,他们自己也有ERP系统,但是总觉得好像还差了点什么,不知道是什么。今天,我想通过本文,来向您简要地阐述ERP与WMS系统在仓储管理上的不同之处。 ERP仓库是以财务为导向的&…...

一文吃透 Spring 中的IOC和DI
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

分布式任务处理:XXL-JOB分布式任务调度框架
文章目录1.业务场景与任务调度2.任务调度的基本实现2.1 多线程方式实现2.2 Timer方式实现2.3 ScheduledExecutor方式实现2.4 第三方Quartz方式实现3.分布式任务调度4.XXL-JOB介绍5.搭建XXL-JOB —— 调度中心5.1 下载与查看XXL-JOB5.2 创建数据库表5.3 修改默认的配置信息5.4 启…...

【源码解析】Ribbon和Feign实现不同服务不同的配置
Ribbon服务实现不同服务,不同配置是通过RibbonClient和RibbonClients两个注解来实现的。RibbonClient注册的某个Client配置类。RibbonClients注册的全局默认配置类。 Feign实现不同服务,不同配置,是根据FeignClient来获取自定义的配置。 示…...

【webpack5】一些常见优化配置及原理介绍(二)
这里写目录标题介绍sourcemap定位报错热模块替换(或热替换,HMR)oneOf精准解析指定或排除编译开启缓存多进程打包移除未引用代码配置babel,减小代码体积代码分割(Code Split)介绍预获取/预加载(prefetch/pre…...

力扣sql简单篇练习(十九)
力扣sql简单篇练习(十九) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 用count是不会统计为null的数据的 SELECT query_name,ROUND(AVG(rating/position),2) quality,ROUND(count(IF(rating<3,rating,null))/count(r…...
线段树c++
前言 在谈论到种种算法知识与数据结构的时候,线段树无疑总是与“简单”和“平常”联系起来的。而这些特征意味着,线段树作为一种常用的数据结构,有常用性,基础性和易用性等诸多特点。因此,今天我来讲一讲关于线段树的话题。 定义 首先,线段树是一棵“树”,而且是一棵…...

HTML+CSS+JavaScript学习笔记~ 从入门到精通!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、HTML1. 什么是HTML?一个完整的页面:<!DOCTYPE> 声明中文编码2.HTML基础①标签头部元素标题段落注释水平线文本格式化②属性3.H…...

LeetCode 430. 扁平化多级双向链表
原题链接 难度:middle\color{orange}{middle}middle 题目描述 你会得到一个双链表,其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指针可能指向一个单独的双向链表,也包含这些特殊的节点。这些子列表可以有一…...

2.5|iot|第1章嵌入式系统概论|操作系统概述|嵌入式操作系统
目录 第1章: 嵌入式系统概论 1.嵌入式系统发展史 2.嵌入式系统定义* 3.嵌入式系统特点* 4.嵌入式处理器的特点 5.嵌入式处理分类 6.嵌入式系统的应用领域及嵌入式系统的发展趋势 第8章:Linux内核配置 1.内核概述 2.内核代码结构 第1章…...
一文教会你使用ChatGPT画图
引言 当今,ChatGPT在各行各业都有着广泛的应用,其自然语言处理技术也日益成熟。ChatGPT是一种被广泛使用的技术,除了能够生成文本,ChatGPT还可以用于绘图,这为绘图技术的学习和应用带来了新的可能性。本文将介绍如何利用ChatGPT轻松绘制各种形状,为对绘图技术感兴趣的读…...
Java资料分享
随着Java开发的薪资越来越高,越来越多人开始学习 Java 。在众多编程语言中,Java学习难度还是偏高的,逻辑性也比较强,但是为什么还有那么多人要学Java呢?Java语言是目前流行的互联网等企业的开发语言,是市面…...

yum/vim工具的使用
yum 我们生活在互联网发达的时代,手机电脑也成为了我们生活的必须品,在你的脑海中是否有着这样的记忆碎片,在一个明媚的早上你下定决心准备发奋学习,“卸载”了你手机上的所有娱乐软件,一心向学!可是到了下…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...