gpt4 book ai didi

multithreading - 如何设计真实世界的模拟?

转载 作者:行者123 更新时间:2023-12-04 00:59:40 25 4
gpt4 key购买 nike

我对“过山车大亨”和“模拟人生”以及 FPS 游戏等应用程序的性能着迷。我想了解更多有关基本应用程序架构的信息。 (不太关心 UI - 我假设 MVC/MVP 原则在这里适用。此时我也不关心数学和物理。)

我的主要问题涉及模拟中的数十或数百个单独的物体(人、车辆、物品等),它们都在移动、做出决定、引发和响应事件——看起来都在同一时间,以及它们如何专为如此出色的性能而设计。

问:首先,这些对象是在一个巨大的循环中处理,一次一个 - 还是每个对象都在它自己的线程中处理 ?在这样的模拟中,有多少线程是实用的? (当然是棒球场数字,10、100、1000)

我不打算写游戏,我只想要设计理论,因为我想知道这样的设计是否可以应用于似乎同时做出多个决定的其他应用程序。

最佳答案

进行这种模拟有两种基本方法Agent BasedSystem Dynamics .在基于代理的模拟中,游戏中的每个实体都将由一个具有属性和行为的类的实例表示,实体之间的所有交互都必须明确定义,并且当您希望这些实体交互时,函数被称为属性交互实体的数量发生了变化。

System Dynamics 则完全不同,它只处理总和和总计,在系统中没有表示单个实体。最简单的例子是捕食者和猎物模型。

这两者都有优点和缺点,系统动力学方法可以更好地扩展到大量实体,同时保持较短的运行时间。虽然您必须计算多个公式,但计算时间与公式中的值无关。但是在这种方法中无法查看单个实体。基于代理的方法让您可以将实体放置在特定位置,并让您与模拟中的特定实体进行交互。

FSM 和 Celular automata是如何在游戏中模拟系统的其他方法。例如在基于代理的方法中,您可以使用 FSM 对一个代理的行为进行建模。 Simcity使用细胞自动机来做一些模拟工作。

一般而言,您可能不会拥有一个大型模型来完成所有任务,而是拥有多个执行特定任务的系统,其中一些不需要经常更新,例如决定天气的东西,其他人可能需要不断更新。即使您将它们放在单独的线程中,您也会希望在需要时暂停或启动它们。您可能希望在多个框架上拆分工作,例如仅计算特定数量的代理的更新。

关于multithreading - 如何设计真实世界的模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com