精华内容
下载资源
问答
  • 线性与非线性回归模型检验方法研究,李武选,,在进行回归分析建模时,模型的准确性是极其重要的,不恰当的模型,会歪曲所研究问题的事实真相,误导人们对问题的正确理解。在取
  • SMV 模型检测

    2014-04-16 07:38:39
    SMV 模型检测工具使用方法 使用cygwin在win32平台下模拟Unix,;1.从NuSMVhomepage下载压缩包NuS;2.参照F:\NuSMV-2.5.4\nusmv;3.下载minisat软件包至F:\NuSMV-;4.下载zchaff软件包至F:\NuSMV-2;5.在cygwin的bash...
  • 模型检测原理、方法学习

    千次阅读 2020-11-01 16:23:18
    模型检测学习 一、模型检测概论 1.1 模型检测所解决的问题:保证并发系统正确性和可靠性 1.2 特点:自动化程度高、简洁明了 1.3 发展:用于描述并发系统性质的CTL逻辑 符号模型检测技术 1.4 基本思想: 用状态迁移...

    模型检测学习

    一、模型检测概论

    1.1 模型检测所解决的问题:保证并发系统正确性和可靠性
    1.2 特点:自动化程度高、简洁明了
    1.3 发展:用于描述并发系统性质的CTL逻辑 符号模型检测技术
    1.4 基本思想
    用状态迁移系统(S)表示系统的行为,用模态/时序逻辑公式(F)描述系统的性质,这样“系统是否具有所期望的性质”就转化为数学问题“状态迁移系统 S 是否是时序逻辑公式 F 的一个模型?”,这个问题是可判定的,即可以用计算机程序在有限时间内自动确定。在这里插入图片描述
    1.5模型检测过程
    (1)建模:第一个步骤是把设计转化为被模型检测工具接受的形式;可能由于验证时间和计算机内存的限制,还需要使用抽象技术简约不相关或不重要的细节。
    (2)刻画(规约):声明设计必须满足的性质。性质刻画通常以某种逻辑的形式(如时序逻辑,这种逻辑体系表示系统随着时间的变化)表示。(用一种逻辑形式来刻画一个性质)
    (3)验证:理想上的验证应该是完全自动的。但实际上常常需要人的帮助,其中之一就是分析结果。当得到失败结果后,通常可以给用户提供一个错误轨迹,可以把它看作检测性质的一个反例,使设计者可以跟踪错误发生的具体位置
    在这里插入图片描述

    二、系统建模

    2.1基于中间建模

    基于中间建模语言,将实际程序语言编写的程序转换为一个中间模型,可以重用模型检查算法,使程序模型检查框架具有更好的扩展性。
    Example
    Fearer /MODEX的目标是将程序的实现级描述(C语言)转换到经典模型检查器spin的验证模型,模型检查器 spin的建模语言是Promela。Feaver/MODEX将源程序的控制流结构表示为Promela语言的控制流结构,用Promela新定义的嵌入原语将源程序中数据声明和基本语句嵌入到验证模型中。

    2.2 直接生成验证模型

    直接生成验证模型:程序模型检查中,对代码的任何修改、变换都可能导致假报错,或者错误遗漏;模型检查中触发的实际代码越多,可以发现的错误越多。从被检查的源程序中直接生成验证模型,可以有效避免上述问题。
    Example:
    NASA Ames的JPF2直接处理程序的中间码而不是源程序本身绕开了复杂的源语言结构
    CMU的MAGIC在生成模型之前对源程序进行了抽象等变换,以减小检查程序的规模
    斯坦福大学的CIVIC用实际(模拟)执行方法得到所需的验证空间
    NASA Ames的JPF-SE扩展JP2实现符号执行
    CMU的CBMC将源程序直接编码为一个等式系统。

    2.3 建模示例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、模型逻辑的种类

    3.1计算树逻辑

    在这里插入图片描述

    在这里插入图片描述
    1、原理:一个系统的运行可以看成系统的转态变化,并发系统因为行为不确定性可以有多个可能的后续状态,所以可以产生一颗状态树。
    2、描述类型:状态前后关系和分支情况
    公式组成:原子命题、逻辑连接符( not,or,and 等)、模态算子(E(Exists), A( Always), X
    (Next-time), U(Until), F(Future), G( Global))
    3、E表示对于某一个分枝, A表示对于所有分枝,X表示下一状态, U表示直至某一状态, F表示现在或以后某一状态, G表示现在和以后所有状态
    4、前两个算子描述分枝情况,后四个算子描述状态的前后关系.
    5、CTL中描述分枝情况和描述状态的前后关系的算子成对出现,即一个描述分枝情况的算子后面必须有一个描述状态的前后关系的算子"
    6、产生规则:原子命题是CTL 公式;如果p,q 是CTL 公式,则not p,p or q,p and q, EX p,E(pU q),EF p,EG p,AX p,A(p U q),AF p,AG p 是CTL 公式。
    7、时间复杂度:对CTL 公式存在线性时间的模型检测算法,即算法的最坏时间复杂度与|S||F|成正比,这里|S|是状态迁移系统的大小,|F|是逻辑公式的长度。
    8、四种常见的CTL运算符
    在这里插入图片描述
    9、示例
    以进程访问共享数据为例,假设有两个进程proc1和proc2,当进入“critical”状态表示正在访问共享数据,“entering”状态表示进程请求访问共享数据,当任务调度允许访问后进入“critical”状态访问共享数据。

    性质1:不存在进程1和进程2同时进入“critical”状态
    对应的CTL:AG ! (proc1.state = critical & proc2.state = critical)

    性质2:如果进程1处于“entering”状态(即请求进入“critical”状态),那么最终进程1都会进入“critical”状态
    对应的CTL:AG (proc1.state = entering -> AF proc1.state = critical)

    3.2 命题线性时序逻辑

    1、原理:系统状态变化的可能性可以看成是一种树状结构同时 它又可以看成是所有可能的系统初始状态经历各种可能变化的集合,也就是把一颗树看成是有限或无限条路径的集合,一 条路径所代表的是系统的一次可能的运行情况"
    2、描述类型:系统的任意一次运行中的状态以及它们之间的关系
    公式组成:原子命题、逻辑连接符(非或与)、模态算子 ◇(Eventually),□(Always)。◇表示现在或以后某一状态(类似CTL 的F), □表示现在和以后所有状态(类似CTL 的G)
    3、产生规则:原子命题是PLTL 公式;如果p,q 是PLTL 公式,则not p,p or q,p and q, ◇p,□p 是PLTL 公式。
    在这里插入图片描述
    4:示例
    性质:信号灯不能在同一时间出现两种以上的颜色
    对应的PLTL: □( ¬(gr∧ye) ∧ ¬(ye∧re) ∧ ¬(re∧gr) ∧ (gr v ye v re) )

    3.3 μ-演算(面向动作)

    原理:系统状态的改变总是某种动作引起的,μ-演算关心的是系统的动作与状态之间的关系描述动作的基本元素是动作符号
    组成:μ-演算公式由原子命题,命题变量,逻辑连接符,模态算子和不动点算子组成。逻辑连接符包括:not,or,and。模态算子:对于每个动作符号a,有两个模态算子[ a ]和< a >。[ a ]表示对所有的a 动作, < a >表示对某个a 动作。不动点算子有最小不动点算子μ和最大不动点算子v。
    产生规则:原子命题和命题变量是μ-演算公式;如果p,q 是μ-演算公式,则not p,p or q,p and q,[ a ]p,< a >p,μX.p,vX.p 是μ-演算公式。
    μ演算的缺点是不易读懂,优点是表示能力强,CTL和LTL可以嵌入到它的真子集中,并且具有和相应的CTL和LTL相同的复杂度的模型检测算法,因此一般将μ-演算作为模型检测的一般框架加以研究。

    四、模型检测的方法

    爆炸问题概念:模型检测基于对系统状态空间的穷举搜索,对于并发系统, 其状态的数目往往随并发分量的增加呈指数增长,因此当一个系统的并发分量较多时,直接对其状态空间进行搜索在实际上是不可行的,这就是所谓的状态爆炸问题。
    为了有效应用模型检测方法,就要研究减少和压缩空间状态的方法,以增加效率和减少内存空间的需求,比如符号模型检测、偏序规约、对称模型检测等
    或者是减少模型本身或者验证性质的复杂性,比如说抽象技术、程序切片和模型分解等

    4.1 符号模型检测

    1、基本原理:系统的状态转换关系用逻辑公式表示,主要基于布尔公式,所以称为符号化模型检测,可以采用二叉判定图或采用二元决策图OBDD来符号化地表示有限状态反应系统,它能较为紧凑地表示状态转换关系,以降低系统模型所需的内存空间。
    2、示例
    布尔公式
    二叉判定图
    真值表
    3、OBDD化简规则
    规则1(S-删除规则)对于OBDD中的节点u,如果u.low=u.high,则删除节点u,并将节点u的父节点直接连接至u.low所对应的节点。
    **规则2(合并规则)**对于OBDD中的节点u和v,如果u.var =v.var、u.low =v.low 且u.high =v.high,则删除节点u,并将节点u的父节点直接连接至节点v。

    在这里插入图片描述
    在这里插入图片描述
    原二叉判定图:
    在这里插入图片描述
    化简叶节点:
    在这里插入图片描述
    化简子节点:
    在这里插入图片描述
    最后结果:
    在这里插入图片描述
    OBDD作为布尔公式的一个规范的表示形式,比一般的传统公式如析取公式和合取公式更加紧凑,而且操作起来效率更高,对于一个给定的布尔公式和给定的变量顺序,将得到唯一的OBDD。
    因为OBDD在获取有限域上简洁的关系表达式时非常的方便,符号模型检测方法采用OBDD表示状态集合及其转换关系的特征函数。

    4.2 偏序简约

    原理:减少系统模型中的状态数目,来降低模型检测算法所搜索的状态空间规模,并且保证被验证性质在精简模型上的正确性。主要面对的是具有并发、异步特点的模型。这种模型的并发、异步的特点使此模型的行为交替运行,其顺序往往不能被性质规范所识别。因此,在考虑模型状态空间时,必须要考虑到所有执行顺序的交替可能性,而“所有”的状态在实际中往往就组成不可处理的“爆炸状态空间"。
    依据:可并发执行的变迁关系具有交换性,当它们以不同的顺序执行时,都会达到统一状态(只应用于异步系统)
    过程:使用改进的DFS算法(深度优先搜索算法)改造图生成约简状态图,约简过程将构建一个状态和边数量都更少的图,这样不但能使用更少的内存,还能加速图的构建过程,最终提高模型检测算法的效率。
    最后模型检测算法就在约简状态图上进行。

    4.3对称模型检测

    原理:由多进程组成的某些进程可能完全类似,并发执行的结果可能产生许多相同或者相似的路径##,所以可以只搜索在对称关系中等价的一种情形,避免重复搜索对称或者相同的系统状态

    4.4 抽象

    抽象的基本方法是抽掉系统中的细节、用尽可能少的状态来刻画系统的动作过程。如下图所示,把一堆状态简化为一个状态。原来系统称为具体系统,而简化了的系统称为抽象系统。抽象系统能够保持具体系统的许多性质,但也会丢失某些性质。
    类型:
    1、我们将很多有共性的精确的数据和抽象数据间建立一个映射关系,这样,一个抽象数据就可以表示所有拥有此共性的数据的集合,这样就有效的减少了可能存在的数据值,减少了状态空间
    2、状态合并,此方法通过删除很多不会影响检验性质的状态,即精减“所有"状态为必然有效的状态,达到有效减少状态空间的作用。
    在这里插入图片描述

    4.5 程序切片

    将程序中不影响所要验证的性质的语句去掉以减少模型复杂性

    4.6 模型分解

    将一个模型分解成若干部分,或者分别验证,或者提供一个讲好的组合方法以降低验证的复杂性。同样的一个需要验证的性质也可以分解成若干部分,然后分别验证。

    五、验证方法

    SAT 求解器

    SAT问题:可满足性问题(Boolean satisfiability problem, SAT 问题)它来自布尔真值判定问题. 给定一组布尔变量 V{a,b,c….} 和一组由 V 描述的合取范式 F, 判断是否存在一个关于X的真值赋值S(X),使得 F(x)为真,如果存在则称 F(X)是 可满足的,否则称 F(X)是不可满足的
    SAT算法:给定一 个 SAT 问题公式 F (X),在有限的时间内判定其是否可满足的算法称为 SAT求解算法,典型的SAT求解算法包括完备算法和不完备算法两大类
    算法分类:

    完备算法特点:

    1. 穷尽搜索空间
    2. 只要有足够的时间 一定能够给出答案适用于实际应用中的问题

    **

    不完备算法特点:

    • 大多采用局部搜索方法
    • 当问题可满足的时候,有可能给出答案,也有可能给不出答案
    • 当问题不可满足的时候,无法给出答案
    • 适用于随机产生的CNF公式 在处理可满足的大规模随 机生成问题时往往比完备算法快

    完备算法——DPLL

    • 大部分的现有确定性求解器都是基于 DPLL 算法。
    • DPLL的基本思想是每次选中一个未被赋值的变量进行赋值,然后判断该赋值是否满足整个公式:
      满足:结束搜索;
      导致冲突:回溯;
      否则:对下一个变量进行赋值

    在这里插入图片描述
    DPLL 的核心思想就是依次对 CNF 实例的每个变量进行赋值,其搜索空间可以用一个二叉树来表示,树中的每个节点对应一个变量,取值只能为 0 或 1,左右子树分别表示变量取 0 或 1 的情况,从二叉树中根节点到叶子节点的一条路径就表示 CNF 实例中的一组变量赋值序列,DPLL 算法就是对这棵二叉树从根节点开始进行 DFS(深度优先搜索) 遍历所有的通路,以找到使问题可满足的解
    不完备算法——SLS

    大多数不完备算法是基于 SLS的,其搜索过程为:给定一 个命题公式,首先随机地生成一个真值赋值 ,如果该赋值使得公式可满足,则搜索结束 ;否则选择其中一个变量翻转其真值,该过程一直重复 ,直到找到使得公式满足的真值赋值或迭代次数达到预定上限 (公式的可满足性不能确定 )。尽管 SLS 求解器会因附加不同的启发式而使复杂性提高,但整体来说, SLS求解器都是基于局部搜索非常简单的规则。

    SMT求解器

    • SMT的全称是Satisfiability Modulo Theories ,可被翻译为“可满足性模理论”
      “多理论下的可满足性问题”或者“特定(背景)理论下的可满足性问题”
    • SMT问题是判定SMT公式是否可满足的问题。SMT公式是结合了背景理论的一阶逻辑公式,这些理论包括一些数学理论和计算机领域内用到的数据结构理论等。
    • 示例
      在这里插入图片描述
      在这里插入图片描述
    • 算法
      积极算法:积极算法是早期的SMT求解器采用的算法,它是将SMT公式转换成一个CNF型的命题公式,然后用SAT求解器求解。
      惰性算法:它目前采用的主流方法,也是被研究得最多的算法。这种算法是先不考虑理论,将一个SMT公式看作SAT公式求解,然后再用理论求解器判定SAT公式的解所表示的理论公式是否一致。目前多数大型的SMT求解器采用了惰性算法。
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    六、模型检测工具

    SMV 用以检测一个有限状态系统是否满足CTL公式,建模方式是以模块为单位,模块描述的基本要素是非确定性选择、状态转换、并行赋值语句。检测的基本方法是以二叉图表示状态转换关系,以计算不动点的方法检测状态的可达性和其所满足的性质
    ***SPIN***用以检测一个有限状态系统是否满足PLIL公式及其他一些性质。它的建模方式是以进程为单位,进程描述的基本要素包括赋值语句,条件语句,通讯语句,非确定性选择和循环语句。模型检测的基本方法是以自动机表示各进程和PLTL公式,以计算这些自动机的组合可接受的语言是否为空的方法检测进程模型是否满足给定的性质

    SPIN

    功能:SPIN适用的领域是检测一个有限状态系统是否满足LTL公式(线性时序逻 辑)表示的性质,如可达性和死锁等。
    建模:首先定义进程模板,每个进程模板作为一类进程的行为规范,而实际系统可以看成一个或若干个进程模板实例的异步组合。进程描述的基本要素包括赋值语句,条件语句,通讯语句,非确定语句和循环语句。

    在这里插入图片描述
    SPIN首先从描述系统模型规格开始,经分析没有语法错误后,对系统的交互进行模拟,直到确认系统设计拥有预期的行为。然后,SPIN将产生一个用C语言描述的验证程序,经检验机编译后执行,执行中如果发现了违背正确性说明的任何反例,则返回到交互模拟执行状态再继续仔细诊断,确定产生反例的原因
    (On-the-fly技术On-the-fly模型检测技术有时也称为局部模型检测。它的基本原理是根据验证性质的需要展开系统路径所包含的状态,以避免预先生成系统中所包含的所有的状态。这种方法的一个显而易见的优点是一旦验证算法找到一个反例,算法即可终止,而不必生成剩余的状态空间。)
    特点:

    • SPIN对用Promela语言描述的网络协议设计规范(Specification)的逻辑一致性进行检验,并报告系统中出现的死锁、无效的循环、未定义的接收和标记不完全等情况

    • SPIN无需构建一个全局的状态图或者Kripke结构,而可以按需生成系统自动机的部分状态进行检验(on-the-fly技术)

    • 可以将SPIN作为一个完整的LTL (Linear Temporal Logic)模型检验系统来使用

    • 对于给定的一个使用PROLEMA描述的协议系统,SPIN可以对其执行任意的模拟,也可以生成一个C代码程序,然后对该系统的正确性进行有效的检验

    • 适于不同规模的系统的验证。对于中小规模的系统,采用穷举状态空间分析,而对于大规模的系统,则采用BitState Hashing方法来有选择地搜索部分状态空间

    CBMC

    当系统具有无穷多个状态转移或状态转移数目非常大时,计算并访问所有状态几乎是不可能的。有界模型检查(bounded model checking)通过有限次展开转移来解决这个问题,转移展开次数称为界。当展开界足够大且趋于无穷时,系统的有界模型等于无界模型。
    通过程序的静态单赋值形式(SSA),CBMC巧妙地用布 尔公式编码程序的(有限的)所有可能运行迹。由于无法静态 确定程序中循环的执行次数,CBMC将循环进行有限次展开, 展开次数可以设定为0或1,也可由用户给定。
    大致过程:通过程序预处理和变量改名得到一个完全由赋值和条件语句组成的程序,将每个赋值语句变换成位向量等式C,检查性质得到位向量等式P,如CP(C析取非p)的布尔公式转换为CNF,输入到一个SAT solver,公式 CP是可满足的,当且仅当存在一个违反给定性质P的运行迹,该运行迹就是一个反例。
    具体过程:
    1、CBMC 的第一步是输入程序,进行预处理和变量改名,然后生成 CFG
    2、当我们获取程序的 cfg 图时,我们就可以获取每条路径对应的布尔公式
    3、选择一条路径,获得逻辑公式,或者说是位向量C
    4、用PCTL公式描述性质,获得位向量P
    5、输入SAT求解器中,然后进行判定。

    六、模型检测的应用

    ![电子线路设计验证的例子包括先进先出存储器的验证,验证的性质包括输入和输出的关系,浮点运算部件的验证,验证的性质包括计算过程所满足的不变式
    复杂的协议的例子包括认证协议的验证,验证的性质包括对通话双方的确认,合同协议的验证,验证的性质包括公平和滥用的可能性。
    软件验证的例子包括飞行系统软件的验证,验证的性质包括系统所处的状态和可执行动作之间的关系; 铁路信号系统软件的验证,验证的性质包括控制信号与控制装置状态的关系。

    本文引用论文网站过多,未一一记录,侵删

    展开全文
  • 模型检测工具汇总(比较全)

    千次阅读 2019-09-23 17:09:21
    面向形式化规格语言的模型检测工具 SMV(Symbolic Model Verifier) 符号模型检测工具 SMV用以检测一个有限状态系统是否满足CTL公式。 它的建模方式是以模块为单位,模块可以同步或异步组合,模块描述的基本...

    来源:http://www.yingzinanfei.com/2017/02/01/moxingjiancegongjuhuizong/

    1. 面向形式化规格语言的模型检测工具
      1. SMV(Symbolic Model Verifier) 符号模型检测工具
        • SMV用以检测一个有限状态系统是否满足CTL公式。
        • 它的建模方式是以模块为单位,模块可以同步或异步组合,模块描述的基本要素包括非确定性选择,状态转换和并行赋值语句。
        • 其模型检测的基本方法是以二叉图表示状态转换关系,以计算不动点的方法检测状态的可达性和其所满足的性质。
        • > http://www.cs.cmu.edu/~modelcheck/smv.html
      2. NuSmv(New Symbolic Model Verifier) 新符号模型检测工具
        • 对SMV重构的一个模型检测工具
        • 支持计算树逻辑CTL和线性时序逻辑LTL描述的所有规范
        • 整合了以SAT为基础的有界模型检测技术
        • > http://nusmv.fbk.eu/
      3. nuXmv 分析同步有限状态和无限状态系统的新符号模型检测工具
        • 扩展于NuSMV
        • 对于有限状态的情形,nuXmv特点是基于SAT算法的有效验证引擎
        • 对于无限状态的情形,nuXmv特点是基于SMT的验证技术,与MathSAT5紧密集成
        • > https://nuxmv.fbk.eu/
      4. Uppaal(Uppsala University & Aalborg University) 时间自动机的模型检测工具
        • 建模和模拟及验证实时系统的工具
        • > http://www.uppaal.org/
      5. STeP(Stanford Temporal Prover) 斯坦福时间验证器
        • 用模型检测器处理子系统的验证问题
        • 用定理证明器将结果汇总处理
        • 不限于有限状态系统
        • 用推论方式联合模型检测应用于更广泛的系统,包括无限数据域的程序
        • > http://www-step.stanford.edu/
      6. CWB(Concurrency Workbench) 适用于并发系统操作与分析的自动化工具
        • 可以检测系统模型之间的等价关系、FRE-ORDER关系和系统是否能够满足$\mu$-演算的公式
        • 建模方法使用CCS语言或LOTOS语言的子集
        • 能分析给定程序的状态空间及检测多种语义的等价性和序列性
        •  
        • > http://homepages.inf.ed.ac.uk/perdita/cwb/
      7. VIS(Verification Interacting with Synthesis) 用于形式验证、综合和模拟有限状态系统的工具
        • 能够综合有限状态系统并验证这些系统的属性
        • > http://vlsi.colorado.edu/~vis/
    2. 面向源程序语言的模型检测工具
      1. SPIN(Simple Promela Interpreter) 显式模型检测工具
        • SPIN用以检测一个有限状态系统是否满足PLTL公式及其他一些性质,包括可达性和循环。
        • 建模方式是以进程为单位,进程异步组合,进程描述的基本要素包括赋值语句,条件语句,通讯语句,非确定性选择和循环语句。
        • 基本方法是以自动机表示各进程和PLTL公式,以计算这些自动机的组合可接受的语言是否为空的方法检测进程模型是否满足给定的性质。
        • 建模语言为PROMELA(PROcess MEta LAnguage),基于进程结构,有类似C语言的结构
        • > http://spinroot.com/spin/whatispin.html
      2. BLAST(Berkeley Lazy Abstraction Software Verification Tool) C程序的时序安全属性自动验证工具
        • 基于反例引导的抽象求精框架对C语言程序进行检测
        • 采用懒惰抽象(lazy abstraction)技术,有效地提高了效率
        • > http://cseweb.ucsd.edu/~rjhala/blast.html
      3. SLAM C程序模型检测工具
        • 将原C语言程序抽象为布尔程序进程验证工作
        • 抽象后的程序仅剩下布尔变量
        • 依靠C2bp,Bebop,Newton3个工具分别负责完成抽象、检测和抽象求精任务
        • > https://www.microsoft.com/en-us/research/project/slam/
      4. JPF(Java Path Finder) Java程序验证工具
        • 实现了一个MC-JVM来解决内存分配和垃圾回收等问题
        • > http://babelfish.arc.nasa.gov/trac/jpf
      5. VeriSoft 直接测试C源代码

         

      6. Eraser 能够检测Java代码
      7. Jchecker C程序模型检测工具
        • 基于谓词抽象理论
        • 采用基于谓词抽象的反例引导的抽象求精框架
        • 能够针对C程序源码抽象出模型并完备地搜索其状态空间,以此验证程序的安全属性
        • 最大限度缩减状态空间
      8. Bandera 并发Java程序的模型检测工具

        • 工具平台
        • 基于程序切片技术,将Java程序转换成中间代码
        • 后端接口适应多种模型检测器,包括SPINSMV
        • > http://bandera.projects.cs.ksu.edu/
      9. Klocwork InsightPro 可以检测多种语言类型的多种质量缺陷和安全漏洞

         

      10. CMC 可以检测C语言程序在执行时OS层级的调度
      11. MaceMC 用于检测分布式系统
        • http://www.macesystems.org/wiki/macemc
      12. Chess 用于检测多线程的Windows程序

        • > https://www.microsoft.com/en-us/research/project/chess-find-and-reproduce-heisenbugs-in-concurrent-programs/
      13. FDR
        • > https://www.cs.ox.ac.uk/projects/fdr/
      14. Murphi 一种枚举显示状态的模型检测器,针对C语言
        • > http://formalverification.cs.utah.edu/Murphi/
      15. MoonWalker 针对.NET应用的模型检测工具

         

      16. XMC 对JAVA程序中同步操作算法检测
      17. FLAVERS(FLow Analysis for VERification of Systems 针对ADA语言的工具

        • > http://formalverification.cs.utah.edu/Murphi/
      18. Mocha 针对C语言的模型检测工具
        • > https://www.cis.upenn.edu/~mocha/
      19. CBMC 针对C语言/C++的模型检测工具
        • > http://www.cprover.org/cbmc/
      20. MAGIC(Modular Analysis of proGrams In C) 针对C语言的模型检测工具
        • > http://www.cs.cmu.edu/~chaki/magic/
    3. 其他模型检测工具
      1. OFMC 一种用于安全协议的符号模型检测工具
      2. CoPS 持久安全性检测器
      3. Rational Tau
      4. F-Soft
      5. IMPACT
      6. Astree analysis tool
      7. Saturn
      8. Calysto
      9. Terminator
      10. SATABS
      11. Terminator
      12. mCRL2(micro Common Representation Language) 并发系统检测工具
      13. LTSA(Labeled Transition System Analyzer) 并发系统检测工具
      14. Maude 基于逻辑语义的工具
      15. ISP MPI程序的检测工具
      16. CHIC(Checker for Interface Compatibility) 模块行为兼容性的验证工具
      17. MRMC(Markov Reward Model) 对离散和连续时间的马尔可夫激励模型
      18. UMLChecker UML模型检测工具
      19. BACH(Bounded ReachAblity CHecker) 用于分析线性混成自动机有界可达性分析
      20. LDPChecker 针对正环闭合自动机(Positive Loop-closed Automata)检验线性时段性质
      21. QRDChecker 针对时段时序逻辑QRDC(Quantified Restrictred Duration Calculs)的检验工具
      22. Kronos
      23. HyTech
      24. AUTOABS
      25. FeaVer
      26. 3VMC
      27. aSpin
    4. 其他分类方式
      • 结合模型检测与定理证明
        • STeP
      • 符号模型检测
        • 用有序二叉图OBDDs(Ordered Binary Decision Diagrams)描述状态迁移图
        • 用布尔逻辑公式描述系统属性
      • 定界模型检测技术(bounded model checking)
        • 依赖于布尔可满足性问题(boolean satisfiability problem, SAT)的求解器
        • 在限定步数k内,确定系统是否满足性质。
        • 若不能确定,则增加k值,重新进行验证
    5. 其他分类方式
      • 基于自动机理论
        • SPIN
      • 基于不动点定理
        • SMV
    6. 其他分类方式
      • 针对实时系统的模型检测工具
        • UPPAAL, Kronos, STeP
      • 针对并发系统的模型检测工具
        • Spin, JPF, Verisoft
      • 针对混成系统的模型检测工具
        • HyTech, HySAT, BACH, LDPChecker
    7. 模型检测的步骤:
      1. 抽象出系统的数学模型
        • 迁移系统
        • 马尔可夫链
        • Kripke结构
      2. 给出能够描述该系统性质的语言
        • 线性时序逻辑LTL
          • 关心系统的任意一次运行中的状态以及它们之间的关系
        • 分支时序逻辑CTL
          • 分叉时序逻辑,用来描述状态的前后关系和分支情况
        • $\mu$-演算
          • 关心系统的动作与状态之间的关系
    展开全文
  • 终于找到一篇全面而又简洁的讲多元线性回归模型检验方法的文章,涵盖了 主要的统计检验——F检验、t检验、DW检验
  • 机器学习之模型检验

    千次阅读 2018-02-13 11:41:43
    模型检验的目的随着学习算法种类,特征转换方式,正则化方式等等的增加,在不同的组合之下我们就会得到种类非常多的学习模型。而在实务上我们通常想要的就是那个Eout最小的模型,所以我们在面临众多的学习模型的时候...

    模型检验的目的

    随着学习算法种类,特征转换方式,正则化方式等等的增加,在不同的组合之下我们就会得到种类非常多的学习模型。而在实务上我们通常想要的就是那个Eout最小的模型,所以我们在面临众多的学习模型的时候需要作出选择,而模型检验结果的好坏正是我们作出选择的依据。下图为一个学习模型的不同组成方式:


    模型选择问题

    通过Eout选择模型?

    这是不可行的。我们希望在得到的模型中选择一个做的最好的模型g要使得它的Eout变得很小,但是在机器学习的一开始就讲Eout是不可知的所以我们没有办法去通过Eout去选择一个模型。

    通过视觉去选择模型?

    这也是不可行的。①我们的视觉只能检查低维度的模型分割情况高维度的我们难以想象 。②我们在选择模型的时候用到了自己的的大脑这不是机器学习这是人脑学习在数据量大的时候将不靠谱。

    通过Ein去选择模型?

    这也是不可行的。①单纯的通过Ein去选择模型会出现过拟合的现象。②Ein的选择会带来模型复杂度的增大。每一个Ein最小的模型都是来自于不同的假设集合。比如对于一个具体的问题,演算法A1在假设集合H1中得到的最优模型是g1,演算法A2在假设集合H2中得到的最优模型是g2,当我们从g1和g2中选择一个最优解的时候我们已经付出了H1∪H2的复杂度。③我们用做出Ein最低的资料去训练然后又用相同的资料做测试这样的结果毫无意义。

    通过测试资料去选择模型?

    这也是不可行的。① 乍一看我们可以通过测试资料的检测拿到去选择犯错误低的模型,但是我们在测试的时候由于我们使用了测试的资料做训练所以这些测试资料早就受到了污染所以我们的检测结果毫无意义!我们做了一件自欺欺人的事情。②事实上我们根本拿不到测试资料。

    测试的方法

    在遭受到以上问题的困扰下我们决定使用一种新的策略它满足以下几点。

    ①我们的测试资料是没有经过污染的(测试资料不用来做训练)。

    ②我们的测试资料不能从外界额外的获取。

    所以我们将以前全部用来训练的资料分割一步分出来,这样的话我们就能够在上述条件下得到模型的测试。

    测试集

    测试集要求

    无论是训练还是面对实务上的数据我们遇到的资料都是独立同分布的,所以我们的测试集也需要在以前的训练集上进行独立同分布的抽样获取。

    测试集的VC保障


    假设我们总共有N笔资料其中的K笔用来做测试N-K笔资料用来做训练,现在训练出来的模型为g- 。现在要从有限多个假设模型中通过测试资料去选择一个最佳的模型g-会得到如下保证:


    这就是我们在有限多个h(x)的情况下霍夫丁不等式的保证。

    测试后的优化

    在以前的学习中我们知道了在其它条件不变的情况下增大数据量N的时候会使得Eout减小。得益于这个结论我们将N-K笔资料训练出来且Eval(测试错误)最小的g-再次丢到整个资料N中进行训练我们会得到更为精确地g。测试的流程图与保障如下:

    模型测试在实务上的表现

    ①只是经过样本训练没有进行测试的K永远为0,所以它犯的错误不会因为K的变化而改变。同时有较高的Eout。

    ②通过测试资料来训练的K永远为0,所以它犯的错误不会因为K的变化而改变。在但是由于它已经看过了测试资料所以会表现的很好,但是这种做法是不可能的(所以为虚线)。

    ③经过N-K笔资料训练过的同时经历了K笔资料验证的会随着K的变化而变化,在K较小的时候Eout会表现的较好。

    ④经过③步骤的筛选之后又经过全部资料的训练之后的模型表现的最好。

    测试集的大小

    通过上图我们会发现在K很大的时候由于训练集数据太小不足以训练一个合格的模型所以g-会很差,但是由于测试集较大所以测试的结果够准确这时Eval(g-)≈Eout(g-)。当K很小的时候我们的训练集的资料较多,会训练出更加准确的模型这时g-会更好一些,但是由于测试集较小所以测试的结果与实际结果会相差很远。如下图:

    在实务上K=N/5是一个不错的选择。

    Leave One Out 检测法

    leave one out的定义

    在上述的例子中我们很难平衡K的大小,所以我们启用leave one out的检测法。该算法是指在所有的资料中依次拿出每一笔资料来作为验证资料(既K=1)最后按照模型在每一笔验证资料上犯错误的平均值的大小选择模型的检测方法。也称之为去1交叉验证法。


    上图中en就是模型在第n笔资料作为验证资料的所犯的错误,Eloocv就是模型在这笔资料上交叉验证的平均错误。我们希望的是

    Eloocv≈Eout。

    leave one out的错误衡量

    在不同的错误衡量下我们会得到不同的Eloocv下图为两个例子:


    在上图中使用的资料是同一个样本,上方的三幅图在较差验证的时候使用的是平方错误验证,而下方的图使用的常数的错误衡量。很显然Eloocv(linear)>Eloocv(constant)而我们会选择Eloocv的最小的那个错误衡量

    leave one out理论上的保证


    通过一系列的计算我们会得到Eloocv的期望值与交叉验证的Eout(N-1)的平均值相同。

    leave one out实务上的表现


    在实务上loocv会有效的避免过拟合通常会做出一个平滑的曲线来。


    在错误检测方面会与Eout有很高的相似性。

    Cross Validation

    loocv遇到的问题

    ①整个过程的计算量十分大,如1000样本容量下我们的loocv会有1000次的训练与1000次的校验。

    ②整个过程中由于每次都在单个点上做错误的衡量,会出现错误曲线的波动明显不够稳定。

    loocv的改进

    我们不在将1000样本容量的样本分成是1000份而是分成V份(比如说是10份)。依次拿每一份当做是验证资料来进行交叉验证进而选择最好的模型。如下图:

    这样会使得我们的运算量减小,我们的错误曲线更为稳定而且效率还不错。顺便指出在平常的交叉验证中通常将资料分为10份来进行交叉验证。

    validation的选择

    ①cross validation在实际上一般比单次的validation要做的好,但是要付出大量计算的代价。如果再计算允许的情况下一般使用corss validation。

    ②在一般情况下5分cv或者是10分的cv就已经会得到很好的模型检测效果了所以一般不会使用loocv来做检测。

    validation其他的一些细节

    ①如果说Ein是初赛的结果(从不同的假设集合中分别选择出Ein最小的模型),那么Eval就是复赛的结果(从已经选好的几个模型中再次选拔)。

    ②通过validation选择出来的模型从犯错误的结果上来看相比真正的测试的时候还是较为乐观的,毕竟所有的资料都当过训练资料与测试资料。




    展开全文
  • 模型检测与程序验证

    2016-10-12 16:11:11
    模型检测与程序验证
  • 模型检测工具spin

    2014-10-18 17:24:18
    好用的模型检测工具spin,功能很强大。
  • 模型检测工具汇总

    千次阅读 2017-02-01 13:08:00
    http://www.yingzinanfei.com/2017/02/01/moxingjiancegongjuhuizong/面向形式化规格语言的模型检测工具SMV(Symbolic Model Verifier) 符号模型检测工具SMV用以检测一个有限状态系统是否满足CTL公式。 它的建模方式...

    来源自我的博客

    http://www.yingzinanfei.com/2017/02/01/moxingjiancegongjuhuizong/

    1. 面向形式化规格语言的模型检测工具

      1. SMV(Symbolic Model Verifier) 符号模型检测工具

        • SMV用以检测一个有限状态系统是否满足CTL公式。
        • 它的建模方式是以模块为单位,模块可以同步或异步组合,模块描述的基本要素包括非确定性选择,状态转换和并行赋值语句。
        • 其模型检测的基本方法是以二叉图表示状态转换关系,以计算不动点的方法检测状态的可达性和其所满足的性质。
        • > http://www.cs.cmu.edu/~modelcheck/smv.html
      2. NuSmv(New Symbolic Model Verifier) 新符号模型检测工具

        • 对SMV重构的一个模型检测工具
        • 支持计算树逻辑CTL和线性时序逻辑LTL描述的所有规范
        • 整合了以SAT为基础的有界模型检测技术
        • > http://nusmv.fbk.eu/
      3. nuXmv 分析同步有限状态和无限状态系统的新符号模型检测工具

        • 扩展于NuSMV
        • 对于有限状态的情形,nuXmv特点是基于SAT算法的有效验证引擎
        • 对于无限状态的情形,nuXmv特点是基于SMT的验证技术,与MathSAT5紧密集成
        • > https://nuxmv.fbk.eu/
      4. Uppaal(Uppsala University & Aalborg University) 时间自动机的模型检测工具

      5. STeP(Stanford Temporal Prover) 斯坦福时间验证器

        • 用模型检测器处理子系统的验证问题
        • 用定理证明器将结果汇总处理
        • 不限于有限状态系统
        • 用推论方式联合模型检测应用于更广泛的系统,包括无限数据域的程序
        • > http://www-step.stanford.edu/
      6. CWB(Concurrency Workbench) 适用于并发系统操作与分析的自动化工具

        • 可以检测系统模型之间的等价关系、FRE-ORDER关系和系统是否能够满足$\mu$-演算的公式
        • 建模方法使用CCS语言或LOTOS语言的子集

        - 能分析给定程序的状态空间及检测多种语义的等价性和序列性

      7. VIS(Verification Interacting with Synthesis) 用于形式验证、综合和模拟有限状态系统的工具

    2. 面向源程序语言的模型检测工具

      1. SPIN(Simple Promela Interpreter) 显式模型检测工具

        • SPIN用以检测一个有限状态系统是否满足PLTL公式及其他一些性质,包括可达性和循环。
        • 建模方式是以进程为单位,进程异步组合,进程描述的基本要素包括赋值语句,条件语句,通讯语句,非确定性选择和循环语句。
        • 基本方法是以自动机表示各进程和PLTL公式,以计算这些自动机的组合可接受的语言是否为空的方法检测进程模型是否满足给定的性质。
        • 建模语言为PROMELA(PROcess MEta LAnguage),基于进程结构,有类似C语言的结构
        • > http://spinroot.com/spin/whatispin.html
      2. BLAST(Berkeley Lazy Abstraction Software Verification Tool) C程序的时序安全属性自动验证工具

      3. SLAM C程序模型检测工具

      4. JPF(Java Path Finder) Java程序验证工具

      5. VeriSoft 直接测试C源代码

      6. Eraser 能够检测Java代码
      7. Jchecker C程序模型检测工具
        • 基于谓词抽象理论
        • 采用基于谓词抽象的反例引导的抽象求精框架
        • 能够针对C程序源码抽象出模型并完备地搜索其状态空间,以此验证程序的安全属性
        • 最大限度缩减状态空间
      8. Bandera 并发Java程序的模型检测工具

      9. Klocwork InsightPro 可以检测多种语言类型的多种质量缺陷和安全漏洞

      10. CMC 可以检测C语言程序在执行时OS层级的调度
      11. MaceMC 用于检测分布式系统
      12. Chess 用于检测多线程的Windows程序

      13. FDR

      14. Murphi 一种枚举显示状态的模型检测器,针对C语言

      15. MoonWalker 针对.NET应用的模型检测工具

      16. XMC 对JAVA程序中同步操作算法检测
      17. FLAVERS(FLow Analysis for VERification of Systems 针对ADA语言的工具

      18. Mocha 针对C语言的模型检测工具

      19. CBMC 针对C语言/C++的模型检测工具

      20. MAGIC(Modular Analysis of proGrams In C) 针对C语言的模型检测工具

    3. 其他模型检测工具

      1. OFMC 一种用于安全协议的符号模型检测工具
      2. CoPS 持久安全性检测器
      3. Rational Tau
      4. F-Soft
      5. IMPACT
      6. Astree analysis tool
      7. Saturn
      8. Calysto
      9. Terminator
      10. SATABS
      11. Terminator
      12. mCRL2(micro Common Representation Language) 并发系统检测工具
      13. LTSA(Labeled Transition System Analyzer) 并发系统检测工具
      14. Maude 基于逻辑语义的工具
      15. ISP MPI程序的检测工具
      16. CHIC(Checker for Interface Compatibility) 模块行为兼容性的验证工具
      17. MRMC(Markov Reward Model) 对离散和连续时间的马尔可夫激励模型
      18. UMLChecker UML模型检测工具
      19. BACH(Bounded ReachAblity CHecker) 用于分析线性混成自动机有界可达性分析
      20. LDPChecker 针对正环闭合自动机(Positive Loop-closed Automata)检验线性时段性质
      21. QRDChecker 针对时段时序逻辑QRDC(Quantified Restrictred Duration Calculs)的检验工具
      22. Kronos
      23. HyTech
      24. AUTOABS
      25. FeaVer
      26. 3VMC
      27. aSpin
    4. 其他分类方式

      • 结合模型检测与定理证明
        • STeP
      • 符号模型检测
        • 用有序二叉图OBDDs(Ordered Binary Decision Diagrams)描述状态迁移图
        • 用布尔逻辑公式描述系统属性
      • 定界模型检测技术(bounded model checking)
        • 依赖于布尔可满足性问题(boolean satisfiability problem, SAT)的求解器
        • 在限定步数k内,确定系统是否满足性质。
        • 若不能确定,则增加k值,重新进行验证
    5. 其他分类方式

      • 基于自动机理论
        • SPIN
      • 基于不动点定理
        • SMV
    6. 其他分类方式

      • 针对实时系统的模型检测工具
        • UPPAAL, Kronos, STeP
      • 针对并发系统的模型检测工具
        • Spin, JPF, Verisoft
      • 针对混成系统的模型检测工具
        • HyTech, HySAT, BACH, LDPChecker
    7. 模型检测的步骤:

      1. 抽象出系统的数学模型
        • 迁移系统
        • 马尔可夫链
        • Kripke结构
      2. 给出能够描述该系统性质的语言
        • 线性时序逻辑LTL
          • 关心系统的任意一次运行中的状态以及它们之间的关系
        • 分支时序逻辑CTL
          • 分叉时序逻辑,用来描述状态的前后关系和分支情况
        • $\mu$-演算
          • 关心系统的动作与状态之间的关系
    展开全文
  • 被拉去模型检测方向了。。太难了。。。 一、概念 模型检测(model checking)是一种针对有限状态并发系统的自动验证技术,主要通过显式状态搜索或隐式不动点计算来验证有穷状态并发系统的模态/命题性质。 基本思想:...
  • 本文运用模型检测技术,以Dolev-Yao模型为基础,提出了使用Promela语言和模型检测工具SPIN对Andrew RPC 协议进行建模和分析的方法,发现了该协议存在重放攻击漏洞,该方法具有一定通用性和很好的参考价值。
  • 根据验证对象(模型),验证性质(逻辑),验证方法来分,目前的model checking可分为如下几种: 1 基于LTS的功能性验证 2 基于离散概率模型,如Markov链的性能可靠性等验证 (Probabilistic Model Checking) 3 基于连续...
  • 模型检测:理论方法与应用。模型检测的经典论文,作者:林慧民、张文辉
  • 模型检测学习笔记(一):绪论

    千次阅读 2018-10-15 19:09:54
    一、概念  模型检测是一种用于自动验证有限状态并发系统的技术;模型检测算法通常对系统状态空间进行穷尽搜索来确定...符号化模型检验技术; 偏序规约技术; on-the-fly技术; 对称技术; 抽象和组合技术; 二...
  • Automata Theory and Model Checking,是一个关于自动机理论和模型检验的论文
  • SMV 模型检测工具的使用

    千次阅读 2018-12-30 11:49:12
    SMV的核心是在ASSIGN里面定义好有限状态机之间的状态转移,然后在SEPC里面使用CTL 计算树逻辑表示出所要检验的性质。如果状态机满足相应的性质,那么它就显示对应的sepecification为true,否则就给出一条路径证明这...
  • 传统模型检测技术主要采用时态逻辑描述被验证的规范,人们较少注意多智能体认知逻辑的模型检测问题。而在分布式系统领域,系统和协议的规范很适合用认知逻辑来描述。Web服务是一个典型的分布式系统。把Web服务组合建模...
  • 软件模型检测简介

    千次阅读 2014-10-18 20:40:56
    1. 什么是软件模型检测(software model checking) a) 软件模型检测是用来在程序执行过程中证明性质正确性的算法。它源于逻辑和定理证明,这两者都给出了基础问题形式化的基本概念,以及提供了分析逻辑问题的...
  • [精选]计量经济学模型的估计方法与模型检验.pptx
  • 模型检测model checking学习

    千次阅读 2014-10-18 21:17:59
    模型检测(model checking)是一种很重要的自动验证技术。它最早由Clarke和Emerson以及Quielle和Sifakis在1981年分别提出的,主要通过显式状态搜索或隐式不动点计算来验证有穷状态并发系统的模态/命题性质。由于模型...
  • 检验污染模型matlab代码模型 Linux 代表了第一个在单个图像上联合检测人体、手、面部和足部关键点(总共 135 个关键点)的实时多人系统。 特征 功能: 2D实时多人关键点检测: 15 或 18 或25 关键点身体/足部关键点...
  • 多元线性回归模型检验方法

    万次阅读 2019-08-10 22:07:21
    终于找到一篇全面而又简洁的讲多元线性回归模型检验方法的文章 PDF下载地址 链接:https://pan.baidu.com/s/1UbyZcMC1VRTmlCEaX4Vybg 提取码:g481 具体内容 一、经济意义检验 经济意义检验主要检验模型参数估计量在...
  • 模型检验-计算树逻辑(CTL)小例

    千次阅读 2018-10-17 15:30:58
    模型检验-计算树逻辑(CTL)小例 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AX是相对于初始节点(x=1)开始的树而言的,由于AX表示对于...
  • 检验污染模型matlab代码模型 Linux 代表第一个实时多人系统,在单个图像上联合检测人体、手和面部关键点(共 135 个关键点) 。 特征 功能: 2D实时多人关键点检测: 15 或 18 或25 关键点身体/足部关键点估计。 ...
  • 检验污染模型matlab代码模型 Linux 代表第一个实时多人系统,在单个图像上联合检测人体、手和面部关键点(共 135 个关键点) 。 特征 功能: 2D实时多人关键点检测: 15 或 18 或25 关键点身体/足部关键点估计。 ...
  • 由于同时支持软件测试和模型检测需求的程序建模比较少,为此提出了一种程序建模技术,该技术主要包括物理存储模型、可视化模型和代数模型。利用程序流图的思想建立物理存储模型和可视化模型,并通过建立在严格数学...
  • 误差分析与模型检验

    千次阅读 2019-08-22 11:50:34
    误差分析与模型检验 误差,稳定性,检验,敏感性 误差分析 1.理论分析 理论分析的原理其实来自于高等数学中的一个概念: 显然这个式子具有普遍性,则也存在: 而对于误差分析为了保证可比性,通常进行变形...
  • 行人检测训练模型

    2018-09-28 13:48:04
    xml文件,为训练好的行人检测模型,可以用于opencv3.0
  • 多元线性回归模型检验-续上篇

    千次阅读 2020-04-04 20:42:46
    其实上一篇讨论的多元线性回归还不是很全面,而且训练和测试集都没有分,在这里继续讨论多元线性回归模型检验的相关问题。 多元线性回归的输出变量是连续变量,输入变量中如果包含离散变量需要做哑变量或One-hot编码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 534,804
精华内容 213,921
关键字:

模型检验