Repast Statecharts
文章目录
1. Getting Started
-
功能:可视化的展示个体的状态和转移。
-
添加Satechart
右键Agent类,新建statechart
代码解析
// 实例化一个agent statechart对象,并在delaytime时间后开始 Statechart statechart = Statechart.createStateChart(agent,delaytime); // 实例化agent statechart对象 Statechart statechart = Statechart.createStateChart(agent); // 使statechart对象开始 StateChartScheduler.beginNow(statechart); StateChartScheduler.beginLater(later, statechart); // 停止statechart对象 statechart.stop();
状态图调度方式:定时激活(activate)、触发器(statechart trigger)
- 状态图编辑器
2. States
2.1 Entry State Marker
每个statechart必须有一个入口状态标记,该标记定义了当一个状态图被激活时的入口。
2.2 Simple State
在激活的状态图中任一个时间点,有且只有一个简单状态时活跃的。
-
ID: ID名
-
actions
-
On Enter: 进入该状态时触发
-
On Exit: 退出该状态时触发
On Enter/On Exit可用
- 关键字:agent、state、params
- 包:
- repast.simphony.essentials.RepastEssentials
- repast.simphony.random.RandomHelper
-
2.3 Composite State
组合状态用于在状态图中嵌套元素。
属性
- 同Simple State(ID、On Enter、On Exit)
- 可以包含子元素(Simple State、Composite State、Initial state marker、History state、Final state、Branching state)
状态
- 当复合状态中一个子元素被激活时,该组合状态也会被激活
- 当复合状态外部到其子元素的状态转移发生时,该组合状态会先于其子元素被进入
- 当复合状态中一个子元素到复合状态外部的状态转移发生时,该组合状态会晚于子元素被退出
2.4 Initial State Marker
任何包含迁移结束或含有历史状态的复合状态必须有初始状态标记。
初始状态标记指向在进入复合状态时的开始元素。
2.5 History State
- shallow:当进入浅历史状态时,与历史状态相同层次的封闭复合状态中的最后一个被激活的元素(初始状态)将被重新进入。
- deep:当进入深历史状态时,封闭复合状态内最后一个被激活的简单状态(初始状态)将被重新进入。
2.6 Final State
最终状态时状态图所有活动的结束标记,只有On Enter动作。
进入最终状态后,没有新的状态会被进入或者状态转移被触发。
2.7 Branching State
每个分支状态必须定义一个默认转移,其他的为条件转移
3. Transitions
普通转移/自我转移
- 可以定义 On Transition动作
- 可用关键字:agent、transition、params
- 可以定义守护条件(Guard condition),必须满足守护条件转移才会被触发
- 当有一个以上的有效转换时,使用转换的优先级断开连接。如果转换有相同的优先级,那么其中一个转移将以均匀随机概率被选择。
- 零时间转移:当一个新的状态进入时,如果有一个有效的零时间转换离开它,该转换立即被跟随。
- 轮询时间:对转换进行有效性轮询的频率。
3.1 Always Trigger
总是触发总是是有效的,可以设置守护条件为假来阻止触发。
3.2 Timed Trigger
定时触发在一定时间后有效。
3.3 Probability Trigger
概率触发根据给定大概率来判断是否有效。
3.4 Condition Trigger
条件触发根据特定的条件来判断是否有效。
3.5 Exponential Decay Rate Trigger
指数衰减率分布在一个服从指数分布的随机时间后有效。
3.6 Message Trigger
当状态图接收到满足特定条件的消息时,消息触发器会生效。
-
当消息满足条件时(When Message Meets Condition):
-
当消息相等时(When Message Equals):
-
当消息时某个类型时(When Message is of Class):
-
总是(Always):