成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

有限狀態(tài)機(jī)學(xué)習(xí)

bbbbbb / 3549人閱讀

摘要:狀態(tài)機(jī)有三個(gè)特征狀態(tài)總數(shù)是有限的。由于有限狀態(tài)機(jī)的這些特征,我們可以把狀態(tài)轉(zhuǎn)移的過(guò)程做成類似這樣的狀態(tài)轉(zhuǎn)移表。

有限狀態(tài)機(jī)是什么

有限狀態(tài)機(jī)(英語(yǔ):finite-state machine,縮寫(xiě):FSM)又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)(State)以及在這些狀態(tài)之間的轉(zhuǎn)移(Transition)和動(dòng)作(Action)等行為的數(shù)學(xué)模型。

狀態(tài)機(jī)有三個(gè)特征:

狀態(tài)(State)總數(shù)是有限的。

在任一時(shí)刻,只處于一種狀態(tài)。

在某種條件(Event)下,會(huì)從某種狀態(tài)轉(zhuǎn)移(Transition)到另一種狀態(tài),同時(shí)執(zhí)行某個(gè)動(dòng)作(Action)。

從有限狀態(tài)機(jī)的定義和特征我們可以看到它的幾個(gè)重要概念:

狀態(tài)(State):包括初始狀態(tài)和事件觸發(fā)后的狀態(tài),同時(shí)必須要有一個(gè)最終狀態(tài)。

事件(Event):觸發(fā)狀態(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài)。

轉(zhuǎn)移(Transition):狀態(tài)切換路徑,包含Event(觸發(fā)該轉(zhuǎn)移的事件),Source(源狀態(tài)),Target(目的狀態(tài))。

動(dòng)作(Action):表示在進(jìn)行狀態(tài)轉(zhuǎn)移后要執(zhí)行的具體行為。

由于有限狀態(tài)機(jī)的這些特征,我們可以把狀態(tài)轉(zhuǎn)移的過(guò)程做成類似這樣的狀態(tài)轉(zhuǎn)移表。

條件當(dāng)前狀態(tài) 狀態(tài)A 狀態(tài)B 狀態(tài)C 狀態(tài)D
條件X 狀態(tài)B 狀態(tài)C 狀態(tài)D ...
條件Y 狀態(tài)C 狀態(tài)D ... ...
條件Z ... 狀態(tài)A 狀態(tài)A 狀態(tài)A

可以歸納為一個(gè)公式。
Old State + Event = New State

把上面的狀態(tài)轉(zhuǎn)移表用公式表達(dá)就是
狀態(tài)A + 條件X = 狀態(tài)B
狀態(tài)A + 條件Y = 狀態(tài)C
...

有限狀態(tài)機(jī)例子

我們小時(shí)候都應(yīng)該玩過(guò)貪吃蛇這個(gè)游戲,游戲規(guī)則不必再說(shuō),我們看看使用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)這個(gè)游戲。

狀態(tài)轉(zhuǎn)移表:

條件當(dāng)前狀態(tài) GAME_OVER UP DOWN LEFT RIGHT
EAT ... UP DOWN LEFT RIGHT
HIT ... GAME_OVER GAME_OVER GAME_OVER GAME_OVER
TURN_UP UP ... ... UP UP
TURN_DOWN DOWN ... ... DOWN DOWN
TURN_LEFT LEFT LEFT LEFT ... ...
TURN_RIGHT RIGHT RIGHT RIGHT ... ...

EAT:吃掉食物
HIT:撞墻或自己
TURN_UP:向上轉(zhuǎn)向事件
...
GAME_OVER: 為了簡(jiǎn)便一點(diǎn),我們讓它既是開(kāi)始又是結(jié)束的狀態(tài),當(dāng)按下上下左右任一鍵時(shí)開(kāi)始游戲。
UP: 向上前進(jìn)狀態(tài),此時(shí)可以吃掉食物,也可以撞到墻或自己,同時(shí)可以向左向右轉(zhuǎn)向,但按下向上或向下是不會(huì)觸發(fā)任何動(dòng)作。
...

