关于状态机.

新用户注册 | 用户登陆 | 刷新

fineall


发表文章数: 36
内力值: 108/108
贡献度: 134
人气: 60

关于状态机. [文章类型: 原创]

最近在构思一个模拟动物的简单程序.比如摸下它有反应,平常它可以按照一些随即的规律做一些动作(比如爬树,奔跑,睡觉)
开始以为可以很简单的用程序写出,但当真正动手确发现有些刺手.
按照我的构想, 动物一天的行为之间是一种状态转换,比如饿了的状态到吃东西的状态再到玩耍的状态. 然后表现具体的动作是否又是另外一个状态机,比如走路(左脚,右脚,左脚...)
越想越模糊. 这样一来状态机套状态机,不知道该怎么做, 有朋友考虑过类似问题么?
希望能听听你的高见.

发表时间: 2006-09-18, 07:44:28 个人资料

Fantadox


发表文章数: 30
内力值: 103/103
贡献度: 421
人气: 32

Re: 关于状态机. [文章类型: 原创]

物理的实体通常同时有大量独立的状态。可以看做一大堆状态机。

如果状态机的数量是有限的,状态也是有限的,原则上可以用一个大的有限状态机模拟这一大堆小状态机,但是这样的话就需要将各个状态机的状态和迁移集合做笛卡尔积,导致状态和迁移的数量指数爆炸。所以明智的做法是使用并发状态机。

编程序简单地模拟一个小动物的行为,可以考虑它身上有多个并发的简单状态机,它的行为同时受控于所有的状态机(例如负责饥和饱程度的,睡和醒程度的,苦和乐程度的……)。你需要一个仲裁机制,根据多个并发状态机的状态(例如饿的程度,快乐的程度之类的状态信息)和当前所发生的事件综合决定当前的行为。而当前的行为会带来一些新的刺激,这些刺激作为每一个状态机的输入事件,可以触发这些状态机分别进行迁移。此时各个状态机的状态就发生了变化,于是在新的事件发生的时候就需要重新仲裁。

科学==追寻一致性
一致性==内部一致性+外部一致性
内部一致性:逻辑自洽
外部一致性:符合事实

发表时间: 2006-09-18, 08:22:19 个人资料

Fantadox


发表文章数: 30
内力值: 103/103
贡献度: 421
人气: 32

Re: 关于状态机. [文章类型: 原创]

模拟活的东西,不要忘了加入定时事件的处理。否则你的程序不会主动做任何事情。例如你可以每当它吃饱,就重置饥饿定时器,在饥饿定时器超时的时候,就会向相关状态机发送一个饥饿事件。然后由相应的状态机决定如何迁移状态。

这是我多年前编写大话务量呼叫测试工具的时候,模拟大量电话用户发起呼叫的时候所使用的一种思路。

不过不要迷信这个方法的威力,模拟复杂行为如果只使用这么单纯的方法,即便原则上可行,工作量也可能大得惊人。

科学==追寻一致性
一致性==内部一致性+外部一致性
内部一致性:逻辑自洽
外部一致性:符合事实

发表时间: 2006-09-18, 08:23:36 个人资料

littlebird


发表文章数: 863
内力值: 310/310
贡献度: 3683
人气: 420

Re: 关于状态机. [文章类型: 原创]

很有意思的想法,是不是类似细胞自动机?

松下问童子,言师采药去.
只在此山中,云深不知处.

真是很惭愧,偶就是那位问路人

发表时间: 2006-09-19, 07:49:43 个人资料

kanex


发表文章数: 447
内力值: 254/254
贡献度: 2295
人气: 516

学术成员

Re: 关于状态机. [文章类型: 原创]

你可以试试这些方法:
1) 状态机
2) hidden markov model
3) bayes network
4) nn, ga, sa, ant colony, etc.

Récoltes et semailles

发表时间: 2006-09-22, 01:36:11 个人资料

Deeperblue


发表文章数: 10
内力值: 80/80
贡献度: 32
人气: 0

Re: 关于状态机. [文章类型: 原创]

很有意思的想法,是不是类似细胞自动机?
==========
我觉得大概要比细胞自动机的规则要复杂多了吧。

发表时间: 2006-09-29, 16:54:18 个人资料

fineall


发表文章数: 36
内力值: 108/108
贡献度: 134
人气: 60

Re: 关于状态机. [文章类型: 原创]

楼上朋友们的讨论都很好。
我想在不断的实际中,可以不断修改。
目前我先实现一些基本的动作的状态机。比如跑,行走。目前用抽象的类来实现一个公共类,用文件脚本来描述具体行为图片之间的位移。
然后再在行为状态的基础上考虑复杂的情感状态。

发表时间: 2006-10-02, 02:41:25 个人资料
您尚未登陆 | 用户登陆