舰船科学技术  2022, Vol. 44 Issue (11): 89-94    DOI: 10.3404/j.issn.1672-7649.2022.11.019   PDF    
基于强化学习的直流蒸汽发生器控制策略研究
李程1,2, 余刃1, 余文敏1, 王天舒1     
1. 海军工程大学,湖北 武汉 430033;
2. 中核武汉核电运行技术股份有限公司,湖北 武汉 430000
摘要: 针对直流蒸汽发生器二回路水容积小,负荷变化过程中蒸汽出口压力极易发生波动、难以控制的特点,设计一种基于强化学习PPO算法的直流蒸汽发生器蒸汽出口压力双层控制结构。该算法通过智能体选取PID参数作为强化学习中的动作Action输出,作用到被控对象,利用与其交互后得到奖励值的反馈进行智能体的在线学习,通过上层控制参数调整策略的在线学习和底层PID参数的跟踪调整,从而提升控制器的控制性能。通与传统PID控制算法进行仿真比对实验,验证了基于PPO算法的自适应PID控制器具有响应速度更快、超调量和调整时间更小等优点。
关键词: 直流蒸汽发生器     强化学习     PPO算法     PID控制    
Research of control strategy of once-through steam generator based on reinforcement learning
LI Cheng1,2, YU Ren1, YU Wen-min1, WANG Tian-shu1     
1. Naval University of Engineering, Wuhan, 430033 China;
2. China Nuclear Power Operation Technology Co., Ltd., Wuhan, 430000 China
Abstract: Because of the characteristics of the small water volume of once-through steam generator, it is hard to control the outlet steam pressure when load changed or disturbed. A double-layer control structure based on Proximal Policy Optimization(PPO) algorithm of reinforcement learning is proposed to control the outlet steam pressure of once-through steam generator. The reinforcement learning agent chooses PID parameters as action to the environment, and then reward value is obtained through the reward function which enables online learning of the agent. By this way the PPO algorithm realizes the online learning of parameters adjustment of upper layer and the adaptive adjustment of PID controller in lower layer, and improving the control performance of the controller. Comparing with traditional PID controller, the simulation experiment result shows that the PPO algorithm has small overshoot、fast response and shorter steady time.
Key words: once-through steam generator     reinforcement learning     PPO algorithm     PID control    
0 引 言

直流蒸汽发生器是核动力设备的一个关键组成部分,用于产生过热蒸汽,可不装去湿装置,具有结构简单、体积小、静态特性良好、机动性能好等优点,并可提高装置的热效率。在中小型核动力装置中多考虑采用紧凑、高效的直管式、螺旋管式直流蒸汽发生器[1]

目前对于直流蒸汽发生器控制方面的研究大多侧重于二次侧压力的控制,即通过控制直流蒸汽发生器出口蒸汽压力来实现出口蒸汽质量的控制。但是由于直流蒸汽发生器的耦合特性,出口压力的控制特别是低工况时很难进行[2]。文献[3]中针对直流蒸汽发生器动态特性,采用PID控制给水流量的方法使蒸汽出口压力恒定,控制效果良好。文献[4]提出一种基于人工免疫的控制算法,这种种分布式-多输入多输出耦合的人工免疫控制算法,应用到直流蒸汽发生器控制中,能够较好地改善出口蒸汽压力的动态特性。文献[5]设计了T-S型神经模糊控制器应用在直流蒸汽发生器给水控制系统中,可以实现负荷变化过程中蒸汽压力的稳定控制。

上述研究都取得了许多积极的成果,这主要都得益于目前多样化的控制算法和计算机技术的发展,但是上述方法也存在不足,如需要大量训练数据或者需要精确的数学模型。强化学习作为近年来受到关注的智能算法,其自主学习和无需对象模型的特性对解决直流蒸汽发生器控制问题提供了新的思路。随机策略搜索方法是强化学习中的一种无模型策略搜索方法,其代表方法近端策略优化算法(proximal policy optimization,PPO)可以使获得的回报单调不减,即策略总是向更好的方向更新,并且形式更加简洁,可以取得更好的训练效果。

