最近在构思一个模拟动物的简单程序.比如摸下它有反应,平常它可以按照一些随即的规律做一些动作(比如爬树,奔跑,睡觉)
开始以为可以很简单的用程序写出,但当真正动手确发现有些刺手.
按照我的构想, 动物一天的行为之间是一种状态转换,比如饿了的状态到吃东西的状态再到玩耍的状态. 然后表现具体的动作是否又是另外一个状态机,比如走路(左脚,右脚,左脚...)
越想越模糊. 这样一来状态机套状态机,不知道该怎么做, 有朋友考虑过类似问题么?
希望能听听你的高见.
您的位置: 站长主页 -> 繁星客栈 -> 图灵塔 -> 关于状态机. | November 22, 2024 |
关于状态机.
fineall 发表文章数: 36
|
关于状态机. [文章类型: 原创]
最近在构思一个模拟动物的简单程序.比如摸下它有反应,平常它可以按照一些随即的规律做一些动作(比如爬树,奔跑,睡觉)
开始以为可以很简单的用程序写出,但当真正动手确发现有些刺手. 按照我的构想, 动物一天的行为之间是一种状态转换,比如饿了的状态到吃东西的状态再到玩耍的状态. 然后表现具体的动作是否又是另外一个状态机,比如走路(左脚,右脚,左脚...) 越想越模糊. 这样一来状态机套状态机,不知道该怎么做, 有朋友考虑过类似问题么? 希望能听听你的高见.
|
||
Fantadox 发表文章数: 30
|
Re: 关于状态机. [文章类型: 原创]
物理的实体通常同时有大量独立的状态。可以看做一大堆状态机。
如果状态机的数量是有限的,状态也是有限的,原则上可以用一个大的有限状态机模拟这一大堆小状态机,但是这样的话就需要将各个状态机的状态和迁移集合做笛卡尔积,导致状态和迁移的数量指数爆炸。所以明智的做法是使用并发状态机。 编程序简单地模拟一个小动物的行为,可以考虑它身上有多个并发的简单状态机,它的行为同时受控于所有的状态机(例如负责饥和饱程度的,睡和醒程度的,苦和乐程度的……)。你需要一个仲裁机制,根据多个并发状态机的状态(例如饿的程度,快乐的程度之类的状态信息)和当前所发生的事件综合决定当前的行为。而当前的行为会带来一些新的刺激,这些刺激作为每一个状态机的输入事件,可以触发这些状态机分别进行迁移。此时各个状态机的状态就发生了变化,于是在新的事件发生的时候就需要重新仲裁。 科学==追寻一致性
|
||
Fantadox 发表文章数: 30
|
Re: 关于状态机. [文章类型: 原创]
模拟活的东西,不要忘了加入定时事件的处理。否则你的程序不会主动做任何事情。例如你可以每当它吃饱,就重置饥饿定时器,在饥饿定时器超时的时候,就会向相关状态机发送一个饥饿事件。然后由相应的状态机决定如何迁移状态。
这是我多年前编写大话务量呼叫测试工具的时候,模拟大量电话用户发起呼叫的时候所使用的一种思路。 不过不要迷信这个方法的威力,模拟复杂行为如果只使用这么单纯的方法,即便原则上可行,工作量也可能大得惊人。 科学==追寻一致性
|
||
littlebird 发表文章数: 863
|
Re: 关于状态机. [文章类型: 原创]
很有意思的想法,是不是类似细胞自动机?
松下问童子,言师采药去.
|
||
kanex 发表文章数: 447
|
Re: 关于状态机. [文章类型: 原创]
你可以试试这些方法:
1) 状态机 2) hidden markov model 3) bayes network 4) nn, ga, sa, ant colony, etc. Récoltes et semailles
|
||
Deeperblue 发表文章数: 10
|
Re: 关于状态机. [文章类型: 原创]
很有意思的想法,是不是类似细胞自动机?
========== 我觉得大概要比细胞自动机的规则要复杂多了吧。
|
||
fineall 发表文章数: 36
|
Re: 关于状态机. [文章类型: 原创]
楼上朋友们的讨论都很好。
我想在不断的实际中,可以不断修改。 目前我先实现一些基本的动作的状态机。比如跑,行走。目前用抽象的类来实现一个公共类,用文件脚本来描述具体行为图片之间的位移。 然后再在行为状态的基础上考虑复杂的情感状态。
|
您尚未登陆 | 用户登陆 |