當(dāng)我們把狀態(tài)轉(zhuǎn)移表定義好之后就會(huì)發(fā)現(xiàn)這個(gè)游戲剩下的部分非常好寫(xiě),而且邏輯非常清楚,這就是有限狀態(tài)機(jī)的好處。

有限狀態(tài)機(jī)在編程中有哪些應(yīng)用

詞法分析

正則表達(dá)式

網(wǎng)絡(luò)協(xié)議

游戲設(shè)計(jì)

自動(dòng)電話客服

...

我們用有限狀態(tài)機(jī)做什么

筆者目前所在的部門(mén)是正在使用OpenStack做電子網(wǎng)絡(luò)靶場(chǎng)的一個(gè)項(xiàng)目,必然少不了對(duì)虛擬機(jī)各項(xiàng)指標(biāo)的采集,因此對(duì)采集進(jìn)行監(jiān)控也是必要的措施,以便在采集故障之后及時(shí)預(yù)警。

整個(gè)監(jiān)控流程是由客戶端(Java微服務(wù))往Kafka中發(fā)一條采集配置,采集端(Python)收到這條配置后進(jìn)行解析配置,然后進(jìn)行指標(biāo)采集,同時(shí)往Kafka回傳一些運(yùn)行信息,當(dāng)想要停止采集時(shí)需要客戶端再次下發(fā)一條關(guān)閉配置,采集端進(jìn)行執(zhí)行并回傳至Kafka關(guān)閉信息。

看似這個(gè)過(guò)程十分簡(jiǎn)單,像把大象裝進(jìn)冰箱一樣簡(jiǎn)單。

打開(kāi)冰箱門(mén)。

把大象塞進(jìn)行。

關(guān)上冰箱門(mén)。

使用有限狀態(tài)機(jī)來(lái)做其中的狀態(tài)轉(zhuǎn)移時(shí)真的就像是把大象塞進(jìn)冰箱一樣簡(jiǎn)單(其中使用restful接口接收客戶端的開(kāi)始關(guān)閉配置,監(jiān)聽(tīng)kafka指定topic來(lái)處理采集端消息)。

定義狀態(tài)轉(zhuǎn)移表
條件當(dāng)前狀態(tài) Idle processing wait_close exception timeout closed
start_conf
error_conf closed
pro_start processing
heartbeat processing processing
error_runtime exception
stop_conf wait_close wait_close wait_close
pro_stop closed closed closed
msg_timeout timeout timeout timeout timeout
fix closed

事件

start_conf:客戶端(Java微服務(wù))采集配置

error_conf:采集端(Python)配置解析錯(cuò)誤

pro_start:采集端(Python)開(kāi)始采集

heartbeat:采集端(Python)正在采集

error_runtime :采集端(Python)采集過(guò)程中出錯(cuò)

stop_conf:客戶端(Java微服務(wù))關(guān)閉配置

pro_stop: 采集端(Python)退出采集

msg_timeout:采集端(Python)消息超時(shí)

fix: 監(jiān)控端 手動(dòng)確認(rèn)任務(wù)已經(jīng)人為修復(fù)

狀態(tài)

Idle:收到采集配置后有限狀態(tài)機(jī)的默認(rèn)狀態(tài)

processing:正在采集

wait_close :收到關(guān)閉配置后等待關(guān)閉

exception:采集異常

timeout:超時(shí)

closed:采集關(guān)閉

使用狀態(tài)機(jī)進(jìn)行編碼

筆者這里使用的庫(kù)是squirrel-foundation,支持多實(shí)例狀態(tài)機(jī)并且和spring進(jìn)行整合也比較簡(jiǎn)單。

總結(jié)

有限狀態(tài)機(jī)能使我們從復(fù)雜的狀態(tài)轉(zhuǎn)移判斷中脫離出來(lái),專心業(yè)務(wù)邏輯,并且避免狀態(tài)轉(zhuǎn)移過(guò)程的判斷錯(cuò)誤,是一種很強(qiáng)大的模型。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41050.html

