UPPAAL使用方法

news2024/11/15 15:39:39

UPPAAL使用方法

由于刚开始学习时间自动机及其使用方法,对UPPAAL使用不太熟悉,网上能找到的教程很少,摸索了很久终于成功实现一个小例子,所以记录一下详细教程。

这里用到的例子参考【UPPAAL学习笔记】1:基本使用示例,详细信息可自行有链接查看,本文重点手把手教学UPPAAL方法,本人也是刚开始学习,有不足或理解有误的情况欢迎指出。

下面使用几个小例子展示使用 UPPAAL建模,验证的方法。

简单迁移

建模

首先,打开UPPAAL 后,【文件】→【新建模型】
在这里插入图片描述
新建模型如下所示:
在这里插入图片描述
需要建的模型如下图,为一个简单的TS模型
在这里插入图片描述
在【编辑器】的模板(【Template】)中,右侧通过添加位置、顶点(钉子)和边进行建模。
在这里插入图片描述
位置用名称和不变量标记。通过下面红框修改位置类型
在这里插入图片描述
通过【编辑location】,在【名字】处为位置命名,在【Invariant】处编辑不变量
在这里插入图片描述
在这里插入图片描述
通过下图添加位置
在这里插入图片描述
以相同的方法,将其命名为end,通过下图添加边,边用守卫条件(Guard)(例如,e == id)、同步(Sync)(例如,go?)和赋值(Update)(例如,x:=0)标记。

在这里插入图片描述
创建模型如下,可以在红框处修改模板名字,添加参数
在这里插入图片描述

在【模型声明】处将模型实例化,得到Process,此处实例化Template(),名称与模板名称相同,由于此处模板没有参数,故()内为空

// Place template instantiations here.
Process = Template();
// List one or more processes to be composed into a system.
system Process;

在这里插入图片描述
建模完成后,对模板进行语法检查,点击【工具】→【检查语法】,若右下角没有消息,则语法无误,可继续进行模拟或验证。
在这里插入图片描述

模拟

在【模拟器】中可以看到这个模型
在这里插入图片描述
选中例化对象Process,点击【下一步】,就可以往下走
在这里插入图片描述
当TS走到end状态后就无路可走了,故【使能迁移】里也没有选项了

验证

在【验证器】中,点击【添加】,在【待验证性质】中输入待验证性质

性质描述意义如下:

  • E<> p:存在一条路径,其中最终成立p,可达属性()。
  • A[] p:对于所有路径,始终成立p,安全属性(安全属性的形式是:某些坏事永远不会发生)。
  • E[] p:存在一条路径,其中始终成立p,安全属性。
  • A<> p:对于所有路径,最终将成立p,活性属性(活性属性的形式是:某些事最终会发生)。
  • p --> q:每当成立p时,最终将成立q,活性属性。
    在这里插入图片描述
    此处验证两条性质:
    E<> Process.end
    A<> Process.end

在这里插入图片描述
依次对性质进行验证,选中需验证的性质,点击【开始验证】即可。验证结果在下方【验证进度与结果】中。
在这里插入图片描述

此处,E<> Process.end表示存在一条路径,未来能让实例Process到达end状态,显然,验证结果通过;
A<> Process.end表示对所有路径,都能在未来让实例Process达到end状态,验证结果不通过。因为一个TS的Guard条件通过,只表示“这条迁移可以发生”,但不代表一定会发生,可能存在一直停留在start状态的情况,而不发生这条唯一的迁移,因此不满足这条性质。
若想让迁移在一定条件下一定发生,可以为状态设置不变性,一旦不变性不满足,就无法停留在这个状态,迫使其进行迁移。

互斥进入临界区

新增内容为:

  1. 边的标记方法
  2. 模板参数设置及实例化

建模

模型如下图
在这里插入图片描述

同步通道和时钟控制

新增内容:

  1. 模板参数设置及实例化
  2. 一个项目中使用两个进程模板
  3. 为状态添加不变性条件

建模

模型如下图所示
在这里插入图片描述

需建立两个模板,新建模板方法为:【编辑】【添加模板】

