3

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

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

我的第一个问题是关于协会的。SO推荐什么作为处理此类事情的有效方法?我在考虑一个多图,相对容易地设置键是它想要的(食物、饮食、休息等),而另一位(对不起,我的想法已经失效)是它与该需求相关联的。

例如,假设我们有一台冰箱。冰箱里有食物(只是一个通用的基础对象)。最初,这个人并没有将冰箱与食物联系起来,但它确实将食物与饥饿联系起来。因此,当它的饥饿感增加时,它开始任意寻找食物。如果没有食物触手可及,它会“使用”物体来寻找食物。由于它与食物没有已知的关联,它会随意使用事物(可能是寻找最近的物体并向外扩展)。一旦它使用/打开冰箱,它就会看到食物,建立冰箱包含食物的连接(阅读:插入“食物,冰箱”对)。

现在,我意识到这将比看起来要复杂得多,我准备把它敲出来。问题是,多图是否适合(可能)呈指数级扩展的关联列表?如果不是,那会是什么?

我的第二个问题可能要容易得多。简而言之,通用对象/项目接口是否适用于大多数项目?换句话说,一个通用的“使用”接口是否适用于我的意图?我不认为我解释得很好。

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

4

4 回答 4

2

如果您将其作为核心开发项目进行,我建议您使用等效的 Java 反射(在此处替换您选择的语言)。如果您想做一个玩具项目作为入门工作,我建议您至少根据以下基本原理推出您自己的简单反射版本。

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

The point is that a typical situation might involve your character looking around to see what is visible, querying an object to determine its current state or what can be done with it (i.e. "what-state" and "what-can-i-do" are general verbs applicable to all objects), and then use knowledge about its current state, the state of the object, and the verb list for that object to try doing various things.

By implementing a set of positive and negative feedback, over time your character can "learn" under what circumstances it should or should not engage in different behaviors. (You could obviously make this simulation interactive by having it ask the user to participate in providing feedback.)

The above is just a sketch, but perhaps it can give you some interesting ideas to play with. Have fun! ;-)

于 2008-12-06T19:49:04.923 回答
1

对于第一个问题:

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

对于第二个问题:

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

于 2008-12-06T07:12:47.257 回答
1

不久前,我与The Noble Ape Simulation的开发人员一起听过一个播客,您可能会很感兴趣 - 概念方面的,也可能是代码方面的,因为您可以访问源代码以及下载二进制文件

播客是由 Randal Schwartz 和 Leo Laporte 主持的FLOSS Weekly 31 。

于 2008-12-06T22:14:32.897 回答
-1

生活与 lisp(sbcl) :)

于 2008-12-06T07:22:40.780 回答