阿里云开发者社区

电脑版
提示:原网页已由神马搜索转码, 内容由developer.aliyun.com提供.

【免费】基于数据驱动的模型预测控制电力系统机组组合优化

2024-05-0877
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:【免费】基于数据驱动的模型预测控制电力系统机组组合优化

1 主要内容

该程序复现文章《Feature-Driven Economic Improvement for Network-Constrained Unit Commitment: A Closed-Loop Predict-and-Optimize Framework》,程序主要做的是一个基于数据驱动的电力系统机组组合调度模型,采用IEEE24节点系统作为研究对象,该模型的创新点在于:提出了一个闭环预测与优化(C-PO)框架,即利用NCUC模型的结构以及相关特征数据来训练一个以成本为导向的RES预测模型,该模型通过诱导的NCUC成本而不是统计预测误差来评估预测质量,并且在优化过程中采用拉格朗日松弛来加速训练过程,该模型理论深度较大,代码学习难度也较大,本次免费分享供相关方向同学参考。

原文模型及部分结果:

2 部分代码

Number_day          = Validate_day_end - Validate_day_1st + 1;First_day_intuition = Validate_day_1st;Final_day_intuition = Validate_day_end;Scaler_load         = 0.22;Scaler_SPG          = 0.39;Scaler_WPG          = 0.39;R_for_load          = 0.10;R_for_RES           = 0.05;Method_flag         = 'CPO';Number_hour         = 24;Number_RES          = 5;%% -----------------------------SPO tunning----------------------------- %%lamda                 = 100000;Number_training_day   = 2;Number_day_H_validity = 7; % The frequency of updating Predictor H.Number_historic_day   = 7;Solver_flag           = 'g';Solver_gap            = 3;Solver_time           = 10;%% -----------------------Prepare box for recorder---------------------- %%% Rec for UCRec_Decision_UC_I    = cell(Number_day, 1);Rec_Decision_UC_P    = cell(Number_day, 1);Rec_Decision_UC_R_h  = cell(Number_day, 1);Rec_Decision_UC_R_c  = cell(Number_day, 1);Rec_cost_UC_expected = cell(Number_day, 1);Rec_cost_UC_SUSD     = cell(Number_day, 1);Rec_RES_prediction   = cell(Number_day, 1);Rec_infea_UC_flag    = cell(Number_day, 1);Rec_UC_time          = cell(Number_day, 1);% Rec for EDRec_cost_ACT      = cell(Number_day, 1);Rec_cost_UC       = cell(Number_day, 1);Rec_cost_SUSD_all = cell(Number_day, 1);Rec_cost_SUSD_UC  = cell(Number_day, 1);Rec_cost_SUSD_ED  = cell(Number_day, 1);Rec_cost_P        = cell(Number_day, 1);Rec_cost_LS       = cell(Number_day, 1);Rec_cost_loss_ACT = cell(Number_day, 1);Rec_cost_loss_UC  = cell(Number_day, 1);Rec_infea_ED_flag = cell(Number_day, 1);%% --------------------------Prepare box for CPO------------------------ %%% CostCPO_cost_ACT      = zeros(Number_day, 1);CPO_cost_UC       = zeros(Number_day, 1);CPO_cost_SUSD_all = zeros(Number_day, 1);CPO_cost_SUSD_UC  = zeros(Number_day, 1);CPO_cost_SUSD_ED  = zeros(Number_day, 1);CPO_cost_P        = zeros(Number_day, 1);CPO_cost_LS       = zeros(Number_day, 1);CPO_cost_loss_ACT = zeros(Number_day, 1);CPO_cost_loss_UC  = zeros(Number_day, 1);% FlagCPO_infeasible_UC = zeros(Number_day, 1);CPO_infeasible_ED = zeros(Number_day, 1);%% -------------------------Set updating frequency---------------------- %%Number_period = ceil(Number_day/Number_day_H_validity);if Number_period == floor(Number_day/Number_day_H_validity)    Number_day_in_period_full           = Number_day_H_validity;    Number_day_in_period_last           = Number_day_H_validity;    Period_size_list                    = ones(Number_period,1);    Period_1st_list                     = zeros(Number_period,1);    Period_end_list                     = zeros(Number_period,1);    Period_size_list(1:Number_period-1) = Number_day_in_period_full;    Period_size_list(Number_period)     = Number_day_in_period_last;endif Number_period > floor(Number_day/Number_day_H_validity)    Number_day_in_period_full           = Number_day_H_validity;    Number_day_in_period_last           = Number_day - (Number_period - 1)*Number_day_H_validity;    Period_size_list                    = ones(Number_period,1);    Period_1st_list                     = zeros(Number_period,1);    Period_end_list                     = zeros(Number_period,1);    Period_size_list(1:Number_period-1) = Number_day_in_period_full;    Period_size_list(Number_period)     = Number_day_in_period_last;endfor i_period = 1:Number_period    Period_1st_list(i_period) = (Validate_day_end+1) - sum(Period_size_list(i_period:end));    Period_end_list(i_period) = (Validate_day_1st-1) + sum(Period_size_list(1:i_period));end%% ------------------Prepare box for training details------------------- %%% Training detailCPO_TRA_Predictor_H     = cell(Number_period, 1);CPO_TRA_Predictor_H_ele = cell(Number_period, 1);CPO_TRA_obj             = zeros(Number_period, 1);CPO_TRA_cost_ERM        = zeros(Number_period, 1);CPO_TRA_regulation      = zeros(Number_period, 1);CPO_TRA_time            = zeros(Number_period, 1);%% --------------------------Prepare box for pick----------------------- %%Picked_TRA_intuition        = zeros(Number_training_day,Number_period);Picked_TRA_feature          = cell(Number_period,1);Picked_TRA_load_city        = cell(Number_period,1);Picked_TRA_reserve_load_req = cell(Number_period,1);Picked_TRA_reserve_RES_req  = cell(Number_period,1);Picked_TRA_cost_perfect     = cell(Number_period,1);%% ------------------------------Let's go------------------------------- %%for Current_period = 1:Number_period    Number_dispatch_day = Period_size_list(Current_period);    Dispatch_day_1st    = Period_1st_list(Current_period);    Dispatch_day_end    = Period_end_list(Current_period);    %% -----------------------Select training day----------------------- %%    [Picked_TRA_intuition(:,Current_period),...     Picked_TRA_feature{Current_period},...     Picked_TRA_load_city{Current_period},...     Picked_TRA_reserve_load_req{Current_period},...     Picked_TRA_reserve_RES_req{Current_period},...     Picked_TRA_cost_perfect{Current_period}]...         = Step_00_Select_train_day(Dispatch_day_1st,...                                    Dispatch_day_end,...                                    Number_training_day,...                                    Number_dispatch_day,...                                    Scaler_load,...                                    Scaler_SPG,...                                    Scaler_WPG,...                                    R_for_load,...                                    R_for_RES,...                                    Number_historic_day);    %% -----------------------------Setp 01----------------------------- %%    [CPO_TRA_Predictor_H{Current_period},...     CPO_TRA_Predictor_H_ele{Current_period},...     CPO_TRA_obj(Current_period),...     CPO_TRA_cost_ERM(Current_period),...     CPO_TRA_regulation(Current_period),...     CPO_TRA_time(Current_period)]...     = Step_01_CPO_train(lamda,...                         Scaler_load,...                         Scaler_SPG,...                         Scaler_WPG,...                         Solver_flag, Solver_gap, Solver_time,...                         Picked_TRA_feature{Current_period},...                         Picked_TRA_load_city{Current_period},...                         Picked_TRA_reserve_load_req{Current_period},...                         Picked_TRA_reserve_RES_req{Current_period},...                         Picked_TRA_cost_perfect{Current_period},...                         Number_training_day,...                         Method_flag);