相關(guān)文章

  • 有限狀態(tài)機(jī)學(xué)習(xí)

    摘要:狀態(tài)機(jī)有三個(gè)特征狀態(tài)總數(shù)是有限的。由于有限狀態(tài)機(jī)的這些特征,我們可以把狀態(tài)轉(zhuǎn)移的過(guò)程做成類似這樣的狀態(tài)轉(zhuǎn)移表。 有限狀態(tài)機(jī)是什么 有限狀態(tài)機(jī)(英語(yǔ):finite-state machine,縮寫(xiě):FSM)又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)(State)以及在這些狀態(tài)之間的轉(zhuǎn)移(Transition)和動(dòng)作(Action)等行為的數(shù)學(xué)模型。 狀態(tài)機(jī)有三個(gè)特征: 狀態(tài)(St...

    xiao7cn 評(píng)論0 收藏0
  • 狀態(tài)決定視圖——基于狀態(tài)的前端開(kāi)發(fā)思考

    摘要:前端與狀態(tài)現(xiàn)在的前端開(kāi)發(fā)中,對(duì)于狀態(tài)的管理是重中之重。有限狀態(tài)機(jī)那么如何更好的管理前端軟件的復(fù)雜度的狀態(tài)機(jī)思想給出了自己的答案。有限狀態(tài)機(jī)并不是一個(gè)復(fù)雜的概念簡(jiǎn)單說(shuō),它有三個(gè)特征狀態(tài)總數(shù)是有限的。 前提 在現(xiàn)在的前端社區(qū),關(guān)于MVVM、Model driven view 之類的概念,已經(jīng)算是非常普及了。React/Vue 這類框架可以算是代表。而自己雖然有 React/Vue 的使用經(jīng)...

    miya 評(píng)論0 收藏0
  • 前端設(shè)計(jì)模式用起來(lái)(1)狀態(tài)模式

    摘要:有限狀態(tài)機(jī)可以歸納出四個(gè)要素現(xiàn)態(tài)即當(dāng)前的狀態(tài)。但狀態(tài)模式還有一點(diǎn)需要注意到,當(dāng)采用子類繼承實(shí)現(xiàn)多種具體狀態(tài)的時(shí)候,注意控制狀態(tài)的數(shù)量,以免出現(xiàn)子類數(shù)量膨脹的現(xiàn)象在使用或等更完整面向?qū)ο笳Z(yǔ)言時(shí)。 業(yè)務(wù)代碼開(kāi)發(fā)久了,偶爾看看設(shè)計(jì)模式,總會(huì)讓自己有一種清新脫俗的感覺(jué)。總想把這種感覺(jué)記下來(lái),但一想到要先起個(gè)恰如其分的標(biāo)題和開(kāi)頭,就讓我有一種百爪撓心的糾結(jié),所以遲遲沒(méi)有開(kāi)始。今天起更新我學(xué)習(xí)設(shè)計(jì)...

    Salamander 評(píng)論0 收藏0
  • “數(shù)學(xué)之美”系列十:有限狀態(tài)機(jī)和地址識(shí)別

    地址的識(shí)別和分析是本地搜索必不可少的技術(shù),盡管有許多識(shí)別和分析地址的方法,最有效的是有限狀態(tài)機(jī)。一個(gè)有限狀態(tài)機(jī)是一個(gè)特殊的有向圖(參見(jiàn)有關(guān)圖論的系列),它包括一些狀態(tài)(節(jié)點(diǎn))和連接這些狀態(tài)的有向弧。下圖是一個(gè)識(shí)別中國(guó)地址的有限狀態(tài)機(jī)的簡(jiǎn)單的例子。每一個(gè)有限狀態(tài)機(jī)都有一個(gè)啟始狀態(tài)和一個(gè)終止?fàn)顟B(tài)和若干中間狀態(tài)。每一條弧上帶有從一個(gè)狀態(tài)進(jìn)入下一個(gè)狀態(tài)的條件。比如,在上圖中,當(dāng)前的狀態(tài)是省,如果遇到一個(gè)詞...

    libxd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<