基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

Posted 数学建模与科研

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)相关的知识,希望对你有一定的参考价值。

 

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

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

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

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

1.1 风力发电机

1.2 太阳能发电

1.3 微型燃气轮机

1.4 微电网其他结构

1.5 MPC模型预测控制

1.6 滚动优化

📚2 运行结果

🎉3 文献来源

🌈4 Matlab代码实现


💥1 概述

微电网的腾空出世对于国家能源体系和经济发展具有极其重要的意义。虽然在能源利用和电力运行等方面发挥着重要作用,但在规划设计、保护与控制等方面仍存在诸多问题需要解决[7-9]。在微电网的优化调度方面,微电网和传统微电网存在着较大的差异,主要有以下差异:微电网内分布式电源品类繁多,运行方式和运行特点各有不同,可再生能源的功率特性具有随机性和间歇性;构建优化目标函数需要从经济效益、环保效益、供电可靠性等角度进行思考;各分布式电源在不同运行模式下存在不同的调度策略l约束条件等,这些因素都大大深化了微电网的调度优化的复杂程度,给微电网系统的优化调度带来了一定的困难。因此,对微电网的优化调度研究是十分必要的,微电网作为协调分布式电源和大电网之间的重要桥梁,研究其优化调度有助于提高电力系统的经济性,改善电能质量,保证大电网和微电网之间的平稳运行,同时对实现节能减排也发挥重大的作用。微电网的优化调度作为微电网技术发展的重要研究方面,具有重要的理论价值。
风能是一种无公害的新能源,资源丰富,清洁可再生,可满足国家未来长远能源需求,因此受到世界上许多国家的重视。利用风力进行发电可以无需考虑环境污染和燃料等问题,有效减少对于化石能源的消耗,并且在适当地点发电时,其发电成本低于其他·发电机。风力发电作为一种绿色、健康的发电方式更是受到世界各国的开发和利用,吸引着国内外诸多专家和科研人员对绿色风力发电的探索145]。

1.1 风力发电机


风力发电机(Wind Turbine,WT)主要是采取风能—机械能—电能的模式进行发电,风力发电功率输出的流程如图2.1所示,主要是利用风速数据,经过风轮机模型、发电机模型最终得到输出的有功、无功功率,实现与电网之间的功率交换。

1.2 太阳能发电

太阳能作为可再生清洁能源一直以来受到人们的广泛关注,开发和利用太阳能技术也成为人们解决能源短缺和环境污染的重要选择,在能源供应中占据重要地位,同时,许多国家也将开发可在生能源定为发展本国的能源战略。目前,太阳能发电具有两种发电方式I7]:一种是光-热-电转换方式,另一种是光-电直接转化方式,而光伏发电(Photovoltaic cell,PV)就是后一种发电方式。光伏电池借助太阳光照的光伏效应,将太阳能通过交直流变换器转化为交直流电能以供负载,光伏发电系统是利用源自内部半导体接收到太阳光线的照射之后产生的光伏特效应,不过光伏发电系统对环境的依赖比较大,易于受到外部温度、日照光线强度等天气环境的影响,其系统结构组成如图2.2所示。

1.3 微型燃气轮机

微型燃气轮机(Microturbine,MT)属于燃气轮机门类之一,其单机发电额定功率范在30~250k W之间,发电效率普遍达到25%~30%,若采用冷热电联产方式时,能量利用率可达70%~90%。近年来随着能源与动力需求结构及环境变化等改变,微型燃气轮机备受关注,在我国具有相当可观的发展应用前景。微型燃气轮机燃料多以天然气、柴油为主,具有体积小重量轻、污染排放少、低燃料消耗率和低维修率等一系列先进技术特征,除了适用于分布式发电外,还可以用于并网发电、备用电站等。微型燃气轮机的系统主要由以下模块构成,如下图2.3所示。其工作原理是利用压缩机将空气进行压缩,通过将压缩后的气体与燃料发生氧化还原反应形成高压燃气,利用高压燃起做功产生机械能带动机组发电。
 

其他结构就不一一介绍。 

1.4 微电网其他结构

1.5 MPC模型预测控制

模型预测控制(Model Predictive Control,MPC)是20世纪70年代发展起来的一类新型计算机控制算法6,是一种基于预测模型、滚动优化、反馈校正思维的闭环控制。该算法最早应用在工业实践中,意在解决多变量约束优化问题。随着工业生产的进一步发展,对控制系统提出了更高的要求,如具有高质量的控制性能,对模型要求不高及计算方便等,虽然从理论上说,鲁棒控制、最优控制和自适应控制也可以满足这些要求,但是这些方法通常对于模型精度要求较高,在这样的背景下﹐模型预测控制算法应运而生。同时,由于计算机技术和工业系统对于先进控制的高度需求,使得预测控制的应用范围日渐扩大,控制水平也日益提高,目前,预测控制已经成为工业领域应用最多的一种先进控制策略。具有对模型要求低、极强抗干扰能力等优点,能够很好的实现优化目标的跟踪及与约束条件的处理。

