当前位置: 首页 > 知识库问答 >
问题:

基于代理的模拟:为什么Netlogo的运行速度比基于Java的Repast快得多

轩辕炎彬
2023-03-14

每个人都说Jave是一种用于大型系统和工程项目的语言,它的运行速度比大多数其他语言快得多。我只是将它与另一个基于代理的建模lanugage(Netlogo)进行了比较,发现Netlog的运行速度是经典狼羊模拟模型中基于Jave的Repast的四倍。两个模型使用相同的参数进行模拟,并实时运行5秒。Netlogo可以模拟8000多个时间步,而Jave Repast只能执行大约2600个时间步。为什么?

共有1个答案

广楚
2023-03-14

如果您将Netlogo与Repast Simphony狼羊捕食演示与默认设置进行比较,这不是一个公平的比较,因为Repast模型做得更多。Repast模型正在执行基于文件的数据记录、图表渲染、2D显示渲染和3D显示渲染。Repast和Netlogo显示器都有更新设置,这些设置决定了它们相对于滴答数的渲染速度,并且显示渲染速度高度依赖于GPU。

为了更好地比较性能,我们需要创建一个更准确的测试环境。我使用默认参数运行Netlogo演示,未选中“查看更新”,因此显示不会更新,但图表仍会更新。运行该模型大约需要14秒。我修改了Repast演示,删除了文件日志,关闭了2D和3D显示,只留下图表显示,并运行了20000个刻度,这也需要大约14秒。因此,在本演示中,Repast和Netlogo的性能完全相同。

我们还应该考虑Repast和Netlogo中带有默认参数的演示模型都是复杂性有限的TOY模型。通常在科学研究中使用的更复杂的模型中,代理行为非常复杂,以至于单个行为计算时间比工具包框架代码时间大一个数量级,使得这些类型的比较对工具包能力的信息较少。

 类似资料:
  • 问题内容: 我发现这一点的同时解决问题205的项目欧拉。问题如下: 彼得有九个四面(金字塔形)骰子,每个骰子的编号分别为1、2、3、4。科林有六个六边形(立方)骰子,每个骰子的编号为1、2、3、4、5、6。 彼得和科林掷骰子并比较总数:最高的总胜利数。如果总数相等,则结果为平局。 金字塔形皮特击败立方柯林的概率是多少?以0.abcdefg的形式将答案四舍五入到小数点后七个位 我用番石榴写了一个幼稚

  • 这是我在解决欧拉项目205题时发现的。问题如下: 彼得有九个四面(金字塔形)骰子,每个骰子的面编号为1、2、3、4。科林有六个六面(立方体)骰子,每个骰子的面编号为1、2、3、4、5、6。 彼得和科林掷骰子比较总数:总数最高的赢。如果总数相等,结果是平局。 金字塔皮特击败立方体科林的概率是多少?将答案四舍五入至小数点后七位,格式为0.abcdefg 我用Guava写了一个简单的解决方案: 我所强调

  • 感谢您抽出时间阅读此文章。现在我正在制作一个非常基本的基于瓷砖的游戏。地图是大量的16x16分幅,角色图像也是16x16分幅。我的角色有自己的类,它是sprite类的扩展,x和y位置根据平铺位置保存。 要注意,我是相当缺乏经验pyplay。 我的问题是,我计划将角色移动限制在一次一个图块,我不知道如何做到这一点,即使玩家快速按下方向键几十次,(WASD或箭头键)它也只会移动以一定的速度从瓷砖到瓷砖

  • 我到处寻找解决方案,但似乎这项技术不再那么流行了,所以似乎也没有任何答案。

  • 我最近用Java写了一个计算密集型算法,然后把它翻译成C++。令我吃惊的是,C++的执行速度要慢得多。我现在已经编写了一个更短的Java测试程序,以及一个相应的C++程序-参见下面。我的原始代码具有大量的数组访问功能,测试代码也是如此。C++的执行时间要长5.5倍(请参阅每个程序末尾的注释)。 以下1st21条评论后的结论... null null Java代码: C++代码:

  • 在很多地方,我都看到过使用堆栈实现快速排序比使用递归更快的说法。这是真的吗?我知道编译器通常擅长将递归转换为迭代,但页面上的评论称,递归太复杂,无法优化。 快速排序还有哪些其他优化? 以下是我提到的一些地方,即递归实现优于递归实现:http://www.geeksforgeeks.org/iterative-quick-sort/ 尽管有上述优化,该函数仍然是递归的,并使用函数调用堆栈来存储l和h