在这里插入图片描述
建模方法同上,对边的标记方法为:右键需标记的边,选择【编辑edge】
在这里插入图片描述
依次填写,Guard(守卫条件,如,x>=2e == id),同步通信(Sync,如,go?reset?),赋值(Update,如,x:=0e:=id
在这里插入图片描述
建立模型如下图。
模板P1是一个自循环,Guard条件x>=2时进行Sync(同步通信),往通道reset上发送重置信号(!表示发送,?表示接收)
在这里插入图片描述
模板Obs(意为Observer,观察者),行为就是接收到通道reset上的信号之后,就将全局变量x设置为0(其实是表示时钟重置,要从后面声明的地方看出这一点):
在这里插入图片描述
这里要注意taken上有个C,因为它勾选了Commited,被标记Commited的状态会冻结时间流逝,而且下一次转移一定从某个Commited状态开始(要把所有冻结时间的状态走出去,才能考虑普通的状态),如果多个状态被标Commited,它们就按Interleaving算。
模型声明部分,这里可以不去显式做例化(为啥?),直接两个模板拿来用:

// Place template instantiations here.
// Process = Template();
// List one or more processes to be composed into a system.
system P1, Obs;

在这里插入图片描述

设置全局变量(全局的【声明】),其中,x是时钟(clock),reset是通道(chan):

// Place global declarations here.
clock x;
chan reset;

在这里插入图片描述

模拟

语法检查通过就可以去模拟,就是P1发信号然后Obs重置然后再回来,因为taken状态被标Commited,所以到必须使Obs走出这个状态才能桀纣往下走,即图中红框部分:总是先让Obs回到idle状态。在这里插入图片描述

验证

此处验证两条性质:
A[] Obs.taken imply x>=2,即对所有路径的所有状态都有,如果Obs到达了taken状态,一定有时钟x满足x>=2,验证是通过的,因为x>=2才能发信号到reset通道上,让Obs同步接收之后进到taken状态。
E<> Obs.idle and x>3,即存在某个路径上某个状态,Obsidle状态闲置时就有x>3了,验证也是通过的。这条性质直观上可能让人感觉不能通过(因为x>=2P1迁移的条件),但是回想最开始学的,这些Guard条件满足时只表示“迁移可以发生”,而不是一定会发生,所以P1完全可以x超过3了还不发生迁移,也就不会往reset发信号,所以Obs也就处在最开始的idle状态了。
在这里插入图片描述

为状态添加不变性条件

对上述E<> Obs.idle and x>3性质的验证通过,是因为可以一直停留在某个状态,要解决这个问题,可以为状态添加一个有关时钟的不变性条件,当时间流逝使得这个条件不满足时,就不得不离开这个状态,发生迁移。
在模板P1中编辑位置loop(双击或右键编辑),在【Invariant】里添加x<=3,为P1loop状态添加了x<=3的限制,也就是说它最多可以在这里停留到时钟流到3,就必须执行迁移到别的状态去了.
在这里插入图片描述
在这里插入图片描述
验证性质A[] Obs.taken imply (x>=2 and x<=3),即只要Obs到了taken状态,时钟x一定在23之间,验证通过。

验证性质E<> Obs.idle and x>2,即可能Obsidle状态时,时钟x是大于2的,验证通过。因为这个也是满足loopx不超过3的不变性的,完全可以等到2.999...

但是它对性质E<> Obs.idle and x>3就是不满足的了,因为一旦x>3P1就必须从loop迁移走,发出的信号让Obs也同步离开idle
在这里插入图片描述

参考文献

【1】【UPPAAL学习笔记】1:基本使用示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CyberScheduler调度引擎

CyberScheduler 架构设计 1. 多租户架构&#xff0c;支持 SaaS 化部署和私有化部署 2. 多源异构数据&#xff08;多种集群、数据库&#xff09;、多计算引擎、多类型任务的统一编排调度 3. 灵活资源管理能力&#xff0c;支持不同类型任务的资源管理和资源隔离&#xff0c;优…

docker 挂载运行镜像

文章目录 前言docker 挂载运行镜像1. 作用2. 命令3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢…

1077: 平衡二叉树的判定

解法&#xff1a; 平衡二叉树是一种特殊的二叉树&#xff0c;它满足以下两个条件&#xff1a; 左子树和右子树的高度差不超过1&#xff08;即&#xff0c;左右子树高度差的绝对值不超过1&#xff09;。左子树和右子树都是平衡二叉树。 后序遍历过程中每次判断左右子树高度差…

收入极高的副业兼职,单价179元的养生爆款卖出3000份

做养生赛道切忌不要只靠接广告变现&#xff0c;换个思路以产品为核心&#xff0c;走低粉高变现才是变现效率最高的。 周周近财&#xff1a;让网络小白少花冤枉钱&#xff0c;赚取第一桶金 今天&#xff0c;我们要分析的这位养生博主&#xff0c;仅凭一款售价为179元的温通膏&a…

STM32 MAP文件结合固件文件分析

文章目录 加载域的结束地址并不是固件的结束地址&#xff1f;ROM中执行域的描述RAM中执行域的描述问题分析 中断向量表在固件中的存储位置代码段在固件中的位置只读数据Regin$$Table RW Data段其中的内部机理 总结 MAP 文件分析可以参考之前的文章 程序代码在未运行时在存储器…

漫谈企业信息化安全 - 勒索软件攻击

一、引言 首先&#xff0c;网络攻击是一个非常广泛的话题&#xff0c;网络攻击从一般分类上包含了恶意软件攻击、钓鱼攻击、拒绝服务攻击&#xff08;DoS/DDoS&#xff09;、中间人攻击、SQL注入、跨站脚本、0-Day攻击、供应链攻击、密码攻击等等&#xff0c;勒索软件攻击只是…

EfficientSAM分割对象后求其中图像中的高

1 分割对象 EfficientSAM https://github.com/yformer/EfficientSAM 2 计算在图像中最高点即y值最小点 import os import cv2def read_images(folder_path):image_files [f for f in os.listdir(folder_path) iff.endswith(".jpg") or f.endswith(".png&quo…

OSPF状态机及网络接口类型

、OSPF 状态机 Down一旦接收到hello 包进人下一个状态机 Init 初始化接收到的hello 包中&#xff0c;若存在本地的 RID&#xff0c;进入下一状态 2way 双向通讯--邻居关系建立的标志 条件匹配:点到点网络直接进入下一个状态机 MA 网络将进行 DR/BDR 选举(40S) 非 DR…

安卓数据存储(键值对、数据库、存储卡、应用组件Application、共享数据)

键值对 此小节介绍Android的键值对存储方式的使用方法&#xff0c;其中包括&#xff1a;如何将数据保存到共享参数&#xff0c;如何从共享参数读取数据&#xff0c;如何使用共享参数实现登陆页面的记住密码功能&#xff0c;如何使用Jetpack集成的数据仓库。 共享参数的用法 …

Linux笔记之命令行JSON处理器jq

Linux笔记之命令行JSON处理器jq code review! 文章目录 Linux笔记之命令行JSON处理器jq1.安装2.jq 基本用法3.例程3.1. 示例JSON文件3.2. 读取特定字段3.3. 管道过滤器&#xff08;Pipe Filters&#xff09;3.4. 映射过滤器&#xff08;Map Filters&#xff09;3.5. 条件过滤…

python使用jsonpath来查找key并赋值

目录 一、引言 二、JsonPath简介 三、Python中的JsonPath库 四、使用JsonPath查找JSON Key 五、使用JsonPath赋值JSON Key 六、高级用法 七、结论 一、引言 在数据驱动的现代应用中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为一种广泛使…

使用echarts配置中国地图

使用echarts配置中国地图 首先要下载地图的geoJSON数据&#xff0c;有两个方式下载&#xff0c;一种是去echarts的github资源文件里面&#xff0c;一种是去阿里云的datav网站。 1.1 echarts文档下载中国地图json数据 1.2 阿里云datav 新建项目&#xff0c;新建index.html,下…

HeyGen AI是什么?怎样使用HeyGen AI?

在数字时代&#xff0c;视频内容为王。无论是在社交媒体还是网站上&#xff0c;视频都以其独特的方式吸引着人们的眼球。然而&#xff0c;制作出专业水准的视频往往需要大量的时间和技术知识。HeyGen AI正是为了解决这一难题而诞生的。 HeyGen AI简介 HeyGen AI是一个创新的视…

做抖音小店需要清楚的5个核心点!

大家好&#xff0c;我是喷火龙。 不管你是在做抖音小店&#xff0c;还是在做其他的电商平台&#xff0c;如果已经做了一段时间了&#xff0c;但还是没有拿到什么结果&#xff0c;我所指的结果不是什么大结果&#xff0c;而是连温饱都解决不了&#xff0c;甚至说还在亏钱。 有…

ICLR 2024现场精彩回顾 机器学习大牛们的“踩高跷秀”嗨翻全场

会议之眼 快讯 2024年5月7-11日&#xff0c;第12届ICLR(International Conference on Learning Representations)即国际学习表征会议已经在奥地利维也纳展览中心圆满结束&#xff01;国际学习表征会议&#xff08;ICLR&#xff09;作为机器学习领域的顶级会议之一&#xff0c;…

Threejs路径规划_基于A*算法案例V2

路径规划算法中有两种算法使用最普遍&#xff0c;第一个是Dijkstr算法&#xff0c;第二个是A*算法&#xff0c;两个算法各有千秋&#xff0c;Dijkstra算法可以保证最优解&#xff0c;但是复杂度较高&#xff0c;尤其当点数量较多时&#xff0c;A*算法是一种启发式搜索算法&…

Offline RL : Beyond Reward: Offline Preference-guided Policy Optimization

ICML 2023 paper code preference based offline RL&#xff0c;基于HIM&#xff0c;不依靠额外学习奖励函数 Intro 本研究聚焦于离线偏好引导的强化学习&#xff08;Offline Preference-based Reinforcement Learning, PbRL&#xff09;&#xff0c;这是传统强化学习&#x…

设计模式13——桥接模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 桥接模式&#xff08;Bridge&a…

Hsql每日一题 | day02

前言 就一直向前走吧&#xff0c;沿途的花终将绽放~ 题目&#xff1a;主播同时在线人数问题 如下为某直播平台主播开播及关播时间&#xff0c;根据该数据计算出平台最高峰同时在线的主播人数。 id stt edt 1001,2021-06-14 12:12:12,2021-06-14 18:1…

makefile 编写规则

1.概念 1.1 什么是makefile Makefile 是一种文本文件&#xff0c;用于描述软件项目的构建规则和依赖关系&#xff0c;通常用于自动化软件构建过程。它包含了一系列规则和指令&#xff0c;告诉构建系统如何编译和链接源代码文件以生成最终的可执行文件、库文件或者其他目标文件…