c++ - 生命模拟的有效方法

标签 c++ performance artificial-life

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

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

我的第一个问题是关于协会的。 SO 推荐什么作为处理此类事情的有效方法?我在想一个多 map ,相对容易设置的关键是它想要的东西(食物、吃饭、休息等等),而另一位(抱歉,我的想法已经失效)是它与那个需求相关联的东西。

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

现在,我意识到这比看起来要复杂得多,我准备敲定它。问题是,多重映射是否适合(可能)呈指数增长的关联列表?如果不是,那会是什么?

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

无论如何,欢迎任何评论。

最佳答案

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

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

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

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

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

关于c++ - 生命模拟的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/345930/

相关文章:

c++ - c++中swap是如何实现的

C++ 对象指针

c++ - 从成员构造函数调用虚函数

c++ - main() 方法中包含的类

java - 初始化 Spring 应用程序时如何确定哪个方法花费了这么长时间

performance - 高流量网站

SQL Server 删除性能

javascript - 如何防止javascript堆栈溢出?

artificial-intelligence - 软件程序智能化的标准

python - 蚁群模拟——优化路径