UPPAAL使用方法

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. 邊用守衛條件(Guard)(例如,e == id)、同步(Sync)(例如,go?)和賦值(Update)(例如,x:=0)標記示例。
2. 模板參數設置及實例化

建模

同步通道和時鐘控制

新增內容:

  1. 邊的標記方法
  2. 模板參數設置及實例化
  3. 一個項目中使用兩個進程模板
  4. 為狀態添加不變性條件

建模

模型如下圖所示
在這里插入圖片描述

需建立兩個模板,新建模板方法為:【編輯】【添加模板】

在這里插入圖片描述
建模方法同上,對邊的標記方法為:右鍵需標記的邊,選擇【編輯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.pswp.cn/diannao/14493.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14493.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14493.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

專業級潤滑油,一站式批發服務

要為機械設備提供持久穩定的動力保障嗎&#xff1f;選擇我們的專業級潤滑油&#xff0c;讓您的設備運轉更順暢&#xff0c;效率更高。 我們專業從事潤滑油批發多年&#xff0c;以優質的產品、合理的價格和完善的服務贏得了廣大客戶的信賴。無論是汽車、機械還是工業設備&#x…

【Vue3】env環境變量的配置和使用(區分cli和vite)

原文作者&#xff1a;我輩李想 版權聲明&#xff1a;文章原創&#xff0c;轉載時請務必加上原文超鏈接、作者信息和本聲明。 文章目錄 前言一、env文件二、vue3cli加載env1..env配置2..dev配置&#xff08;其他環境參考&#xff09;3.package.json文件4.使用 三、vue3vite加載e…

【html5】03-新表單元素及屬性

目錄 1 引言 2 智能表單控件-type 3 表單屬性 form input 5 答疑--解決required自定義提示信息 1 引言 HTML5引入了一系列新的表單輸入類型&#xff0c;如email、url、number、range、date、time、datetime-local、month、week、search、color和tel等。這些新類型增強了表…

FFmpeg源碼:bytestream_get_byte函數解析

一、引言 FFmpeg源碼中經常使用到bytestream_get_byte這個函數&#xff0c;比如使用FFmpeg對BMP圖片進行解析&#xff0c;其源碼會調用函數bmp_decode_frame&#xff0c;而該函數內部會通過bytestream_get_byte讀取BMP 的header。本文講解函數bytestream_get_byte的作用和內部…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已經大致說明了DataFrame APi,下面我們具體介紹DataFrame DSL的使用。DataFrame DSL是一種命令式編寫Spark SQL的方式&#xff0c;使用的是一種類sql的風格語法。 文章鏈接&#xff1a; 一、單詞統計案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…

在SpringBoot中添加自定義增強SpringEvent事件組件

場景說明&#xff1a;在使用SpringBoot時&#xff0c;總是要添加一大堆自定義事件&#xff0c;實現ApplicationEvent&#xff0c;來實現事件發送。 這樣寫代碼量非常大。為了方便和避免出錯&#xff0c;封裝自定義的模塊&#xff0c;快速實現泛型中調用SpringEvent實現事件。省…

Xinstall助力實現App間直接跳轉,提升用戶體驗

在移動互聯網時代&#xff0c;App已成為我們日常生活中不可或缺的一部分。然而&#xff0c;在使用各類App時&#xff0c;我們經常會遇到需要在不同App之間切換的情況&#xff0c;這時如果能夠直接跳轉&#xff0c;將會大大提升用戶體驗。而Xinstall正是這樣一款能夠幫助開發者實…

OpenCV 獲取 RTSP 攝像頭視頻流保存至本地

介紹 Java OpenCV 是一個強大的開源計算機視覺庫&#xff0c;它提供了豐富的圖像處理和分析功能&#xff0c;越來越多的應用需要使用攝像頭來獲取實時視頻流進行處理和分析。 在 Java 中使用 OpenCV 打開攝像頭的基本步驟如下&#xff1a; 確保已經安裝了OpenCV庫使用 OpenC…

Raylib 繪制自定義字體的一種套路

Raylib 繪制自定義字體是真的難搞。我的需求是程序可以加載多種自定義字體&#xff0c;英文中文的都有。 我調試了很久成功了&#xff01; 很有用的參考&#xff0c;建議先看一遍&#xff1a; 瞿華&#xff1a;raylib繪制中文內容 個人筆記&#xff5c;Raylib 的字體使用 - …

W801 實現獲取天氣情況