1.6 滚动优化


模型预测控制中的滚动优化是针对有限时域内的预测,同时受到外部干扰和模型不确定等因素的干扰,所以对系统目标函数优化求解后得到的向量解不能全部作用与系统,而应该将每个采样时刻的优化向量解中的第一个分量作用于系统,在下一个时刻,以新得到的测量值作为初始条件重新预测系统未来输出,得到新的优化向量解,在将新的优化向量解中的第一个分量作用于系统,以此循环往复下去直到永远。也就是说,模型预测控制是一个有限时域内的滚动优化,时间依次的往上递增,以每个时刻新的测量值来重新预测未来输出,并将新的优化向量解中的第一个分量作用与系统,以便得到下一时刻的测量值。这种有限时域的滚动优化策略对优化目标来说,虽然不能得到全局最优解,只能得到全局次优解,但是它顾及了时变、干扰等引起的不确定性,及时的进行弥补,始终把新的优化建立在实际的基础上,使控制保持实际上的最优。
 

📚2 运行结果

 

🎉3 文献来源

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

[1]石栋安. 基于MPC的微电网调度优化的研究[D].西安工业大学,2019.DOI:10.27391/d.cnki.gxagu.2019.000303.

🌈4 Matlab代码实现

基于多个MPC的的调度控制器

1引言

本文J将对MATLAB自带的MPC例子进行详细剖析
MPC:Model Predictive Control Toolbox
开始设计工具:通过输入MATLAB命令:‘mpctool’开始设计工具。
下图1中的图形中左侧的三个栏目分别为受控对象模型(plant model)、模型预测控制器(Controllers)、仿真器(Scenarios)。
图1.MPC工具箱
模型预测控制工具箱是一个图形用户界面的设计。这个GUI是控制和评估工具管理器GUI的一部分。见下图
这里写图片描述
这里写图片描述
Mo(measured output):当前可测量的输出信号
Ref(Reference signa):参考信号
Md(optional measured disturbance signa):可选的测量干扰信号
Mv(optimal manipulated variables ):最优操纵变量
MPC一般通过求解一个二次规划(这里我们使用ord45)来计算最优操纵变量
一个简单的例子如下图所示:
这里写图片描述

2.多个MPC调度控制器解决方案

2.1系统描述
如果你的对象模型是非线性,设计一个控制器操作在一个特定的目标地区表现优异,但可能在其他地区表现不佳。补偿的常用方法是设计多个控制器,每个面向一个特定的操作条件的组合。他们之间切换实时随着情况的变化。获得这项技术的调度是一个传统的例子。下面的例子显示了如何协调多个模型预测控制器
该系统是由两个物体M1和M2分别连接到两个独立的弹簧k1和k2组成。假定当M1和M2碰撞的时候是完全非弹性碰撞。力F对于M1来说是拉力,这是可操纵变量( manipulated variable MV)。目标是使M1的位置y1跟踪给定参考位置r(Reference signa)。
当M1和M2分离时,M1自由地移动。发生碰撞的时候,由于是完全非弹性碰撞,所以M1 + M2一起移动。我们假设只有M1的位置和接触传感器提供反馈。后者是用来触发开关MPC控制器来选择MPC1还是MPC2。在这里,我们认为,M2的位置和速度的不可控。这这里,我们认为右方向为正方向。如下图这里写图片描述所示:
2.2模型参数

clear all
clc
M1=1;       % M1的质量
M2=5;       % M2的质量
k1=1;       % 弹簧k1常数k
k2=0.1;     % 弹簧k2常数k 
b1=0.3;     % 与空气的摩擦系数,与速度成正比
b2=0.8;     % 摩擦系数
yeq1=10;    % 刚性壁1的位置 
yeq2=-10;   % 刚性壁2的位置  

2.3状态空间模型
这里写图片描述
states:M1的位置和速度
MV:推力F
MD:物体1由弹簧的需求的力F和实际给出的F之间的常量误差,用来弥补弹簧弹力,使M在初始位置0上时,弹簧对其作用力为零。
MO:M1的位置

2.3.1当M1和M2没有接触时候的模型MPC1