本文以套管式直流蒸汽发生器作为研究对象,在保持原有PID控制的基础上,利用强化学习中的近端策略优化PPO算法,实现直流蒸汽发生器压力PID控制器参数的自整定。该算法通过智能体选取PID参数作为强化学习中的动作Action输出,作用到被控对象中,利用与其交互后得到奖励值的反馈进行智能体的在线学习。通过仿真实验,将所设计算法与传统PID的控制效果进行对比,验证基于PPO算法的自适应PID控制器的动态性能。

1 强化学习理论和算法 1.1 强化学习

强化学习是一种无监督学习方法,智能体Agent通过与动态环境的反复交互,学会选择最优或近最优的行为以实现其长期目标[6],其基本框架如图1所示。

图 1 强化学习基本框架 Fig. 1 The framework of reinforcement learing

马尔科夫决策过程(Markov decision process,MDP)是一种交互式学习的框架,是对强化学习问题的数学描述,强化学习的目标是学习到一个策略 $ \mathrm{{\text{π}} } $ ,使得目标从初始状态 $ s_1 $ 出发,在某一策略 $ \mathrm{{\text{π}} } $ 下,期望回报达到最大:

$ J = {E_{s{\sim}\rho ,a{\sim}{\text{π}} }}\left[ {{R_1}} \right] \text{,}$ (1)

其过程可以由一个五元数组来表示 $ \left\{ {S,A,P,R,\gamma } \right\} $ ,其中:S为状态;A为动作;P为状态转移概率;R为回报函数; $ \gamma $ 为折扣系数。

其回报定义为折扣累计奖励:

$ {R_t} = \sum\limits_{i = t}^T {{\gamma ^{(i - t)}}} r\left( {{s_i},{a_i}} \right)\text{,} $ (2)

状态价值函数 $ {V^{\text{π}} }(s) $ 表示在状态s时执行策略 $ \mathrm{{\text{π}} } $ 时,能够从环境中获得的折扣累积奖励:

$ {V^{\text{π}} }\left( {{s_t}} \right) = {E_{s{\sim}rho ,a{\sim}{\text{π}} }}\left[ {{R_t}|{s_t}} \right] \text{,}$ (3)

状态动作价值函数 $ {Q^{\text{π}} }(s,a) $ 表示从状态s出发,执行动作a后,再执行策略 $ \mathrm{{\text{π}} }\mathrm{所}\mathrm{带}\mathrm{来}\mathrm{的}\mathrm{累}\mathrm{积}\mathrm{回}\mathrm{报} $

$ {Q^{\text{π}} }(s,a) = {E_{s{\sim}\rho ,a{\sim}{\text{π}} }}\left[ {{R_t}|{s_t},{a_t}} \right] \text{,}$ (4)

时序差分[7-8]方法定义用下一时刻的状态动作值函数来估计当前状态动作值函数:

$ {Q^{\text{π}} }(s,a) = {E_{r,{s_{t + 1}}{\sim}E}}\left[ {r\left( {{s_t},{a_t}} \right) + \gamma {E_{{a_{t + 1}}{\sim}{\text{π}}}}\left[ {Q{\text{π}} \left( {{s_{t + 1}},{a_{t + 1}}} \right)} \right]} \right] \text{,}$ (5)

则时序误差可定义为:

$ {\delta _t} = {r_t} + \gamma {Q^{\text{π}} }({s_{t + 1}},{a_{t + 1}}) - {Q^{\text{π}} }(s,a) \text{,}$ (6)

利用神经网络去逼近状态动作价值函数时,值函数是关于参数 $ \mathrm{\theta } $ 的函数,则可以定义网络的损失函数为:

