当前位置: 首页 > news >正文

【更正版】梯级水光互补系统最大化可消纳电量期望短期优化调度模型

目录

1 主要内容

目标函数:

约束条件:

线性化处理:

流程示意:

2 部分代码

3 程序结果

4 下载链接


主要内容

该程序参考文献《梯级水光互补系统最大化可消纳电量期望短期优化调度模型》,构建了以最大化整体可消纳电量期望为目标的梯级水光互补系统短期优化调度模型。此模型以机组作为最小调度单元,对电站约束、机组约束以及电网约束展开精细化建模。通过在电站和时段之间合理调配梯级负荷,深度挖掘梯级水电在电网供电支撑与光伏互补协调方面的双重作用,进而有效提升互补系统的整体消纳水平。

在模型求解环节,运用分段线性逼近、引入0-1整数变量、发电水头离散等一系列线性化方法与建模技巧,对模型中的非线性约束进行处理,将原始模型成功转换为混合整数线性规划问题。随后,在Matlab环境中借助CPLEX工具实现求解,最终实现了对包含4个水电站、15 台机组以及2个光伏群所构建的互补系统的优化调度。(源代码在机组对应关系等方面存在问题,本次进行更正后发布)

目标函数:

以梯级水光互补系统的可消纳电量期望最大为目标,程序未考虑每种场景下的概率,因此未考虑光伏的不确定性,这部分功能不难实现,期待下次将这部分进行完善。

约束条件:

模型实现的约束包括:

电站约束
机组约束
电网约束​​

上述约束为约束大类,具体约束内容可参考原文献。

线性化处理:

流程示意:

步骤 1:读取基础数据并设置计算条件。包括区间流量、梯级发电计划、光伏预测出力、光伏历史预测与实际出力、分区断面约束、爬坡能力等。

步骤 2:模型转换处理。采用 2.1 节所述模型转换方法,对非线性约束进行线性化处理。

步骤 3:光伏出力场景构建。根据计划日光伏预测出力以及 2.2 节所述方法构建光伏出力场景。

步骤 4:模型求解。将目标函数与转化后的约束结合构成的 MILP 模型,在Matlab环境中,调用 CPLEX 求解类,实现模型求解。

步骤 5:结果输出。输出互补系统整体可消纳电量期望值,不同组合场景下的电站出力、机组出力、机组开停机、出库流量、水库水位等结果信息。

部分代码