3 程序结果

4 下载链接

文章标签:
相关文章
|
资源调度前端开发测试技术
前端工程化实践:从零搭建现代化项目构建流程
【4月更文挑战第6天】本文介绍了前端工程化的概念和重要性,包括模块化、自动化、规范化和CI/CD。接着,讨论了选择合适的工具链,如包管理器、构建工具和测试框架。然后,详细阐述了如何从零开始搭建一个基于React的现代化项目构建流程,涉及初始化、代码规范、测试、CSS处理、代码分割和CI/CD配置。最后,提到了持续优化与迭代的方向,如性能优化、类型检查和微前端。通过这样的实践,开发者可以提升开发效率和代码质量,为项目长远发展奠定基础。
52300
|
达摩院供应链
「达摩院MindOpt」用于多目标规划(加权和法)
多目标规划(Multi-objective programming)是指在一个优化问题中需要同时考虑多个目标函数的优化。在多目标规划问题中,目标函数之间通常是互相冲突的,即在优化一个目标函数的过程中,另一个或几个目标函数可能会受到影响。因此,多目标规划问题的目标是找到一个解x,使得在满足约束的前提下,所有目标函数达到一个相对满意的折中。
「达摩院MindOpt」用于多目标规划(加权和法)
|
SQL关系型数据库MySQL
关系型数据库选择唯一性索引
【5月更文挑战第19天】
20122
|
8月前
|
算法
132年未解开的李雅普诺夫函数谜题,被Symbolic Transformer攻克了
李雅普诺夫函数是评估动态系统稳定性的重要工具,但其存在性难以证明。近期,Meta和Ecole des Ponts的研究团队利用基于Transformer的序列到序列模型,成功解决了多项式与非多项式系统中的李雅普诺夫函数发现难题,准确率高达99%,并在非多项式系统中实现了12.7%的新函数发现率。该研究不仅展示了生成模型在数学问题上的潜力,也为未解数学问题提供了新思路。
13055
|
11月前
|
XML前端开发Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
20733
|
12月前
|
SQL分布式计算资源调度
MaxCompute操作报错合集之执行SQL Union All操作时,数据类型产生报错,该怎么解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
算法调度决策智能
电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
电力系统机组组合优化调度(IEEE14节点、IEEE30节点、IEEE118节点)(Matlab代码实现)
|
关系型数据库
yalmip实用操作(1)
yalmip实用操作(1)
|
人工智能API
【AI Agent系列】【LangGraph】2. 再进阶:给你的LangGraph加入循环逻辑(Cycles)
【AI Agent系列】【LangGraph】2. 再进阶:给你的LangGraph加入循环逻辑(Cycles)
84000
|
存储供应链安全
【区块链】联盟链
【区块链】联盟链
62500