$ L\left( \theta \right) = {E_{s{\sim}\rho ,a{\sim}{\text{π}} }}\left[ {{{\left( {{y_t} - Q\left( {{s_t},{a_t}|\theta } \right)} \right)}^2}} \right] \text{,}$ (7)

其中:

$ {y_t} = {r_t} + \gamma Q({s_{t + 1}},{a_{t + 1}}|\theta ) \text{。}$ (8)
1.2 近端策略优化算法

在策略梯度算法中,参数 $ \theta $ 更新的目标函数为:

$ L\left( \theta \right) = E\left[ {\log {\text{π}} \left( {{a_t}|{s_t};\theta } \right){A_t}\left( {{s_t},{a_t}} \right)} \right] \text{,}$ (9)

其中, $ {A_t}\left( {{s_t},{a_t}} \right) $ 为当前策略下的优势函数:

$ {A_t}\left( {{s_t},{a_t}} \right) = {Q_t}\left( {{s_t},{a_t}} \right) - {V_t}\left( {{s_t}} \right)\text{,} $ (10)

参数 $ \theta $ 更新方式为策略梯度算法,如下式:

$ {\theta _{t + 1}} = {\theta _t} + a{\nabla _\theta }L\left( {{\theta _t}} \right)\text{。} $ (11)

近端策略优化算法PPO克服了策略梯度算法难以选择合适步长的问题,确保了在优化策略模型时单调提升,稳定地改进策略可以使得策略是单调不减的,修改目标函数为:

$ L\left( \theta \right) = E\left[ {\frac{{{{\text{π}} _\theta }\left( {{a_t}|{s_t}} \right)}}{{{{\text{π}} _{{\theta _{old}}}}\left( {{a_t}|{s_t}} \right)}}{A_t}} \right] \text{,}$ (12)

新旧策略的KL散度满足以下约束:

$ E\left[ {KL\left[ {{{\text{π}} _{{\theta _{old}}}}\left( {{a_t}|{s_t}} \right),{{\text{π}} _\theta }\left( {{a_t}|{s_t}} \right)} \right]} \right] \leqslant \delta \text{,}$ (13)

其中,Kullback-Leibler(KL)散度用于衡量2个分布的差异程度,其值越大说明2个分布差异越大,用来稳定训练过程。

PPO算法中将约束项作为惩罚项引入目标函数,即目标函数为:

$ L\left( \theta \right) = E\left[ {\frac{{{{\text{π}} _\theta }\left( {{a_t}|{s_t}} \right)}}{{{{\text{π}} _{{\theta _{old}}}}\left( {{a_t}|{s_t}} \right)}}{A_t} - \beta KL\left[ {{{\text{π}} _{{\theta _{old}}}}\left( {{a_t}|{s_t}} \right),{{\text{π}} _\theta }\left( {{a_t}|{s_t}} \right)} \right]} \right]\text{,} $ (14)

在实际应用中发现截断函数clip用以约束 $ {r_t}\left( \theta \right) $ 的值,防止新旧策略之间的差异过大具有更好的效果,新旧策略的比值为:

$ {r_t}\left( \theta \right)\frac{{{{\text{π}} _\theta }\left( {{a_t}|{s_t}} \right)}}{{{{\text{π}} _{{\theta _{old}}}}\left( {{a_t}|{s_t}} \right)}} \text{,}$ (15)

目标函数为:

$ L\left( \theta \right) = E\left[ {\min \left( {{r_t}\left( \theta \right){A_t},clip\left( {{r_t}\left( \theta \right),1 - \varepsilon ,1 + \varepsilon } \right){A_t}} \right)} \right] \text{。}$ (16)

式中, $ \varepsilon $ 为截断常数。PPO算法在进行参数更新的过程中,通过截断函数或限值KL散度的方式,避免策略出现突变的情况,增强了训练效果。

2 基于PPO算法的直流蒸汽发生器PID控制器设计 2.1 控制器结构设计