看了小安派&#xff08;AiPi-Eyes 天氣站&#xff09;的源碼&#xff0c;感覺用W801也可以實現。 一、部分源碼 main.c #include "wm_include.h" #include "Lcd_Driver.h"void UserMain(void) {printf("\n user task \n");Lcd_Init();Lcd_Clea…

MySQL主從復制(五):讀寫分離

一主多從架構主要應用場景&#xff1a;讀寫分離。讀寫分離的主要目標是分攤主庫的壓力。 讀寫分離架構 讀寫分離架構一 架構一結構圖&#xff1a; 這種結構模式下&#xff0c;一般會把數據庫的連接信息放在客戶端的連接層&#xff0c;由客戶端主動做負載均衡。也就是說由客戶…

RabbitMQ 消息隊列安裝及入門

市面常見消息隊列中間件對比 技術名稱吞吐量 /IO/并發時效性&#xff08;類似延遲&#xff09;消息到達時間可用性可靠性優勢應用場景activemq萬級高高高簡單易學中小型企業、項目rabbitmq萬級極高&#xff08;微秒&#xff09;高極高生態好&#xff08;基本什么語言都支持&am…

為什么MySQL推薦使用utf8mb4代替utf8?

前言 在MySQL數據庫的世界里&#xff0c;字符集的選擇直接影響著數據的存儲和檢索方式&#xff0c;尤其是對于多語言支持至關重要的應用而言。近年來&#xff0c;utf8mb4字符集逐漸成為MySQL中存儲Unicode字符的標準選擇&#xff0c;逐步取代了傳統的utf8字符集。本文將詳細探…

leetcode124 二叉樹中的最大路徑和-dp

題目 二叉樹中的 路徑 被定義為一條節點序列&#xff0c;序列中每對相鄰節點之間都存在一條邊。同一個節點在一條路徑序列中 至多出現一次 。該路徑 至少包含一個 節點&#xff0c;且不一定經過根節點。 路徑和 是路徑中各節點值的總和。 給你一個二叉樹的根節點 root &…

【Crypto】Rabbit

文章目錄 一、Rabbit解題感悟 一、Rabbit 題目提示很明顯是Rabbit加密&#xff0c;直接解 小小flag&#xff0c;拿下&#xff01; 解題感悟 提示的太明顯了

redis核心面試題二(實戰優化)

文章目錄 10. redis配置mysql實戰優化[重要]11. redis之緩存擊穿、緩存穿透、緩存雪崩12. redis實現分布式session 10. redis配置mysql實戰優化[重要] // 最初實現OverrideTransactionalpublic Product createProduct(Product product) {productRepo.saveAndFlush(product);je…

MQTT 5.0 報文解析 05:DISCONNECT

歡迎閱讀 MQTT 5.0 報文系列 的第五篇文章。在上一篇中&#xff0c;我們已經介紹了 MQTT 5.0 的 PINGREQ 和 PINGRESP 報文。現在&#xff0c;我們將介紹下一個控制報文&#xff1a;DISCONNECT。 在 MQTT 中&#xff0c;客戶端和服務端可以在斷開網絡連接前向對端發送一個 DIS…

手把手教你搭建一個花店小程序商城

如果你是一位花店店主&#xff0c;想要為你的生意搭建一個精美的小程序商城&#xff0c;以下是你將遵循的五個步驟。 步驟1&#xff1a;登錄喬拓云平臺進入后臺 首先&#xff0c;你需要登錄喬拓云平臺的后臺管理頁面。你可以在電腦或移動設備上的瀏覽器中輸入喬拓云的官方網站…

2024.5.26 機器學習周報

目錄 引言 Abstract 文獻閱讀 1、題目 2、引言 3、創新點 4、Motivation 5、naive Lite-HRNet 6、Lite-HRNet 7、實驗 深度學習 解讀SAM(Segment Anything Model) 1、SAM Task 2、SAM Model 2.1、Patch Embedding 2.2、Positiona Embedding 2.3、Transformer …

移動端適配:vw適配方案

vw (Viewport Width) 是一種長度單位&#xff0c;代表視口寬度的百分比。1vw 等于視口寬度的1%。在網頁設計和前端開發中&#xff0c;vw 單位常用于實現響應式設計和屏幕適配&#xff0c;尤其是針對不同尺寸和分辨率的移動設備。 為什么使用vw適配&#xff1f; 響應式: 使用v…