一种基于强化学习框架的核安全控制软件异常测试方法
未命名
08-14
阅读:134
评论:0
1.本发明涉及核安全控制软件可靠性测试技术领域,具体为一种基于强化学习框架的核安全控制软件异常测试方法。
背景技术:
2.核安全控制软件是核能工业的重要基础,其核心组件是数字计算和核物理机理数学模型。核安全控制软件研发必须确保小至功能函数、大至业务流程的每一个计算模块与事先设计目标相符。由于软件开发仍然是由人手工完成,而犯错误是人类不可避免之天性,因此对核安全控制软件可靠性的测试是该软件研发过程的重中之重。
3.软件可测试性是源自计算机硬件设计的一套方法论,包含了从需求分析到设计开发的全流程规范性。与一般的软硬件设计不同,核工业对软件的可靠性要求更高,对鲁棒性的要求更严。但是伴随着软件系统复杂程度的显著提高,对核安全控制软件测试的需求内涵也不断演变,已经从基础性的代码检查和错误分析,扩展到物理系统仿真的准确性,可靠性和高响应性的评价,旨在使仿真软件的系统输出与现实物理世界的设备状态渐变呈现出同态演化的效果,从而使软件仿真结果具有现实意义的借鉴性,确保仿真软件与实际情况的差异在可以容忍的设计误差范围之内。
4.但是,愈来愈高的软件系统复杂性也导致系统状态的组合性爆炸,即系统状态空间呈现为超高维度连续空间,其可能的演化过程极为复杂。在有限的计算资源和时间约束之下,显然不可能通过穷尽地遍历所有可能的系统状态,以搜索出系统状态异常。
5.究其原因,主要有两方面问题:
6.第一,从软件角度来说,软件系统所表达的状态空间是物理系统状态空间的超集。这意味着,在软件系统中可能出现的一些状态组合在实际中并不能出现。例如,以浮点数表示的温度压力等物理量在实际中都有所限制,其采样过程的变化范围也有所限。这就说明,在测试中对于状态空间的采样不应是均匀的,而应该对某些状态有所偏重。
7.第二,现实的核能计算过程是连续系统。在实际中通过传感器ad转换,获得离散状态采样序列。但软件的异常亦可能出现在这些细节之中,即可能在一个局部和瞬态出现异常。受制于系统误差和截断误差,如何在大规长时间的仿真过程中,捕获到转瞬即逝且有一定不确定性的异常过程,也是核计算系统测试软件的重要困难。
技术实现要素:
8.针对上述问题,本发明的目的在于提供一种基于强化学习框架的核安全控制软件异常测试方法,采用了强化学习自动求证的方式,可以测试任意形式的数值计算模块,无需过多人工干预;条件过程通过系统参数实现,调节方式简单直观,有利于计算机算法自动化批量处理。技术方案如下:
9.一种基于强化学习框架的核安全控制软件异常测试方法,包括以下步骤:
10.步骤1:确定测试对象,定义模块
11.测试对象为核动力数值仿真计算的c语言代码模块,即luster-c代码;定义实现特定的系统仿真和反馈控制功能的基本单元为一个模块,且一个模块对应一个c文件,一个模块在定时循环中处理一次,即内部无循环地执行系统状态更新和系统观测输出两项任务;
12.步骤2:确定定时循环仿真的相关参数和条件
13.指定定时循环仿真的时间间隔t和循环次数s,在模块仿真时,每当系统时间推进到距离上一次计算t时间,则触发一次新的模块计算,使模块的状态和输出得到更新;
14.步骤3:定义各种异常,并设置各种异常的判断阈值;并多异常性整合判断,得到基于异常判断的回馈函数;
15.步骤4:进行核安全控制软件异常测试预先准备:定义描述某仿真状态下输入具有物理意义的函数、描述仿真状态具有物理意义的函数、描述仿真输出具有物理意义的函数、物理意义判断函数及循环总次数;
16.步骤5:根据步骤1-4定义和确定的内容确定定时循环仿真流程;
17.步骤6:将待测试模块及其包含模块对应的luster-c代码编译为动态链接库文件,并在配置文件中设定定时循环仿真的总循环次数;
18.步骤7:根据定时循环仿真流程编制的定时循环仿真程序,完成软件异常测试。
19.进一步的,所述内部无循环地执行系统状态更新和系统观测输出两项任务的表达如下:
[0020][0021]
其中,t代表采样时间,矢量x
t
∈rn表示模块n维内部连续状态,矢量l
t
∈b
l
表示模块内部l维的逻辑状态,矢量u
t
∈rm代表该模块的m维输入,矢量y
t
∈r
p
表示模块在t时刻的p维输出;函数f(《x
t
,l
t
》,u
t+1
)和g(《x
t
,l
t
》,u
t+1
)分别代表模块内部状态转移和观测输出;∈表达从系统状态观测时的截断误差。
[0022]
更进一步的,所述步骤3具体为:
[0023]
步骤3.1:定义异常
[0024]
设置模块内部状态的初始值为x0,在仿真过程的s次循环中,模块的序列输入用{u1,u2,
…
,un}表示;在此情况下,该模块的序列输出以{y1,y2,
…
,yn}表示,其内部状态演化过程以{<x1,l1>,<x2,l2>,
…
,《xn,ln》}表示;定义的异常包括:
[0025]
1)预期异常
[0026]
定义预期异常为系统输出量与预先指定的时序数量之间的相对差异大于指定阈值;输出预期以关键时刻期望输出值来定义,即根据系统设计目标,在特定输入序列给出模块在t={t1,
…
,tn}时刻共n个预期输出值
[0027]
预期异常的判断用公式表示为:
[0028][0029]
其中,ψ
exp
(y
t
)为预期异常判断值,δ(
·
)为heavenside阶跃函数,即当时间t《0时,δ(t)=0,而时间t≥0时,δ(t)=1;符号‖
·
‖2表示l2范数,∩表示求与逻辑运算;而t
exp
为预期异常的判断阈值,由测试工程师指定;y
t
和分别为实际输出和预期输出;
[0030]
2)版本回归异常
[0031]
定义版本回归异常为在相同初始化状态和输入序列的情况下,旧版本的输出y
oldt
和改进后输出y
t
相近度超出指定阈值;
[0032]
版本回归异常的判断用公式表示为:
[0033]
ψ
reg
(y
t
)=δ(‖y
t-y
told
‖2》t
reg
)
[0034]
其中,ψ
reg
(y
t
)为版本回归异常判断值;t
reg
为版本回归异常的判断阈值,由测试工程师指定;
[0035]
3)状态发散和突变异常
[0036]
定义状态发散和突变异常为系统输出状态持续偏离既定目标或者出现偶发性的数值大幅偏离;
[0037]
状态发散和突变异常的判断用公式表示为:
[0038][0039]
其中,ψ
osc
(y
t
)为状态发散和突变异常判断值,t
osc
为状态发散和突变异常的判断阈值,由测试工程师指定;参数nc代表考虑的过去若干记录的个数;
[0040]
4)分布外异常
[0041]
根据已知模块测试过程的历史记录信息,通过核密度估计器建立非参数形式的概率密度估计函数,根据新输出结构在概率密度估计函数中的概率预测来判断分布外异常;令表示该模块测试历史中获取的数值记录,则分布外异常的判断用公式表示为:
[0042][0043]
其中,ψ
ood
(yi)为分布外异常判断值,t
ood
为分布外异常的判断阈值,由测试工程师指定;核函数k采用高斯核函数,d是高斯核函数的参数,用以在概率密度估计时设置参考的邻域范围;yi为第i个实际输出,y
jhist
为测试历史记录;
[0044]
步骤3.2:多异常性整合判断
[0045]
令集合ω表示多种异常判断方法,即ω={exp,reg,osc,ood},exp、reg、osc和ood分别表示预期异常、版本回归异常、状态发散和突变异常、分布外异常;则整合判断多异常性时,计算其平滑最大值,用公式表示为:
[0046][0047]
其中,α是用户指定的参数,用于指定平滑程度;e表示自然对数;ψ
τ
(yi)表示异常判断值;
[0048]
步骤3.3:得到基于异常判断的回馈函数
[0049]
在多异常性整合判断的基础上,考虑在t时刻的《x
t
,l
t
》状态下输入u
t
,定义针对此时输出的基于异常判断的回馈函数为:
[0050]rt
(《x
t
,l
t
》,u
t+1
)=φ(g(《x
t
,l
t
》,u
t+1
))
[0051]
更进一步的,所述步骤4具体包括:
[0052]
1)描述某仿真状态下输入具有物理意义的函数v
input
(《x
t
,l
t
》,u
t+1
),即当下输入u
t
具有物理意义时,函数输出为1,否则输出为0;
[0053]
2)描述仿真状态具有物理意义的函数v
state
(《x
t
,l
t
》),即系统状态具有物理意义时,函数输出为1,否则输出为0;
[0054]
3)描述仿真输出具有物理意义的函数v
output
(y
t
),即输出y
t
具有物理意义时,函数输出为1,否则函数输出为0;
[0055]
4)物理意义判断函数v(《x
t
,l
t
》,u
t+1
,y
t+1
)=v
input
(《x
t
,l
t
》,u
t+1
)
×vstate
(《x
t
,l
t
》)
×voutput
(y
t+1
);
[0056]
5)循环总次数n
iter
。
[0057]
更进一步的,所述步骤5具体包括:
[0058]
步骤5.1:用神经网络创建描述强化学习dqn算法的状态-操作评估函数q
θ
的网络模型,并初始化q
θ
函数的参数θ;
[0059]
步骤5.2:创建探索过程回放记录存储空间d,其尺寸为nd;
[0060]
步骤5.3:创建空的有效状态历史列表h=[,];
[0061]
步骤5.4:创建空的异常状态临域及控制输入列表u=[,],用于存放进入异常状态之前的系统状态,并且记录在该状态下使用何种输入将进入异常;
[0062]
步骤5.5:将系统的初始状态《x0,l0》加入有效状态历史列表h;
[0063]
步骤5.6:开始循环:
[0064]
步骤5.6.1:从有效状态历史列表h中均匀随机采样,将其作为系统初始状态《x
t
,l
t
》
←
[0065]
sample(h)
[0066]
步骤5.6.2:设置循环标记ζ
←1[0067]
步骤5.6.3:开始循环
[0068]
步骤a:按照∈
greedy
采样规则获取一个输入u
t
←
∈
greedy
(《x
t
,l
t
》,θ);
[0069]
步骤b:执行动作u
t
,观察系统反馈的奖励r
t
和下一个状态《x
t+1
,l
t+1
》;
[0070]
步骤c:保存状态转移{《x
t
,l
t
》,y
t
,r
t
,u
t+1
,《x
t+1
,l
t+1
》,y
t+1
},到探索过程记录存储空间d;
[0071]
步骤d:更新循环标记ζ
←
v(《x
t+1
,l
t+1
》,u
t
,y
t
);
[0072]
步骤e:如果ζ=true,将状态加入有效状态历史列表h
←
[h,《x
t
,l
t
》];否则更改奖励为r
t
←
(-1);
[0073]
步骤f:如果r
t
=1,根据异常状态临域及输入的列表设置k
t
←
q(u,《x
t
,l
t
》,u
t
,r
t
);否则设置其中,k
t
表示对当前态势优劣的评估;γ为0.95为预期折扣,max为取最大值运算,u
′
t
为当前状态下所有可能都操作;
[0074]
步骤g:计算损失函数
[0075]
步骤h:根据梯度以梯度下降算法更新参数β为学习速率;
[0076]
步骤i:更新状态《x
t
,l
t
》
←
《x
t+1
,l
t+1
》
[0077]
步骤5.6.4:直到ζ=0或者r
t
=1
[0078]
步骤5.7:直到循环次数达到n
iter
。
[0079]
更进一步的,所述步骤a中∈
greedy
(<x
t
,l
t
>,θ)采样处理过程为:
[0080]
步骤a1:以均匀的0-1分布生成随机数ψ;
[0081]
步骤a2:若ψ《∈,则随机选择一个输入u
t
;否则按照u
t
←
max
u_tqθ
(<x
t
,l
t
》,u
t
)采样一个输入u
t
;
[0082]
步骤a3:将u
t
作为∈
greedy
(《x
t
,l
t
》,θ)的输出。
[0083]
更进一步的,所述步骤f中根据异常状态临域及输入的列表来计算函数q(u,《x
t
,l
t
>,u
t
,r
t
),处理步骤为:
[0084]
步骤f1:判断<x
t
,l
t
>与u中每个元素的距离,取其最小距离min
w∈u
d(<x
t
,l
t
》,w)作为到u的距离
[0085]
步骤f2:若则更新异常状态临域及控制输入列表u=[u,(《x
t
,l
t
》,u
t
,1)];其中,d
t
是用户指定的阈值;
[0086]
步骤f3:否则计算c=(u[argmin
w∈u
d(《x
t
,l
t
》,w)][2]+=1);如果c》10,则返回0;否则返回r
t
;其中,c为失效计数器,w为某一个异常状态临域及控制输入,[2]+=1运算表示将左运算符的第二个元素自增1。
[0087]
本发明的有益效果是:
[0088]
1)本发明采用了强化学习自动求证的方式,可以测试任意形式的数值计算模块,无需过多人工干预;
[0089]
2)本发明的条件过程通过系统参数实现,调节方式简单直观,有利于计算机算法自动化批量处理。
附图说明
[0090]
图1为本发明基于强化学习框架的核安全控制软件异常测试方法的流程图。
具体实施方式
[0091]
下面结合附图和具体实施例对本发明做进一步详细说明。
[0092]
本发明涉及核计算仿真软件的高可靠性测试领域,提出了一种基于强化学习驱动的核计算状态机异常检测方法。基于本发明思想设计的核计算软件测试系统,有望实现核安全控制软件的可测试性技术突破。
[0093]
1、前置约束
[0094]
本发明所探讨的测试对象为核动力数值仿真计算的c语言代码模块。需预先强调的是,该c语言代码不是人工编制,而是通过代码生成器从预先编制的用以描述计算流程的luster语句中转述而得。由此,从集合论的观点来说,本发明面对测试对象所涉及的c语言代码模块是通常意义上c语言代码的子集。为描述方便,本发明将该子集范畴下的c语言代码称为luster-c代码。因此,本文后续论述皆针对luster-c代码展开测试方法设计。
[0095]
在此,定义luster-c代码的共通特征包括但不限于以下内容:
[0096]
1)一个c文件对应一个算法模块;
[0097]
2)每个c文件中包含若干个全局变量,对应该算法模块的内部状态变量;
[0098]
3)每个c文件中包含若干个函数,其中至少包含一个全局变量的初始化函数,一个
功能处理函数;
[0099]
4)为高时效性考虑,约定每个c文件的函数内部不会包含循环语句,也不会有递归调用。
[0100]
5)计算仿真程序执行时,在系统级的高响应循环中持续调用入口模块。
[0101]
2、定义模块
[0102]
模块是实现特定的系统仿真和反馈控制功能的基本单元,在形式上一个模块对应一个c文件。一个模块在定时循环中处理一次,可认为是内部无循环地执行了系统状态更新和系统观测输出两项任务,用公式表达如下:
[0103][0104]
其中,t代表采样时间,矢量x
t
∈rn表示模块n维内部连续状态,矢量l
t
∈b
l
表示模块内部l维的逻辑状态,矢量u
t
∈rm代表了该模块的m维输入,矢量y
t
∈rk表示模块在t时刻的k维输出。而函数f(《x
t
,l
t
》,u
t+1
)和g(《x
t
,l
t
》,u
t+1
)分别代表了模块内部状态转移和观测输出。另外∈表达了从系统状态观测时的截断误差。通常而言,函数f(
·
,
·
)和g(
·
,
·
)一般为非线性映射。
[0105]
为清晰描述所测试对象内部的逻辑关系,需剖析待测试模块的内部结构,现定义原子模块为:原子模块是其对应的c代码内容中不再包含任何其他函数调用的模块。相对应的,复合模块是其c代码内容包含了任何其他函数调用的模块。即复合模块中至少包含一个原子模块或其他符合模块。因此,在使用某模块时,若将其内部调用的错综复杂关系解析为计算树,则使用的当前模块为根节点,所涉及的原子模块为叶节点,而余下节点皆为复合模块。本软件测试时需从原子模块(计算树的叶节点)开始测试,在完成所有子节点测试后,逐步逆向测试其父节点,直至测试到根节点。其中测试结果可以复用,即已完成测试后且未再经修改的模块可以标记为已经经过测试,而直接服务于后续过程。
[0106]
3、定时循环状态仿真
[0107]
在模块仿真之前,需指定定时循环仿真的时间间隔t和循环次数s。在模块仿真时,每当系统时间推进到距离上一次计算t时间,则触发一次新的模块计算,即对应公式1,使模块的状态和输出得到更新。如此循环,触发n次仿真计算后,仿真过程终止。为满足严格定时的仿真需求,每次循环所触发点计算任务必须在t时间之内完成,不得超时。
[0108]
4、定义异常
[0109]
设置模块内部状态的初始值为x0,在仿真过程的s次循环中,模块的序列输入用{u1,u2,
…
,un}表示。在此情况下,该模块的序列输出以{y1,y2,
…
,yn}表示,其内部状态演化过程以{《x1,l1》,《x2,l2》,
…
,》xn,ln》}表示。以此表达为基础,本发明提出了预期异常、版本回归异常、状态发散、突变异常、分布外异常共五种异常。由于状态发散和突变异常表达形式相同,因此汇合在一起表述。
[0110]
(1)预期异常
[0111]
预期异常被定义为,系统输出量与预先指定的时序数量之间的相对差异大于指定阈值。令t为时间。输出预期以关键时刻期望输出值来定义,即根据系统设计目标,在特定输入序列给出模块在t={t1,
…
,tn}时刻共n个预期输出值预期异常的判断可用公式表示为:
[0112][0113]
其中δ(
·
)为heavenside阶跃函数,即当t《0时,δ(t)=0,而t≥0时,δ(t)=1;符号‖
·
‖2表示l2范数,∩表示求与逻辑运算;而t
exp
为预期异常的判断阈值,由测试工程师指定。
[0114]
(2)版本回归异常
[0115]
在计算模块的程序内容持续改进时,需要保证改进版本前后的程序特性相同,即在相同初始化状态和输入序列的情况下,旧版本的输出y
oldt
和改进后输出y
t
相近。版本回归异常的判断可用公式可表示为:
[0116]
ψ
reg
(y
t
)=δ(‖y
t-y
told
‖2》t
reg
)
[0117]
其中,t
reg
为版本回归异常的判断阈值,由测试工程师指定。
[0118]
(3)状态发散和突变异常
[0119]
状态发散和突变异常是指系统输出状态持续偏离既定目标或者出现偶发性的数值大幅偏离。因此,状态发散和突变异常的判断可用公式可表示为:
[0120][0121]
其中,t
osc
为状态发散和突变异常的判断阈值,由测试工程师指定。参数nc代表考虑的过去若干记录的个数。
[0122]
(4)分布外异常
[0123]
若已知模块测试过程的历史记录信息,那么可根据核密度估计器建立非参数形式的概率密度估计函数。根据新输出结构在概率密度估计函数中的概率预测,可以判断分布外异常。
[0124]
令表示该模块测试历史中获取的数值记录,并且令k(
·
)是核函数。
[0125][0126]
其中,t
ood
为分布外异常的判断阈值,由测试工程师指定。核函数k一般采用高斯核函数。d是高斯核函数的参数,用以在概率密度估计时设置参考的邻域范围。
[0127]
(5)多异常性整合判断
[0128]
令集合ω表示多种异常判断方法,即ω={exp,reg,osc,ood}。那么整合判断多异常性时,可以计算其平滑最大值,用公式表示即为:
[0129][0130]
其中,α是用户指定的参数,用于指定平滑程度。
[0131]
(6)基于异常判断的回馈函数
[0132]
在多异常性整合判断的基础上,考虑在t时刻的《x
t
,l
t
》状态下输入u
t
,可定义针对此时输出的基于异常判断的回馈函数r(
·
,
·
)为:
[0133]rt
(<x
t
,l
t
》,u
t+1
)=φ(g(<x
t
,l
t
>,u
t+1
))
[0134]
5、定时循环仿真流程
[0135]
对于一个特定的luster-c模块而言,其输入空间是由其c函数接口函数中的参数来决定的。若无特殊说明和背景知识约束,可认为u
t
∈rm。但实际中,输入空间通常仅为rm的子空间,即
[0136]
5.1、首先,在预先准备阶段,需完成如下步骤:
[0137]
1)定义描述某仿真状态下输入具有物理意义的函数v
input
(<x
t
,l
t
>,u
t+1
),即当下输入u
t
具有
[0138]
物理意义时,函数输出为1,否则输出为0。函数内部可用逻辑判断或用查表形式实现;
[0139]
2)定义描述仿真状态具有物理意义的函数v
state
(<x
t
,l
t
》),即系统状态具有物理意义时,函数输出为1,否则输出为0。函数内部可用逻辑判断或用查表形式实现;
[0140]
3)定义描述仿真输出具有物理意义的函数v
output
(y
t
),即输出y
t
具有物理意义时,函数输出为1,否则函数输出为0。函数内部可用逻辑判断或用查表形式实现;
[0141]
4)定义物理意义判断函数v(《x
t
,l
t
》,u
t+1
,y
t+1
)=v
input
(《x
t
,l
t
》,u
t+1
)
×vstate
(《x
t
,l
t
》)
×
[0142]voutput
(y
t+1
);
[0143]
5)定义循环总次数n
text
。
[0144]
5.2、然后,在测试执行阶段,需完成如下步骤:
[0145]
1)用神经网络创建描述强化学习dqn算法的状态-操作评估函数q
θ
的网络模型,并初始化q
θ
函数的参数θ;
[0146]
2)创建探索过程回放记录存储空间d,其尺寸为nd;
[0147]
3)创建空的有效状态历史列表h=[,];
[0148]
4)创建空的异常状态临域及控制输入列表u=[,],用于存放进入异常状态之前的系统状态,并且记录在该状态下使用何种输入将进入异常;
[0149]
5)将系统的初始状态<x0,l0》加入有效状态历史列表h;
[0150]
6)开始循环:
[0151]
(1).从有效状态历史列表h中均匀随机采样,将其作为系统初始状态《x
t
,l
t
》
←
sample(h);
[0152]
(2).设置循环标记ζ
←
1;
[0153]
(3).开始循环:
[0154]
a)按照∈
greedy
采样规则获取一个输入u
t
←
∈
greedy
(《x
t
,l
t
》,θ);
[0155]
b)执行动作u
t
,观察系统反馈的奖励r
t
和下一个状态>x
t+1
,l
t+1
>;
[0156]
c)保存状态转移{《x
t
,l
t
》,y
t
,r
t
,u
t+1
,《x
t+1
,l
t+1
》,y
t+1
},到探索过程记录存储空间d
[0157]
d)更新循环标记ζ
←
v(《x
t+1
,l
t+1
》,u
t
,y
t
);
[0158]
e)如果ζ=true,将状态加入有效状态历史列表h
←
,h,《x
t
,l
t
》];否则更改奖励为r
t
←
(-1);
[0159]
如果r
t
=1,根据异常状态临域及输入的列表设置k
t
←
q(u,《x
t
,l
t
》,u
t
,r
t
);否则设
置
[0160]
其中,k
t
表示对当前态势优劣的评估;γ为0.95为预期折扣,max为取最大值运算,u
′
t
为当前状态下所有可能都操作;
[0161]
f)计算损失函数
[0162]
g)根据梯度以梯度下降算法更新参数β为学习速率;
[0163]
h)更新状态《x
t
,l
t
》
←
《x
t+1
,l
t+1
》。
[0164]
(4).直到ζ=0或者r
t
=1。
[0165]
7)直到循环次数达到n
iter
。
[0166]
其中,∈
greedy
采样规则是强化学习的dqn算法中的一个处理策略,∈
greedy
(《x
t
,l
t
》,θ)采样处理过程为:
[0167]
a1:以均匀的0-1分布生成随机数ψ
[0168]
a2:若ψ《∈,则随机选择一个输入u
t
;否则按照u
t
←
max
u_tqθ
(<x
t
,l
t
》,u
t
)采样一个输入u
t
;
[0169]
a3:将u
t
作为∈
greedy
(《x
t
,l
t
》,θ)的输出。
[0170]
其中,根据异常状态临域及输入的列表来计算函数q(u,《x
t
,l
t
>,u
t
,r
t
)的处理步骤为:
[0171]
f1:判断<x
t
,l
t
>与u中每个元素的距离,取其最小距离min
w∈u
d(<x
t
,l
t
>,w)作为到u的距离
[0172]
f2:如果其中d
t
是用户指定的阈值,那么更新异常状态临域及控制输入列表
[0173]
u=[u,(<x
t
,l
t
>,u
t
,1)];
[0174]
f3:否则
[0175]
1.)计算c=(u[argmin
w∈u
d(<x
t
,l
t
>,w)][2]+=1)
[0176]
2.)如果c》10,返回0。
[0177]
其中,c为失效计数器,w为某一个异常状态临域及控制输入,[2]+=1运算表示将左运算符的第二个元素自增1。
[0178]
f4:返回r
t
。
[0179]
本发明的基本思想如下:面向核安全控制软件测试的异常检测方法,应用于核工业仿真计算软件的功能可靠性验证,主要由计算机自动化处理功能组成。测试软件通过读取核计算仿真模块的计算拓扑图和通过kcg转换所得c代码,再将c代码转入定时循环仿真执行环境,进行以下处理步骤:
[0180]
1)将待测试模块及其包含模块对应的luster-c代码编译为动态链接库(dll)文件,其中调用接口预先已知。编译器可用但不限于gcc或clang等。
[0181]
2)在配置文件中设定定时循环仿真的总循环次数。
[0182]
3)启用预先编制的定时循环仿真程序,其中包含一个定时启动的循环,在循环内将自动调用前文所述的动态链接库(dll)文件中的接口函数。
[0183]
4)定时循环仿真程序包含有前文所述的软件异常测试功能模块。在每一次循环
中,仿真程序将当前“系统状态”和“系统输出”发送给软件异常测试功能模块,后者处理后反馈待测试软件模块的“系统输入”。该系统输入经由定时循环仿真程序传输给动态链接库(dll)
[0184]
文件中的接口函数。如此测试不断循环往复,直至完成中循环次数。
[0185]
5)预先编制的定时循环仿真程序将软件异常测试功能模块汇总生成的测试报告输出。
[0186]
6)测试过程结束。
技术特征:
1.一种基于强化学习框架的核安全控制软件异常测试方法,其特征在于,包括以下步骤:步骤1:确定测试对象,定义模块测试对象为核动力数值仿真计算的c语言代码模块,即luster-c代码;定义实现特定的系统仿真和反馈控制功能的基本单元为一个模块,且一个模块对应一个c文件,一个模块在定时循环中处理一次,即内部无循环地执行系统状态更新和系统观测输出两项任务;步骤2:确定定时循环仿真的相关参数和条件指定定时循环仿真的时间间隔t和循环次数s,在模块仿真时,每当系统时间推进到距离上一次计算t时间,则触发一次新的模块计算,使模块的状态和输出得到更新;步骤3:定义各种异常,并设置各种异常的判断阈值;并多异常性整合判断,得到基于异常判断的回馈函数;步骤4:进行核安全控制软件异常测试预先准备:定义描述某仿真状态下输入具有物理意义的函数、描述仿真状态具有物理意义的函数、描述仿真输出具有物理意义的函数、物理意义判断函数及循环总次数;步骤5:根据步骤1-4定义和确定的内容确定定时循环仿真流程;步骤6:将待测试模块及其包含模块对应的luster-c代码编译为动态链接库文件,并在配置文件中设定定时循环仿真的总循环次数;步骤7:根据定时循环仿真流程编制的定时循环仿真程序,完成软件异常测试。2.根据权利要求1所述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述内部无循环地执行系统状态更新和系统观测输出两项任务的表达如下:其中,t代表采样时间,矢量x
t
∈r
n
表示模块n维内部连续状态,矢量l
t
∈b
l
表示模块内部l维的逻辑状态,矢量u
t
∈r
m
代表该模块的m维输入,矢量y
t
∈r
p
表示模块在t时刻的p维输出;函数f(<x
t
,l
t
>,u
t+1
)和g(<x
t
,l
t
>,u
t+1
)分别代表模块内部状态转移和观测输出;∈表达从系统状态观测时的截断误差。3.根据权利要求2所述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述步骤3具体为:步骤3.1:定义异常设置模块内部状态的初始值为x0,在仿真过程的s次循环中,模块的序列输入用{u1,u2,
…
,u
n
}表示;在此情况下,该模块的序列输出以{y1,y2,
…
,y
n
}表示,其内部状态演化过程以{<x1,l1>,<x2,l2>,
…
,<x
n
,l
n
>}表示;定义的异常包括:1)预期异常定义预期异常为系统输出量与预先指定的时序数量之间的相对差异大于指定阈值;输出预期以关键时刻期望输出值来定义,即根据系统设计目标,在特定输入序列给出模块在t={t1,
…
,t
n
}时刻共n个预期输出值预期异常的判断用公式表示为:
其中,ψ
exp
(y
t
)为预期异常判断值,δ(
·
)为heavenside阶跃函数,即当时间t<0时,δ(t)=0,而时间t≥0时,δ(t)=1;符号||
·
||2表示l2范数,∩表示求与逻辑运算;而t
exp
为预期异常的判断阈值,由测试工程师指定;y
t
和分别为实际输出和预期输出;2)版本回归异常定义版本回归异常为在相同初始化状态和输入序列的情况下,旧版本的输出y
oldt
和改进后输出y
t
相近度超出指定阈值;版本回归异常的判断用公式表示为:ψ
reg
(y
t
)=δ(||y
t-y
told
||2>t
reg
)其中,ψ
reg
(y
t
)为版本回归异常判断值;t
reg
为版本回归异常的判断阈值,由测试工程师指定;3)状态发散和突变异常定义状态发散和突变异常为系统输出状态持续偏离既定目标或者出现偶发性的数值大幅偏离;状态发散和突变异常的判断用公式表示为:其中,ψ
osc
(y
t
)为状态发散和突变异常判断值,t
osc
为状态发散和突变异常的判断阈值,由测试工程师指定;参数n
c
代表考虑的过去若干记录的个数;4)分布外异常根据已知模块测试过程的历史记录信息,通过核密度估计器建立非参数形式的概率密度估计函数,根据新输出结构在概率密度估计函数中的概率预测来判断分布外异常;令表示该模块测试历史中获取的数值记录,则分布外异常的判断用公式表示为:其中,ψ
ood
(y
i
)为分布外异常判断值,t
ood
为分布外异常的判断阈值,由测试工程师指定;核函数k采用高斯核函数,d是高斯核函数的参数,用以在概率密度估计时设置参考的邻域范围;y
i
为第i个实际输出,y
jhist
为测试历史记录;步骤3.2:多异常性整合判断令集合ω表示多种异常判断方法,即ω={exp,reg,osc,ood},exp、reg、osc和ood分别表示预期异常、版本回归异常、状态发散和突变异常、分布外异常;则整合判断多异常性时,计算其平滑最大值,用公式表示为:其中,α是用户指定的参数,用于指定平滑程度;e表示自然对数;ψ
τ
(y
i
)表示异常判断值;步骤3.3:得到基于异常判断的回馈函数
在多异常性整合判断的基础上,考虑在t时刻的<x
t
,l
t
>状态下输入u
t
,定义针对此时输出的基于异常判断的回馈函数为:r
t
(<x
t
,l
t
>,u
t+1
)=φ(g(<x
t
,l
t
>,u
t+1
))。4.根据权利要求3述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述步骤4具体包括:1)描述某仿真状态下输入具有物理意义的函数v
input
(<x
t
,l
t
>,u
t+1
),即当下输入u
t
具有物理意义时,函数输出为1,否则输出为0;2)描述仿真状态具有物理意义的函数v
state
(<x
t
,l
t
>),即系统状态具有物理意义时,函数输出为1,否则输出为0;3)描述仿真输出具有物理意义的函数v
output
(y
t
),即输出y
t
具有物理意义时,函数输出为1,否则函数输出为0;4)物理意义判断函数v(<x
t
,l
t
>,u
t+1
,y
t+1
)=v
input
(<x
t
,l
t
>,u
t+1
)
×vstate
(<x
t
,l
t
>)
×voutput
(y
t+1
);5)循环总次数n
iter
。5.根据权利要求4述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述步骤5具体包括:步骤5.1:用神经网络创建描述强化学习dqn算法的状态-操作评估函数q
θ
的网络模型,并初始化q
θ
函数的参数θ;步骤5.2:创建探索过程回放记录存储空间d,其尺寸为n
d
;步骤5.3:创建空的有效状态历史列表h=[,];步骤5.4:创建空的异常状态临域及控制输入列表u=[,],用于存放进入异常状态之前的系统状态,并且记录在该状态下使用何种输入将进入异常;步骤5.5:将系统的初始状态<x0,l0>加入有效状态历史列表h;步骤5.6:开始循环:步骤5.6.1:从有效状态历史列表h中均匀随机采样,将其作为系统初始状态<x
t
,l
t
>
←
sample(h)步骤5.6.2:设置循环标记ζ
←
1步骤5.6.3:开始循环步骤a:按照∈
greedy
采样规则获取一个输入u
t
←
∈
greedy
(<x
t
,l
t
>,θ);步骤b:执行动作u
t
,观察系统反馈的奖励r
t
和下一个状态<x
t+1
,l
t+1
>;步骤c:保存状态转移{<x
t
,l
t
>,y
t
,r
t
,u
t+1
,<x
t+1
,l
t+1
>,y
t+1
},到探索过程记录存储空间d;步骤d:更新循环标记ζ
←
v(<x
t+1
,l
t+1
>,u
t
,y
t
);步骤e:如果ζ=true,将状态加入有效状态历史列表h
←
[h,<x
t
,l
t
>];否则更改奖励为r
t
←
(-1);步骤f:如果r
t
=1,根据异常状态临域及输入的列表设置k
t
←
q(u,<x
t
,l
t
>,u
t
,r
t
);否则设置其中,k
t
表示对当前态势优劣的评估;γ为预期折扣,max为取最大值运算,u
′
t
为当前状态下所有可能都操作;
步骤g:计算损失函数步骤h:根据梯度以梯度下降算法更新参数β为学习速率;步骤i:更新状态<x
t
,l
t
>
←
<x
t+1
,l
t+1
>步骤5.6.4:直到ζ=0或者r
t
=1步骤5.7:直到循环次数达到n
iter
。6.根据权利要求5述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述步骤a中∈
greedy
(<x
t
,l
t
>,θ)采样处理过程为:步骤a1:以均匀的0-1分布生成随机数ψ;步骤a2:若ψ<∈,则随机选择一个输入u
t
;否则按照u
t
←
max
u_t
q
θ
(<x
t
,l
t
>,u
t
)采样一个输入u
t
;步骤a3:将u
t
作为∈
greedy
(<x
t
,l
t
>,θ)的输出。7.根据权利要求5述的基于强化学习框架的核安全控制软件异常测试方法,其特征在于,所述步骤f中根据异常状态临域及输入的列表来计算函数q(u,<x
t
,l
t
>,u
t
,r
t
),处理步骤为:步骤f1:判断<x
t
,l
t
>与u中每个元素的距离,取其最小距离min
w∈u
d(<x
t
,l
t
>,w)作为到u的距离步骤f2:若则更新异常状态临域及控制输入列表u=[u,(<x
t
,l
t
>,u
t
,1)];其中,d
t
是用户指定的阈值;步骤f3:否则计算c=(u[argmin
w∈u
d(<x
t
,l
t
>,w)][2]+=1);如果c>10,则返回0;否则返回r
t
;其中,c为失效计数器,w为某一个异常状态临域及控制输入,[2]+=1运算表示将左运算符的第二个元素自增1。
技术总结
本发明公开了一种基于强化学习框架的核安全控制软件异常测试方法,测试对象为核动力数值仿真计算的C语言代码模块,定义实现特定的系统仿真和反馈控制功能的基本单元为一个模块,一个模块在定时循环中处理一次;每当系统时间推进到距离上一次计算T时间,则触发一次新的模块计算,使模块的状态和输出得到更新;定义各种异常,并设置各种异常的判断阈值;进行核安全控制软件异常测试预先准备,根据前文定义和确定的内容确定定时循环仿真流程,完成软件异常测试。本发明采用了强化学习自动求证的方式,可以测试任意形式的数值计算模块,无需过多人工干预;条件过程通过系统参数实现,调节方式简单直观,有利于计算机算法自动化批量处理。化批量处理。化批量处理。
技术研发人员:唐鹏 吴鹏 刘明星 曹先省 马权 王俊峰
受保护的技术使用者:四川大学
技术研发日:2023.05.26
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种含芒果提取物的护肤液及其制备方法、应用 下一篇:一种自动贴正反胶设备的制作方法