PID控制算法由于构造简单,鲁棒性能好等特点,广泛用于工业控制中。传统的PID的控制参数很大程度上根据经验获得。但由于实际应用中的不确定性,参数不易获取等诸多问题,PID控制往往很难达到最优。为了解决上述问题,提出一种基于强化学习PPO算法的直流蒸汽发生器压力控制PID参数调整方法,如图2所示。

图 2 基于强化学习的控制器框架 Fig. 2 The framework of control structure based on reinforcement learing

整个控制系统可以分为2层,底层是PID控制系统,它直接作用于直流蒸汽发生器给水阀,通过控制阀门开度调节给水流量;控制系统顶层是强化学习智能体。直流蒸汽发生器出口压力和压力设定值的差值(nyc-ny)作为智能体输入,智能体的动作输出(action)为PID控制算法的参数 $K_p $ $ K_i$ $ K_d $ ,PPO算法通过不断和环境交互学习得到奖励值(reward)来调整动作输出,实现控制参数的自调整。

底层的经典PID控制器的初始化参数可以通过Ziegler-Nichols法则来整定,上层的PPO强化学习算法是在这个基础之上对PID参数进行细微调整。设计PPO算法的关键是设计合适的状态和动作空间以及奖励函数。状态空间是用于表示智能体所处环境,动作空间是用于表示智能体的动作,奖励函数能正确评价PID参数优化对控制效果的影响。

2.2 状态空间设计

根据直流蒸汽发生器控制原理,直流蒸汽发生器二回路水容积小,在蒸汽流量变化时,蒸汽压力极易发生变化,此时如果给水流量跟不上,很容易对二回路设备造成影响[3]。因此,为了刻画出直流蒸汽发生器的动态特性,便于观测,采用蒸汽压力表示环境的状态,因此,本文选取的状态空间参数包括蒸汽发生器出口压力,当前时刻压力偏差 $ e $ (t)(当前时刻出口压力与设定压力的偏差,即nyc-ny)和上一时刻的压差状态值 $ e $ (t-1)。

2.3 动作空间设计

设计PID控制参数作为智能体的动作空间,维度为3,即 $ \mathrm{a}\mathrm{c}\mathrm{t}\mathrm{i}\mathrm{o}\mathrm{n}=\left[K_p,K_i,K_d,\right] $ ,设定的取值范围为 $K_p= \left[\mathrm{0,10}\right]$ $K_i=\left[\mathrm{0,0.5}\right]$ $K_d=\left[\mathrm{0,0.5}\right]$

2.4 奖励函数设计

奖励函数的设计是强化学习算法的核心问题之一,直接决定了智能体能否达到所设定的预期目标。设计奖励函数最简单的思路是当智能体达到目标值时才能获得奖励,其他时候奖励为0,但是这种奖励函数属于稀疏奖励,也是最常见的一种奖励,但是往往会导致算法难以收敛。其解决思路通常是采用reward shaping,即不是等到目标终止状态才给奖励,而是每向目标靠近都会给出相应的奖励。本文针对直流蒸汽发生器压力控制目标,设计了稀疏奖励和reward shaping后的奖励进行对比研究:

1)稀疏奖励

在每一个episode中,仅当压力达到设定值时才给奖励值r,其余时刻奖励为0。

$ {r_t} = \left\{ {\begin{array}{*{20}{l}} 0,&{\rm{if}}\left| e \right| \geqslant 0.01\text{,} \\ r,&{\rm{if}}\left| e \right| < 0.01 \text{。} \end{array}} \right. $

2)Reward shaping奖励

在每一个episode中,将压力与设定值的距离作为惩罚项,达到目标范围后,给予奖励1。