%% 清除内存空间
clc
clear
close all
warning off
yalmip('clear')
​
%% 参数设置
S = 1;                              % 光伏出力的场景数
I = 4;                              % 水电站数目
J = 2;                              % 光伏电厂数目
G = 4;                              % 约束断面数
T = 96;                             % 调度期总时段数
dt = 0.15;                          % 调度时间间隔
tau = 1;                            % 电站与其上游电站的水流滞时
Z_up_max = [1140 970 837 760];      % 坝前水位上限
Z_up_min = [1071 936 814 709];      % 坝前水位下限
Z_up_begin = [1076 950 822 720];    % 调度期初始水位
Z_up_end = [1076 950 822 720];      % 调度期末控制水位
dZ = [0.5 0.1 0.3 0.2];             % 允许的调度期末水位偏差
Q_max = [3866 11142 15956 18360];   % 出库流量上限
Q_min = [866 1142 5956 8360];       % 出库流量下限
P_hydro_max = [600 695 600 1250];   % 水电站的出力上限
P_hydro_min = [100 125 100 150];    % 水电站的出力下限
Ni = [3 4 3 5];                     % 电站i所包含的机组总数
Y_i = ...                           % 各水电站包含的机组集合{[1 2 3],[4 5 6 7],[8 9 10],[11 12 13 14 15]};
N = sum(Ni);                        % 该区域机组总数
P_in_max = ...                      % 第n台机组的出力上限[200 200 200 190 190 190 125 200 200 200 250 250 250 250 250];
P_in_min = ...                      % 第n台机组的出力下限[45 45 45 40 40 40 30 0 0 0 50 50 50 70 70];
Q_p_int_max = ...                   % 电站i的发电流量上限[490.5 490.5 490.5 632.2 632.2 632.2 632.2 994.5 994.5 994.5 1250 1250 1250 1250 1250];
Q_p_int_min = 0;                    % 电站i的发电流量下限
P_1_3nk_max = ...                   % 电站1-3的机组第k个振动区的出力上限[90 90 90 110 110 110 80 130 130 130];
P_1_3nk_min = ...                   % 电站1-3的机组第k个振动区的出力下限[45 45 45 40 40 40 30 0 0 0];
P_4nk_max = ...                     % 电站4的机组第k个振动区的出力上限[70 70 70 80 80;90 90 90 170 170];
P_4nk_min = ...                     % 电站4的机组第k个振动区的出力下限[50 50 50 70 70;80 80 80 140 140];
T_on_in = 8;                        % 电站 i 的第 n 台机组的最小开机持续时段数
T_off_in = 8;                       % 电站 i 的第 n 台机组的最小停机持续时段数
M_on_in = 8;                        % 电站 i 的第 n 台机组的最大开机次数
dP_in = 60;                         % 电站 i的第 n 台机组的爬坡能力为60MW/15 min
te = 4;                             % 机组在一轮出力升降过程中需持续的最少时段数
% ai = ...                            % 电站 i 的水头损失系数
%     [9 9 9 7 7 7 7 8 8 8 4 4 4 4 4]*1e-8;
% bi = ...                            % 电站 i 的水头损失常数
%     [12 12 12 6 6 6 6 15 15 15 9 9 9 9 9]*1e-5;
​
ai = ... % 电站 i 的水头损失系数
[9 8 4]*1e-8;
bi = ... % 电站 i 的水头损失常数
[12 15 9]*1e-5;
​
P_plan = ...                        % 梯级水电发电计划[2200  2200  2200  2200  2100  2100  2100  2100  2050  2050  2050  2050  2000  2000  1995  1995 ...1995  1900  1900  1900  1995  1995  2100  2100  2205  2205  2310  2310  2415  2520  2625  2650 ...2700  2700  2700  2750  2750  2850  2850  2850  2750  2750  2750  2750  2660  2660  2660  2570 ...2570  2570  2565  2565  2565  2565  2660  2660  2660  2660  2755  2755  2755  2755  2780  2780 ...2780  2780  2800  2800  2755  2755  2755  2755  2755  2800  2800  2800  2800  2850  2850  2850 ...2850  2755  2755  2700  2700  2700  2700  2600  2600  2600  2520  2520  2520  2415  2415  2415];
e = 0.02;                           % 允许偏差
L_gt = [900 2000 800 600];          % 第g个约束断面的负荷容量上限
C_gt = [900 1500 750 500];          % 第g个约束断面的输电容量上限
M_ab = 12;                          % 功率调整(向上和向下)时段数上限
N_pv = [550 1200];                  % 光伏场 j 的装机容量
P_pv0 = ...                         % 光伏场j的预测出力[0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  14  31  68  98  139  175  126  209  229  247  260  274  288  304  309  309  293  288  329  332  325  337  337  299  277  302  206  189  237  164  135  87  67  96  89  44  56  88  40  62  39  9  2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0;0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  25  30  73  84  99  355  446  209  524  313  358  382  521  436  775  744  825  658  706  803  797  703  492  458  526  329  439  408  498  258  337  139  177  164  190  113  73  62  80  41  171  69  23  5  2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0];
P_pv = ...                          % 光伏场j的实际出力[0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   15   32   74   94   133   159   119   203   207   268   251   260   304   330   304   315   267   265   321   346   304   331   317   305   299   275   227   193   229   151   130   88   61   96   84   47   61   83   40   68   39   9   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   00   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   26   32   75   83   102   364   490   213   547   286   328   384   525   438   720   711   749   635   659   729   820   641   488   492   476   326   404   438   451   256   342   138   162   157   192   122   72   63   85   39   159   76   24   5   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ];
dP_pv = abs(P_pv - P_pv0);          % 光伏预测偏差
tau_int = 0.005;                    % 出力曲线的系数
​
%% 决策变量
P_hydro = sdpvar(I,T);              % 水电站i在时段t的出力
P_w = sdpvar(G,T);                  % 第g个约束断面在时段 t 的弃电量
V_it = sdpvar(I,T);                 % 水电站 i 在时段 t 末的库容
I_it = sdpvar(I,T);                 % 水电站i在时段t的入库流量
Q_it = sdpvar(I,T);                 % 电站 i 在时段 t的出库流量
R_it = sdpvar(I,T);                 % 电站i - 1和电站i之间在时段t的区间流量
Q_p_it = sdpvar(I,T);               % 水电站i在时段t的发电流量
Q_d_it = sdpvar(I,T);               % 电站 i 在时段 t 的弃水流量
Z_up_it = sdpvar(I,T);              % 电站i所在水库在时段t的坝前水位
Z_down_it = sdpvar(I,T);            % 水电站i在时段t的入库流量
P_int = sdpvar(N,T);                % 第n台机组在时段t的出力
u_int = binvar(N,T);                % 第n台机组在时段t的开停机状态
Q_p_int = sdpvar(N,T);              % 第n台机组时段 t 的发电流量
y_on_int = binvar(N,T);             % 第n台机组在时段t的启动操作变量
y_off_int = binvar(N,T);            % 第n台机组在时段t的停机操作变量
H_int = sdpvar(N,T);                % 第 n 台机组在时段 t的发电水头
H_loss_int = sdpvar(N,T);           % 第 n 台机组在时段 t的水头损失
P_sgt = sdpvar(G,T);                % 约束断面g在t时段所有机组总出力
theta_1_3ntk = binvar(10,T,2);      % 水电站1-3的机组振动区指示变量
theta_4ntk = binvar(5,T,3);         % 水电站4的机组振动区指示变量
alpha_int = binvar(N,T);            % 1表示时段 t + 1 功率向下调节
beta_int = binvar(N,T);             % 1表示时段 t + 1 功率向上调节
​
%% 目标函数
F = sum(sum(P_hydro) + sum(P_pv) - sum(P_w));
​
%% 约束条件
cons = [];
​
for t = 2:T% 式2cons = [cons , V_it(:,t) == V_it(:,t-1) + 3600*(I_it(:,t) - Q_it(:,t))*dt];cons = [cons , abs(Z_up_it(:,t) - Z_up_it(:,t-1)) <= [0.005;0.02;0.05;0.01]];cons = [cons , abs(V_it(:,t) - V_it(:,t-1)) <= 0.5];% 式3cons = [cons , I_it(1 , t) == R_it(1 , t)];for i = 2:Icons = [cons , I_it(i , t) == Q_it(i - 1 , t - 1) + R_it(i , t)];end
end
cons = [cons , V_it(:,1) == [35;7.2;22;18]];
​
% 式4
cons = [cons , Q_it == Q_p_it + Q_d_it];
​
% 式5
cons = [cons , Z_up_max'*ones(1,T) >= Z_up_it >= Z_up_min'*ones(1,T)];
​
% 式6
cons = [cons , Z_up_it(:,1) == Z_up_begin'];​

程序结果

  • 4 下载链接

相关文章:

【更正版】梯级水光互补系统最大化可消纳电量期望短期优化调度模型

目录 1 主要内容 目标函数&#xff1a; 约束条件&#xff1a; 线性化处理&#xff1a; 流程示意&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《梯级水光互补系统最大化可消纳电量期望短期优化调度模型》&#xff0c;构建了以最大化整体可…...

基于AnolisOS 8.6安装GmSSL 3.1.1及easy_gmssl库测试国密算法

测试环境 Virtual Box&#xff0c;AnolisOS-8.6-x86_64-minimal.iso&#xff0c;4 vCPU, 8G RAM, 60 vDisk。最小化安装。需联网。 系统环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux关闭 cat /etc/selinux/co…...

vue3 实际应用 将一个日期使用 moment.js 实现星期 今天 明天 ...

数据源 ["2025-01-23","2025-01-24","2025-01-25","2025-01-28","2025-01-26","2025-01-27" ] 后端给返回了一个这样的数据 日期数据 实际应用中实现的是这样的显示效果 日期需要这样显示的tabs 栏 我们需要…...

LLM幻觉(Hallucination)缓解技术综述与展望

LLMs 中的幻觉问题&#xff08;LLM 幻觉&#xff1a;现象剖析、影响与应对策略&#xff09;对其可靠性与实用性构成了严重威胁。幻觉现象表现为模型生成的内容与事实严重不符&#xff0c;在医疗、金融、法律等对准确性要求极高的关键领域&#xff0c;可能引发误导性后果&#x…...

Unity入门2 背景叠层 瓦片规则

切割场景 瓦片调色盘 放在Assets里面新建瓦片地图,palettes tile 瓦片 palettes调色板 上下窗口是分开的 拖进这个格子窗 瓦片太碎&#xff0c;要封装 装好之后&#xff0c;只是把瓦片放上去了&#xff0c;但是还没有画布&#xff0c;显示是这样的 no valid target 新建“…...

docker-制作镜像gcc添加jdk运行java程序

最近的项目需要使用java调用c的链接库&#xff0c;.OS文件&#xff0c;一开始准备在jdk的镜像下去安装c的环境&#xff0c;不过安装的内容很多&#xff0c;比较复杂也容易缺很多的包&#xff0c;经过实验&#xff0c;我们决定使用gcc的镜像安装jdk来正确的运行java程序。 基础镜…...

HashTable, HashMap, ConcurrentHashMap 之间的区别

一、HashTable 只是将关键方法加上了锁&#xff08;synchronized关键字&#xff09;。 缺点&#xff1a;1.如果多线程访问同一个HashTable就回直接造成锁冲突。 2.HashTable的size属性也是通过 synchronized来控制同步的&#xff0c;效率比较低。 3.在扩容时会涉及大量的拷贝…...

vue2和vue3组件之间的通信方式差异

Vue2 vs Vue3 组件通信方法对比 1. 父子组件通信 1.1 Props 传递 Vue2 <!-- 父组件 --> <template><child-component :message"message"></child-component> </template><script> export default {data() {return {message:…...

报错:MC1000未知的生成错误Invalid number of sections declared in PE header

报错&#xff1a;MC1000未知的生成错误Invalid number of sections declared in PE header 报错问题&#xff1a; MC1000未知的生成错误Invalid number of sections declared in PE header 开发环境&#xff1a;vs2022&#xff0c;编译C#工程时报错, 解决办法&#xff1a;重新…...

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中的位置&#xff0c;右边代表旋转后的视频在屏幕中的位置。 分屏显示的…...

Linux(Centos 7.6)命令详解:wc

1.命令作用 打印文件的行数、单词数、字节数&#xff0c;如果指定了多个文件&#xff0c;还会打印以上三种数据的总和(Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified) 2.命令语法 Usage: wc [OPTION]... [FIL…...

centos7执行yum操作时报错Could not retrieve mirrorlist http://mirrorlist.centos.org解决

**原因&#xff1a;**CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止维护&#xff0c;不需要再去检查什么网络、DNS等乱七八糟的&#xff0c;因为这玩意都停止维护了&#xff0c;就算其他配置正常也照样不通。 **解决&#xff1a;**将CentOS-Base.repo文件替换成下面的…...

C语言程序设计:算法程序的灵魂

文章目录 C语言程序设计&#xff1a;算法程序的灵魂算法数据结构程序数据结构算法数值运算算法非数值运算算法 简单的算法举例【例2.1】求12345【例2.2】有50个学生&#xff0c;要求输出成绩在80分以上的学生的学号和成绩 简单的算法举例【例2.3】判定2000—2500年中的每一年是…...

openlayer getLayerById 根据id获取layer图层

背景&#xff1a; 在项目中使用getLayerById获取图层&#xff0c;这个getLayerById()方法不是openlayer官方文档自带的&#xff0c;而是自己封装的一个方法&#xff0c;这个封装的方法的思路是&#xff1a;遍历所有的layer&#xff0c;根据唯一标识【可能是id&#xff0c;也可能…...

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…...

react antd点击table单元格文字下载指定的excel路径

在使用 Ant Design (antd) 的 Table 组件时&#xff0c;如果想点击表格单元格中的文字来触发下载指定路径的 Excel 文件&#xff0c;可以通过以下步骤实现&#xff1a; 1. 确保有一个可供下载的 Excel 文件&#xff1a;需要有一个服务器端点或者一个可以直接访问的 URL&#xf…...

01-AD工具使用

01-AD工具使用 AD工程创建1.创建Project工程2.创建原理图&&PCB文件3.保存活动和整个文档 创建新元件的能力导入已有素材:元件库的能力创建各种类型元器件的方法元器件TYPE-C 3.1 母头 16P插头AMS1117-3.3电源芯片STM32F103的IC芯片C2-104电容R4-1K电阻D1发光二极管 原理…...

centos7 配置国内镜像源安装 docker

使用国内镜像源&#xff1a;由于 Docker 的官方源在国内访问可能不稳定&#xff0c;你可以使用国内的镜像源&#xff0c;如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件&#xff0c;并添加以下内容&#xff1a; [docker-ce-stable] nameDocker CE Stable -…...

Java设计模式 十八 状态模式 (State Pattern)

状态模式 (State Pattern) 状态模式是一种行为型设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为。状态模式让一个对象在其状态改变时&#xff0c;其行为也随之改变&#xff0c;看起来就像是改变了对象的类。通过将状态的变化封装到不同的状态对象中&#xff0c;…...

PyTorch张量操作reshape view permute transpose

1. reshape() 和 view() view和reshape都用于改变张量的shape view是reshape的一个特例&#xff0c;view要求张量在内存中是连续的&#xff0c;否则会抛出错误&#xff0c;view只能用于contiguous的张量 reshape会自动处理contiguous的情况&#xff0c;如果张量是contiguous…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...