%% 状态空间模型
%M1M2不接触时候的状态模型.
A1=[0 1;-k1/M1 -b1/M1];
B1=[0 0;-1/M1 k1*yeq1/M1];
C1=[1 0];
D1=[0 0];
sys1=ss(A1,B1,C1,D1);                 %建立状态空间表达式
sys1=setmpcsignals(sys1,'MD',2);    %第二个输入是可测量扰动

【注】:
1.Sys = ss(a,b,c,d):用来描述连续性的状态空间模型
2.Setmpcsignals:设置MPC受控对象的的I/0信号模型。这个系统必须是线性时不变系统,’MD’:可测量的输入扰动,,第二个输入是可测量的输入扰动。如果没有指定的输入变量是MV

这里写图片描述
最后得出的结果:
这里写图片描述

2.3.2当M1和M2连接在一起时候的模型MPC2

% 当M1和M2接触时候的状态模型.
A2=[0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2=[0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];
C2=[1 0];
D2=[0 0];
sys2=ss(A2,B2,C2,D2);
sys2=setmpcsignals(sys2,'MD',2);

2.4 Multi-MPC控制设置

%% MPC仿真参数设置
Ts=0.2;     % 采样时间
p=20;       % 预测时域长度
m=1;        % 控制时域长度

%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m);    % 定义M1M2分离的MPC模型
% 设置限制,F的大小不能为0F斜率绝对值最大1000
MPC1.MV=struct('Min',0,'Max',Inf,'RateMin',-1e3,'RateMax',1e3);

MPC2=mpc(sys2,Ts,p,m);   %定义M1M2连接的MPC2模型
MPC2.MV=MPC1.MV;          %系统1和系统2的控制限制一样

2.5仿真参数设置

%% 仿真参数设置
Tstop=100;             % 仿真时间
y1initial=0;           % 物体1的初始位置
y2initial=10;          % 物体2的初始位置
open_system('wc1');   % 调用wc1.MDL
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%设置系统和模型的参数值
sim('wc1',Tstop);%开始动态系统仿真

3.Simulatink实现

Simulation框图如下图所示:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

The total simulation diagram上面的部分模拟两个物体的运动,并且这种移动会在在示波器中以信号的方式显示出来。并且当M1的位置和加速度均大于M2的位置和加速度时,model输出布尔量true或者false;下半部分包含以下要素:
1.多个MPC控制器,。这有四个输入:可测量输出(mo), 参考(ref),可测量干扰(md)输入和独特的多个MPC控制器的功能块switch输入。
2.一脉冲发生器改变M1需要到达的位置 (控制器参考信号)。此脉冲发生器的输出是一个幅值为5的方波,频率是0.015每秒。
3.模拟传感器的接触。当switch输入1时,激活第一个控制器MPC1,这个时候M1和M2是分离的。当两个物体有相同的位置时,Compare to Constant的计算结果为1,通过Add1加法器的输出值为2,Multiple MPC Controllers的switch端口被输入2,自动启动第二个控制器MPC2。

4.解决方案评价

下图展示了仿真的过程:
这里写图片描述
4.1 MPC1与MPC2协同工作
下图展示了对于这个例子多个MPC控制器的仿真:
这里写图片描述
在图上面上,青色的线(就是我们M1需要的到达的位置,由reference产生)它从-5开始。的M1位置(黄色)从0开始出发。 在MPC1的控制下, M1移动迅速向所需的位置。M2(红色)从10开始开始朝着同一个方向移动
大约在t = 13秒,M2与M1发生完全非弹性碰撞。M1与M2连在一起。第三幅图显示了开关信号的变化,在这个瞬间从1到2,所以MPC2开始起作用。。
在M1+M2超过了从其所期望的位置时候,M2和M1仍连在一起。控制器MPC2调整作用力F(中间的图片)使M1+M2快速返回到所需的位置。当r突变到5时,效果一样是非常不错的

4.2 单个MPC1一直工作
假设我们的控制器MPC1运行在所有条件下

%再进行一次无论在什么情况下只用MPC1系统的实验
disp('Now repeat simulation by using only MPC1 ...');
MPC2save=MPC2;     %先将MPC2保存起来
MPC2=MPC1;          %用MPC2来代替MPC21
sim('wc1',Tstop);  %动态系统仿真

下图显示了MPC1单独工作的图像
这里写图片描述
如果一直是MPC1的系统,力F不够,当M1和M2链连接在一起的时候,移动缓慢,当下一个转变发生时还不能到达所需的位置

4.3单个MPC2一直工作

%再进行一次无论在什么情况下只用MPC2系统的实验
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);