$ {r_t} = \left\{ {\begin{array}{*{20}{l}} - abs\left( e \right),&{\rm{if}}\left| e \right| \geqslant 0.01 \text{,}\\ 1,&{\rm{if}}\left| e \right| < 0.01 \text{。} \end{array}} \right. $

经过对上述2种奖励函数进行训练和测试,其训练效果如图3所示。横轴表示训练回合数,纵轴表示回合中所获得的总的奖励值。可以看出,智能体没有通过训练获得稳定增长的奖励,即基于稀疏奖励函数的模型没有收敛,没有达到预期的效果,原因在于智能体很难通过随机性的动作选择达到目标状态,也就难以得到最终奖励。图4中采用reward shaping奖励函数,可以看出通过更多的奖励设置来引导智能体,智能体根据实时反馈的奖励值寻找最优的动作,即PID参数,使得训练学习后更加快速选择奖励值高的动作,逐渐收敛。因此,奖励函数的设计决定了强化学习算法的收敛能力。

图 3 稀疏奖励函数对应的训练效果 Fig. 3 Training effects of sparse reward function

图 4 Reward shaping奖励函数对应的训练效果 Fig. 4 Training effects of reward shaping function
2.5 算法参数设计

PPO算法参数设置分为2个部分:神经网络参数设置和算法超参数设置。PPO算法的参数设置较多,而且算法对超参数比较敏感,为了探究不同参数对训练效果的影响,对参数的选择进行多次实验。

1)神经网络参数设置

由于PPO算法基于Actor-Critic框架,其中Acotor使用策略函数,负责生成动作,而Critic使用价值函数,负责评估Actor的表现,因此算法设置有2个神经网络,在固定其他参数的前提下,对Critic网络参数设置进行举例说明。设置不同的隐含层神经元个数,其训练后得到的总奖励值对比曲线如图5所示,神经元个数为20的训练可以最终收敛,但是神经元个数增加至50时,奖励值曲线先是逐步增加后,然后断崖式下降,训练效果急剧恶化,分析其原因是当设计较多节点数会出现梯度爆炸导致训练效果不佳。

图 5 Critic网络不同隐含层节点数的训练效果 Fig. 5 Training effects of critic with different number of hidden layers

因此,经过多次训练验证后,选取的神经网络参数设置如表1所示。

表 1 神经网络参数设置 Tab.1 Neural network parameter setting

2)PPO算法超参数设置

超参数是指算法训练开始前设置的参数,在PPO算法的超参数设计中,选取critic神经网络学习率为代表来说明参数设置对算法的重要性。神经网络的学习率会影响训练的时间及稳定性。

图6学习率为0.0001和0.0002的曲线对比可知,学习率对最终训练效果影响并不显著,但学习率为0.0002的曲线比学习率为0.0001的曲线更快到达稳定的最大奖励值,稳定性也比较强。可见,学习率越大,智能体越能快速学到“知识”。但通过对比学习率为0.0005的曲线可以发现,设置的学习率越大,模型训练的稳定性也就更弱,甚至出现训练效果急剧恶化的现象,所以学习率不宜选取过大。

图 6 Critic网络不同学习率的训练效果 Fig. 6 Training effects of critic with different learning rates

因此,本文选取的PPO算法参数设置如表2所示。

表 2 PPO算法超参数设置 Tab.2 The parameter of PPO algorithm
3 仿真结果对比分析 3.1 直流蒸汽发生器数学模型

通过分析套管式直流蒸汽发生器的结构特点和动态特性,做适当的简化和假设,建立直流蒸汽发生器的动态数学模型。根据套管式直流蒸汽发生器的特点,采用移动边界法,按照二回路工质的状态将其划分为过冷段、沸腾段和过热段等3个区段[9]。直流蒸汽发生器主要参数如表3所示。

用Matlab搭建直流蒸汽发生器仿真模型,在Python中编写强化学习控制算法程序,通过Socket通信方式实现Python算法程序与Matlab仿真模型的数据交换,开展直流蒸汽发生器压力控制的Python与Matlab联合仿真实验研究和性能分析,验证上述方案的有效性。

