有限状态机应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21
有限状态自动机的应用
• 有限状态自动机在很多不同领域中都是重要的, 包括电子工程、 语言学、计算机科学、哲学、 生物学、数学和逻辑学。有限状态机是在自动 机理论和计算理论中研究的一类自动机。在计 算机科学中,有限状态机被广泛用于建模应用 行为、硬件电路系统设计、软件工程,编译器、 网络协议、和计算与语言的研究。 • 针对许多类型的编程问题,建立有限状态自动 机模型,可以为分析、求解带来很大的帮助。
大作业-文件IO版本
设计思路
1
大作业文件IO版本模块结构图
文件输入 读取请求 事件 控制器 策略算法
改变 时间同步 状态
状态 变化 事件
结果记录
写入文件
模型 内部状态
1/15/2015 2
大作业文件IO版本程序框架
/* 大作业文件IO版本的程序主体结构 */ struct STATE {…} //电梯或银行的运行状态 struct LIST {…} //请求队列链表节点 struct REQ {…} //暂存每次获得的请求事件 int main(){ int timeCount=0; //计时器,每循环一次模拟2ms struct REQ theReq={}; //暂存每次获得的请求事件 struct STATE preST,theST ={}; //保存电梯或银行的运行状态 struct LIST *headp=NULL;//存请求队列链表头指针 File *fpin,*fpout;
15
状态转换图
• 为了描述一个有限状态机的工作状况,可采用状态 转换图。状态转换图是一个有向图,图中的每个节 点表示一种状态,一条边(或弧)表示一个转换关 系。 b • 初始状态通常用 “没有起点的箭头” q1 a a 指向它来表示。 q3 • 终止状态是机器 q0 完成了它的程序之后 q2 b b 的状态,它通常表示 a 为双重圆圈。
1/15/2015 5
大作业文件IO版本函数接口
int endInput(File *fp)//判断文件输入是否结束 int isIdle(struct STATE state) //判断电梯或营业厅当前状态是否空闲 struct REQ get_fileInput(File *fp) //顺序读取文件中的一个请求事件 struct LIST * addServList(struct LIST *hp,struct REQ req, struct STATE state, int mode); //按照策略,将新请求插入请求队列中 struct STATE runService(struct STATE state, struct LIST **hp,int time) /*根据状态、请求和时间条件,运行电梯或营业厅服务。 运行服务后将改变的状态返回。注意当服务完一个请求 1/15/2015 后,删除该节点并修改头指针! */
6
大作业文件IO版本函数接口
struct STATE runService(struct STATE state, struct LIST **hp,int time) /*根据状态、请求和时间条件,运行电梯或营业厅服务。 运行服务后将改变的状态返回。注意当服务完一个请求 后,删除该节点并修改头指针!*/ void set_fileOutput(File *fp,int time,struct STATE state, struct LIST *hp) /*将当前时间、状态和等待队列的情况顺序写入文件*/
1/15/2015 8
输出文件格式定义:电梯
• 电梯运行结果记录文件格式: • 文本文件,每一行表示一个电梯停靠或启动、转向 动作,当前楼层和目标楼层,以及排队的楼层请求。 格式定义如下: T=<当前时间>,State=<电梯状态>,NowF=<电梯当 前楼层>,GoalF=<电梯目标楼层>,StopT=<停靠时 间>, WaitF=<未响应的楼层请求><\n> 例:T=3,State=UP_RUN,NowF=1.0,GoalF=3, StopT=0,WaitF=4U 5D 6T T=3,State=UP,NowF=1.0,GoalF=3,StopT=0, 1/15/2015 WaitF=4U 5T 6U 9D 8D
1/15/2015 10
输入文件格式定义:银行
• 输入用银行请求文件格式: • 文本文件,每一行表示一个时刻发生的客户到达事 件、窗口休息请求或下班指令。格式定义如下: T=<请求发生时间>,Req=<请求><\n> <请求>=C<客户人数> | W<请求休息的窗口号> | Q<下班时间> 例:T=1,Req=C5 T=6,Req=W3 T=200,Req=Q250 时间:按程序运行的系统时钟时间,单位秒.
1/15/2015 3
大作业文件IO版本程序框架
openFile(**fpin,**fpout); //打开输入输出文件 theReq=get_fileInput(fpin); //读取第一个请求 while (!(endInput(fpin)&&isIdle(theST))){ //当文件输入结束,且电梯或营业厅空闲才退出 if (theReq.time==timeCount){ headp=addServList(headp,theReq,theST,1); /*当请求事件发生的时间到,添加请求事件到服 务队列中, 策略参数为1对应先来先服务,2对应顺便 服务*/ theReq=get_fileInput(fpin); //读取文件中的下一个请求事件 }//end if
b
Err
18
q2
b
变换器状态机(1)
• 变换器使用动作基于给定输入和/或状态生成输出。常 分为两种类型:Moore机和Mealy机。 • Moore机-只使用进入动作的FSM,就是说输出只依赖于 状态。Moore 模型的好处是行为的简单性。 • 例:一个电梯门的 Moore FSM。 状态“Opening”中的进入 opening 开门 opened 动作 (E:) 开启电机开门, 在状态“Closing”中的进入 q0 关门 closed closeing 动作以反方向开启电机关门。 状态“Opened”和“Closed” 不进行任何动作。
20
FSM的类型
• 在实践中经常使用混合模型。 • 进一步可区分为确定型(DFA)和非确定型 (NDFA、GNFA)自动机。在确定型自动机 中,每个状态对每个可能输入只有精确的一个 转移。在非确定型自动机中,给定状态对给定 可能输入可以没有或有多于一个转移。 • 这个区分在实践而非理论中更有用,因为存在 算法把任何 NDFA 转换成等价的 DFA,尽管 这种转换一般会增加自动机的复杂性。
16
状态表
• 除了状态转换图以外,还可以使用多种类型的状态转 移表。最常见的表示如下: • 当前状态和条件的组合指示出下一个状态。 • 完整的动作信息可以只使用脚注来增加。 状态转移表 当前状态 → 状态 A 状态 B 状态 C 条件 ↓ … … … 条件 X … … 条件 Y 状态 C … … … 条件 Z
22
例1:串口通信 两台微机通过串口通信, 需在两台机器间建立 好连接后,才可以传递数据,可以使用有限状态自 动机,描述串口通信的状态。
1/15/2015 12
输出文件格式定义:银行
<客户号码>=0001~9999 <各窗口状态>=<W窗口号><空格> <S窗口状态><空格> <C当 前客户号码> <S窗口状态>= S0 表示空闲 S1 表示服务 S2 表示暂停 <等待服务的客户情况>= 策略1:<Q队列长度> ><空格> <F队首客户号码> <空 格> <L队尾客户号码> 策略2:<W窗口号> ><空格> <队列中客户号码> 例:T=3,Event=JH W2 C0009,Now=W1 S1 C0004 W2 S2 C0000 1/15/2015 W3 S0 C0000,Wait=Q19 F0010 L0028
13
用有限状态自动机模型 实现复杂的过程控制策略
14
什么是有限状态自动机?
Finite State Machine,又称有限状态机或简称状态机, 是表示有限个状态以及在这些状态之间的转移和动作 等行为的数学模型。 –状态:存储关于过去的信息,就是说 , 它反映从系 统开始到现在时刻的输入变化。 –转移 : 指示状态变更,并且用必须满足来确使转移 发生的条件来描述它。 –动作 : 是在给定时刻要进行的活动的描述。有多种 类型的动作: 进入动作(Entry action)-在进入状态时进行 退出动作 -在退出状态时进行 输入动作 -依赖于当前状态和输入条件进行 转移动作 -在进行特定转移时进行
9
输出文件格式定义:电梯
• 当前时间:程序开始运行的系统时钟时间,单位秒。 • 电梯状态:UP_RUN表示向上运行、DOWN_RUN 表示向下运行、UP_STOP表示上行停靠、 DOWN_STOP表示下行停靠、IDLE表示空闲。 • 电梯当前楼层:1.0-9.0。停靠时间:记录电梯已经 停靠的时间,单位秒。只有在停靠状态下,该信息 才大于0。 • 未响应的楼层请求:按照电梯控制策略,按响应顺 序将尚未响应的呼叫请求和目标楼层列出来。是由 呼叫方向(U/D/T)和数字(1~9)组成的序列,中 间用一个空格分割。如2U 5D 6T,表示2层上行呼 叫、5层下行呼叫、6层目标停靠。
1/15/2015 4
大作业文件IO版本程序框架
preST=theST; theST=runService(preST,&headp,timeCount); if (theST.state!=preST.state) set_fileOutput(fpout,timeCount,theST, headp); /*当状态变化,将当前时间、状态和等待队列 的情况写入到文件中。 */ timeCount++; }//end while closeFile(fpin,fpout); //关闭输入输出文件 return 0; }//end main
19
变换器状态机(2)
• Mealy机-只使用输入动作的FSM,就是说输出依赖于输 入和状态。 • Mealy FSM 的使用经常导致状态数目的简约。 • 例:电梯门的Mealy FSM • 有两个输入动作:“开启电机 opened 关门如果 command_close 下达” 和“反向开启电机开门如果 q0 command_open 下达”。 closed
1/15/2015 11
输出文件格式定义:银行
• 银行运行结果记录文件格式: • 文本文件,每一行表示一个营业厅窗口的叫号、暂停休息、 准备下班、进入空闲、下班等动作,各窗口状态和正在服 务的客户号码,以及等待服务的客户情况。格式定义如下: T=<当前时间>,Event=<事件描述>,Now=<各窗口状态>, Wait=<等待服务的客户情况><\n> <事件描述>=JH<空格><W窗口号><空格><C客户号码> ZT><空格><W窗口号><空格><R休息时长> KX><空格><W窗口号> ZB><空格><下班时间> XB
ቤተ መጻሕፍቲ ባይዱ
1/15/2015 7
输入文件格式定义:电梯
• 输入用电梯请求文件格式: • 文本文件,每一行表示一个时刻发生的电梯请求。 格式定义如下: T=<请求发生时间>,CallF=<楼层请求><\n> 例:T=1,CallF=4U T=2,CallF=4U 5T 请求发生时间:按程序运行的系统时钟时间,单 位秒. 楼层请求:由呼叫方向(U/D/T)和数字(1~9)组 成,同时有多个请求时用空格分割。如2U 5D 6T,表示2层上行呼叫、5层下行呼叫、6层目标 停靠。
17
接受器状态机
• FSM有两个不同的类别:接受器/识别器和变换器。 • 接受器产生一个二元输出,说要么“是”要么“否”来 回答输入是否被机器接受。 • 在所有输入都被处理了的时候, 如果当前状态是接受状态,输入被接受; b 否则被拒绝。 q1 • 作为规则,输入是符号 a a (字符);动作不使用。 q3 q0