假设我们的控制器MPC2运行在所有条件下
下图显示了MPC1单独工作的图像
这里写图片描述
当M1和M2分开的时候,MPC2也依然使用,过度使用F,过度补偿,导致振荡产生。当M2和M1连接在一起的时候,移动更平稳,和预期一样。最后过渡造成特别严重的振荡。 M1和M2频繁的碰撞,M1不能到达所需的位置。

5.参考文献

[1] A. Bemporad, S. Di Cairano, I. V. Kolmanovsky, and D. Hrovat, “Hybrid
modeling and control of a multibody magnetic actuator for automotive applications,” in Proc. 46th IEEE(R) Conf. on Decision and Control, New Orleans, LA, 2007.
[2]http://cn.mathworks.com/help/mpc/gs/coordination-of-multiple-model-predictive-controllers.html#bs670e3-8
[3]李国勇,智能预测控制及其MATLAB实现.北京:电子工业出版社,2010.

6.附录

%% 多个MPC的的调度控制器    
% clc
% clear all

%% 系统参数
clear all
clc
M1=1;       % M1的质量
M2=5;       % M2的质量
k1=1;       % 弹簧k1常数k
k2=0.1;     % 弹簧k2常数k 
b1=0.3;     % 与空气的摩擦系数,与速度成正比
b2=0.8;     % 摩擦系数
yeq1=10;    % 刚性壁1的位置 
yeq2=-10;   % 刚性壁2的位置   

%% 状态空间模型
% 状态: M的速度和位置 
% 被控变量:F
% 可测量的扰动:弹簧1的常熟;
% 测量输出: M1的位置 

% 当M1和M2不接触时候的状态模型.
A1=[0 1;-k1/M1 -b1/M1];
B1=[0 0;-1/M1 k1*yeq1/M1];
C1=[1 0];
D1=[0 0]; 
sys1=ss(A1,B1,C1,D1);             %建立状态空间表达式
sys1=setmpcsignals(sys1,'MD',2)  ;%第二个输入是可测量扰动

% 当M1和M2接触时候的状态模型.
A2=[0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2=[0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];
C2=[1 0];
D2=[0 0];
sys2=ss(A2,B2,C2,D2);
sys2=setmpcsignals(sys2,'MD',2);

%% MPC仿真参数设置
Ts=0.2;     % 采样时间
p=20;       % 预测时域长度
m=1;        % 控制时域长度

%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m);                        % 定义M1和M2分离的MPC模型
MPC1.MV=struct('Min',0,'Max',Inf,'RateMin',-1e3,'RateMax',1e3);  % 设置限制,F的大小不能为0

MPC2=mpc(sys2,Ts,p,m);       %定义M1和M2连接时候的MPC模型
MPC2.MV=MPC1.MV;             %系统1和系统2的控制限制一样

%% 仿真参数设置
Tstop=100;      % 仿真时间
y1initial=0;    % 物体1的初始位置
y2initial=10;   % 物体2的初始位置
open_system('WC1');   % 调用WC1.MDL

%% 开始三次仿真
%双系统MPC1和MPC2仿真实验
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%设置系统和模型的参数值
sim('WC1',Tstop);%动态系统仿真

%再进行一次无论在什么情况下只用MPC1系统的实验
disp('Now repeat simulation by using only MPC1 ...'); 
MPC2save=MPC2;  %先将MPC2保存起来
MPC2=MPC1;      %用MPC2来代替MPC21
sim('WC1',Tstop);

%再进行一次无论在什么情况下只用MPC2系统的实验
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);

%% 关闭仿真窗口
% bdclose('WC1')
% close(findobj('Tag','WC1_demo'))



%% reference
%[1] A. Bemporad, S. Di Cairano, I. V. Kolmanovsky, and D. Hrovat, "Hybrid
%    modeling and control of a multibody magnetic actuator for automotive
%    applications," in Proc. 46th IEEE(R) Conf. on Decision and Control, New
%    Orleans, LA, 2007. 
%[2]http://cn.mathworks.com/help/mpc/gs/coordination-of-multiple-model-predictive-controllers.html#bs670e3-8
%[3]李国勇,智能预测控制及其MATLAB实现.北京:电子工业出版社,2010.

以上是关于基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB模型预测控制(MPC,Model Predictive Control)

微电网优化基于matlab粒子群优化算法的微电网调度(光伏储能电动车电网交互)含Matlab源码 2190期

电力系统基于matlab YALMIP+CPLEX求解带储能的微电网优化调度问题含Matlab源码 2175期

电力系统基于matlab YALMIP+CPLEX求解带储能的微电网优化调度问题含Matlab源码 2175期

模型预测控制算法(MPC算法)底层逻辑

模型预测控制算法(MPC算法)底层逻辑