表 3 直流蒸汽发生器主要参数 Tab.3 The parameter of once-through steam generator
3.2 仿真实验结果分析

为了测试训练好后的强化学习控制算法性能,分别进行了升降负荷工况测试。当负荷由100%降至70%时,蒸汽出口阀门开度阶跃减小,蒸汽压力上升。当阀门开度稳定后,给水流量随阀门开度变化而逐渐减小,蒸汽压力下降,最终趋于稳定。图7为2种控制算法下负荷由100%降至70%的蒸汽压力变化曲线,可知PPO控制较PID控制不仅超调量小,而且能更快稳定。图8给出了负荷由70%升至100%时蒸汽压力的变化曲线,PPO控制不仅减小了超调量,而且提高了系统响应速度。

图 7 负荷由100%降至70%时蒸汽压力变化曲线 Fig. 7 Simulation curve of steam pressure from 100%FP to 70%FP

图 8 负荷由70%降至100%时蒸汽压力变化曲线 Fig. 8 Simulation curve of steam pressure from 70%FP to 100%FP

当给水温度上升时,二回路蒸汽压力迅速上升,它从管壁吸热量也增加,因此压力又逐渐减小;当给水温度下降时,二回路蒸汽压力迅速降低,它从管壁吸热量也下降,因此压力又逐渐回升。图9图10分别给出了给水温度阶跃上升至80℃和阶跃下降至50℃时蒸汽压力变化曲线,可知PPO控制在给水温度变化时,较PID控制超调量小,并且能更快稳定,能够很好地克服由于温度变化带来的扰动。

图 9 给水温度阶跃上升至80℃蒸汽压力变化曲线 Fig. 9 Simulation curve of steam pressure with feed water temperature step up to 80℃

图 10 给水温度阶跃下降至50℃蒸汽压力变化曲线 Fig. 10 Simulation curve of steam pressure with feed water temperature step down to 50℃
4 结 语

本文在PID控制方法的基础之上,引入强化学习算法,提出了一种基于强化学习PPO算法的直流蒸汽发生器蒸汽出口压力双层控制结构,实现了通过上层控制参数调整策略的在线学习和底层PID参数的跟踪调整。通过Matlab与Python联合仿真结果表明,本文提出的基于强化学习的自适应PID控制算法可以实现各种工况下PID参数的自整定,并具有响应速度快、自适应能力强等优点。

参考文献
[1]
刘鹏. 直流蒸汽发生器压力控制方法研究[D]. 哈尔滨: 哈尔滨工程大学, 2010.
[2]
赵刚, 赵宇兰, 刘金福. 套管式直流蒸汽发生器汽轮机一体化控制策略[J]. 节能技术, 2020, 38(220): 162-166.
[3]
张月, 郑明光, 马志才, 等. 螺旋管式直流蒸汽发生器建模仿真与控制[J]. 应用科技, 2020, 47(313): 71-77.
[4]
成守宇, 李程, 彭敏俊, 等. 基于人工免疫的直流蒸汽发生器压力控制研究[J]. 核动力工程, 2015, 36(210): 62-65.
[5]
陈智, 廖龙涛, 刘立新, 等. T-S型模糊神经方法在直流蒸汽发生器给水控制中的应用研究[J]. 核动力工程, 2012, 33(193): 20-23+33.
[6]
郭坤, 武曲, 张义. 基于PPO的机械臂控制研究方法[J]. 电脑知识与技术, 2021, 17(4): 222-225.
[7]
周斌. 基于强化学习的智能汽车自主换道方法研究[D]. 长春: 吉林大学, 2020.
[8]
周志华. 机器学习[M]. 北京: 清华大学出版社, 2015.
[9]
朱景艳, 张志俭, 郭赟. 套管式直流蒸汽发生器动态实时仿真研究[J]. 原子能科学技术, 2011, 45(8): 937-940+942.