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

news2025/1/29 6:48:26

目录

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   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   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
    % 式2
    cons = [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];
    % 式3
    cons = [cons , I_it(1 , t) == R_it(1 , t)];
    for i = 2:I
        cons = [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 下载链接

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

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

相关文章

移动端VR处理器和传统显卡的不同

骁龙 XR 系列芯片 更多地依赖 AI 技术 来优化渲染过程&#xff0c;而传统的 GPU 渲染 则倾向于在低画质下运行以减少负载。这种设计是为了在有限的硬件资源下&#xff08;如移动端 XR 设备&#xff09;实现高性能和低功耗的平衡。以下是具体的分析&#xff1a; 1. AI 驱动的渲染…

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…

【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

视觉语言模型 (VLMs):跨模态智能的探索

文章目录 一. VLMs 的重要性与挑战&#xff1a;连接视觉与语言的桥梁 &#x1f309;二. VLMs 的核心训练范式&#xff1a;四种主流策略 &#x1f5fa;️1. 对比训练 (Contrastive Training)&#xff1a;拉近正例&#xff0c;推远负例 ⚖️2. 掩码方法 (Masking)&#xff1a;重构…

CF 339A.Helpful Maths(Java实现)

题目分析 输入一串式子&#xff0c;输出从小到大排列的式子 思路分析 如上所说核心思路&#xff0c;但是我要使用笨方法&#xff0c;输入一串式子用split分割开&#xff0c;但是此时需要用到转义字符&#xff0c;即函数内参数不能直接使用“”&#xff0c;而是“\\”。分割开后…

Java Web-Request与Response

在 Java Web 开发中&#xff0c;Request 和 Response 是两个非常重要的对象&#xff0c;用于在客户端和服务器之间进行请求和响应的处理&#xff0c;以下是详细介绍&#xff1a; Request&#xff08;请求对象&#xff09; Request继承体系 在 Java Web 开发中&#xff0c;通…

Spring AOP通知类型全解析:掌握方法执行前后的艺术

Spring的通知&#xff08;Advice&#xff09;类型主要有以下几种&#xff0c;它们都是在方法执行的不同阶段进行拦截和处理的一种机制&#xff1a; 1. 前置通知&#xff08;Before Advice&#xff09;&#xff1a;在目标方法执行之前执行的通知。就像你吃饭前要先洗手一样&…

(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识&#xff0c;HTTP协议只是个开始&#xff0c;除此之外还有很多&#xff0c;我们慢慢来记录。 今天的HTTP协议&#xff0c;会有助于我们更好的了解网络。 一、什么是HTTP协议 &#xff08;1&#xff09;定义 HTTP&#xff08;超文本传输协议&#xff…

未初始化数据恢复全攻略

没有初始化概述 在日常使用电脑、硬盘、U盘等存储设备时&#xff0c;我们可能会遇到“没有初始化”的提示。这一情况通常发生在存储设备突然无法被系统正常识别或访问时&#xff0c;系统往往要求我们先进行初始化操作。然而&#xff0c;初始化操作意味着对存储设备进行格式化&…

学习数据结构(1)算法复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…

積分方程與簡單的泛函分析7.希爾伯特-施密特定理

1)def函數叫作"由核生成的(有源的)" 定义: 设 是定义在区域上的核函数。 对于函数,若存在函数使得, 则称函数是“由核生成的(有源的)”。 这里的直观理解是: 函数的“来源”可以通过核函数 与另一个函数的积分运算得到。 在积分方程理论中,这种表述常…

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…

追剧记单词之:国色芳华与单词速记

●wretched adj. 恶劣的&#xff1b;悲惨的&#xff1b;不幸的&#xff1b;难过的 &#xff08;不幸的&#xff09;胜意出生于一个&#xff08;恶劣的&#xff09;家庭环境&#xff0c;嫁给王擎后依然过着&#xff08;悲惨的&#xff09;生活&#xff0c;她死后&#xff0c;牡丹…

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始&#xff0c;各大技术社区&#xff0c;技术群聊流行着 “用Rust重写!” &#xff0c;放一张图(笑死… 这不, 随着大模型技术的流行&#xff0c;大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构&#xff0c;代码变换&#xff08;Refactor&…

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…

大数运算之C语言实现

一、 前言 在我们代码编程过程中&#xff0c;我们经常需要处理各种规模的数值。从日常工作中的一些简单算术在到科学研究中的复杂计算&#xff0c;数字无处不在。然而&#xff0c;当数值变的异常庞大时&#xff0c;就需要用到大数运算来进行实现。本文我们将介绍大数运算的基本…