生命模拟的有效方法

时间:2008-12-06 04:44:56

标签: c++ performance artificial-life

阅读了很多关于人工生命的文章(我觉得非常有趣的一个主题)以及几个关于SO的问题,我开始尝试设计一个(非常非常非常)简单的模拟器。甚至不需要图形。如果我忽略了一个问题,请随时向我指出。

就像我说的,这几乎不是模拟人生的模拟。我相信它几乎不会达到“可接受的免费软件”水平,它只是一个学习练习,可以在休息时保持我的技能。基本前提是创建一个普通人。没有名字,身高或类似的东西(就像我说的那样简单),它唯一真实的东西就是“关联”列表和通用的“使用”,“拾取”和“外观”能力。

我的第一个问题是关于协会的。 SO推荐什么作为处理此类事情的有效方法?我正在考虑一个多图,相对容易设置的关键是它想要的东西(食物,吃饭,休息等等)和另一点(对不起,我的思绪已经失效)是它与这种需求联系起来的。 / p>

例如,假设我们有冰箱。冰箱里有食物(只是一个通用的基础物体)。最初,这个人不会将冰箱与食物联系在一起,但它确实将食物与饥饿联系起来。因此,当它的饥饿增长时,它开始任意寻找食物。如果没有食物可以到达,它“使用”物体来寻找食物。由于它与食物没有已知的联系,所以它会毫不客气地使用东西(可能是寻找最近的物体并向外扩展)。一旦它使用/打开冰箱,它就会看到食物,并将冰箱中的食物连接起来(阅读:插入“食物,冰箱”对)。

现在,我意识到这将比它看起来复杂得多,而且我已经准备好了。问题是,多图是否适合(可能)指数扩展的关联列表?如果没有,会是什么?

我的第二个问题可能要容易得多。简单地说,通用对象/项目界面是否适合大多数项目?换句话说,通用的“使用”界面是否适用于我的意图?我认为我没有很好地解释这一点。

无论如何,任何意见都表示赞赏。

4 个答案:

答案 0 :(得分:2)

如果您将此作为一个核心开发项目,我建议使用相当于Java反射(替换您选择的语言)。如果你想做一个玩具项目作为入门努力,我建议至少按照以下理由滚动你自己的简单版本的反射。

环境中的每个工件都提供某些功能。这个事实的简单模型是询问什么“动词”适用于您的虚拟角色遇到的每个对象(包括可能依赖于该对象的当前状态)。例如,你的角色可以“打开”一个冰箱,一盒麦片或一本书,前提是他们每个人都处于“关闭”状态。打开一本书后,您的角色可以阅读或关闭它。打开冰箱后,您的角色可以“查看”它以获取可见内容列表,可以从中移除对象,将对象放入其中等等。

关键是典型情况可能涉及到你的角色环顾四周以查看可见内容,查询对象以确定其当前状态或可以用它做什么(即“什么状态”和“什么可以 - ” i-do“是适用于所有对象的一般动词”,然后使用有关其当前状态,对象状态和该对象的动词列表的知识来尝试做各种事情。

通过实施一系列积极和消极的反馈,随着时间的推移,你的角色可以“学习”在什么情况下它应该或不应该参与不同的行为。 (显然,您可以通过让用户参与提供反馈来使此模拟具有交互性。)

上面只是一个草图,但也许它可以给你一些有趣的想法。玩得开心! ; - )

答案 1 :(得分:1)

对第一个问题:

我的理解是你有一对一可能的关系。所以是的,多图似乎对我来说很合适。

第二个问题:

是的,我相信对象的通用接口是合适的。也许使用与REST类似的东西来操纵对象状态。

答案 2 :(得分:1)

我曾与The Noble Ape Simulation的开发人员一起播放过一段播客,这可能对您有意义 - 概念性的,可能是代码式的,您可以access the source code以及download binaries

该播客与Randal Schwartz和Leo Laporte一起FLOSS Weekly 31

答案 3 :(得分:-1)

Life与lisp(sbcl):)