问题标签 [conways-game-of-life]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
41923 浏览

algorithm - 优化康威的“生命游戏”

为了进行实验,我(很久以前)实现了康威的生命游戏(我知道这个相关的问题!)。

我的实现通过保留 2 个布尔数组来工作,代表“最后一个状态”和“正在更新的状态”(每次迭代时交换 2 个数组)。虽然这相当快,但我经常想知道如何优化它。

例如,一个想法是在迭代 N 时预先计算可以在迭代 (N+1) 时修改的区域(这样如果一个单元不属于这样的区域,它甚至不会被考虑在迭代(N+1))。我知道这很模糊,我从来没有花时间去详细说明......

您对如何优化(以提高速度)生命游戏迭代有任何想法(或经验!)吗?

0 投票
6 回答
2481 浏览

python - 康威的人生游戏

我目前正在编写一个关于康威生命游戏的程序,我真的是 python 的初学者,我根本不知道如何开始。任何人都可以帮助我吗?

0 投票
7 回答
18493 浏览

excel - 如何在 Excel 中制作生命游戏?

我对如何在 Excel 中制作宏知之甚少。

0 投票
2 回答
8479 浏览

algorithm - 另一个生命游戏问题(无限网格)?

我一直在玩 Conway 的生命游戏,最近发现了一些非常快的实现,例如 Hashlife 和 Golly。(在这里下载 Golly - http://golly.sourceforge.net/

我无法理解的一件事是编码人员如何实现无限网格?我们不能保留无限的任何东西,如果你跑得好,让几架滑翔机飞过边缘,等待几分钟并立即缩小,你会看到滑翔机仍然在太空中逃跑,那么以上帝的名义如何以编程方式处理这个无穷大的概念呢?是否有一个有据可查的模式或什么?

非常感谢

0 投票
3 回答
2173 浏览

c - hashlife alg 如何在 Golly 中永远存在?

在 hashlife 中,该字段通常被视为理论上无限的网格,所讨论的模式集中在原点附近。四叉树用于表示字段。给定一个由 2^(2k) 个单元格组成的正方形,边上有 2k 个,在树的第 k 层,哈希表在中心存储 2^(k-1) x 2^(k-1) 个正方形单元格, 2^(k-2) 代以后。例如,对于一个 4x4 的正方形,它存储 2x2 中心,向前 1 代;对于 8x8 正方形,它存储 4x4 中心,向前 2 代。

所以给定一个 8x8 的初始配置,我们得到一个以 8x8 正方形为中心的 4x4 正方形 1 代前向中心和一个 2x2 正方形 2 代前向(1 代前向 4x4 正方形)以 8x8 正方形为中心。随着每一代我们对网格的看法减少,反过来我们得到自动机的下一个状态。在将最里面的 2x2 平方 2^(k-2) 代向前推进之后,我们就不能再进一步了。

那么 Golly 中的 hashlife 是如何永远持续下去的呢?此外,它对该领域的看法似乎从未减少。它似乎显示了 2^(k-2) 代后整个自动机的状态。更重要的是,给定一个随时间扩展的起始配置,算法的视图似乎增加了。网格视图缩小以显示扩展自动机?

0 投票
3 回答
3136 浏览

python - 优化 80x60 RGB 像素阵列上的 Game-of-Life 迭代

好的,所以我有一段真正需要优化的 Python 代码。

  • 这是对小(80x60 像素)图像的生命游戏迭代,并从中提取 RGB 值。
  • 当前使用嵌套的 for 循环;我宁愿将那些 for 循环换成更快的map()c 函数,但是如果这样做,我将无法弄清楚如何获取 x,y 值,也无法确定在函数范围之外定义的局部值d 需要定义。
  • 使用map()会比当前的 for 循环集更快吗?我怎么能使用它并且仍然得到x,y?
  • 我目前使用 pygame Surfaces,并且我已经尝试过这些surfarray/pixelarray模块,但是由于我正在更改/获取每个像素,所以它比Surface.get_at()/set_at().
  • 另外,有点无关紧要......如果Python不遍历数字列表而只是增加一个数字,你认为这可以更快吗,就像在其他语言中一样?为什么 python 不包含普通的 for() 以及它们的 foreach()?
  • 那里的条件数量可能也会让事情变慢,对吧?最慢的部分是检查邻居(它在哪里构建列表n)......我用二维数组上的切片访问替换了整个位,但它不能正常工作。

代码的编辑版本:

完整版功能:

0 投票
4 回答
1655 浏览

visual-c++ - 康威的生命游戏数组问题

我正在为学校写康威的人生游戏。在程序中,我遇到了数组获取我分配给它们的值的问题。在程序的某一时刻,他们打印出分配给他们的值 (1),但在程序结束时,当我需要打印数组以显示游戏的迭代时,它显示的数字非常低。另一个麻烦是我在输入一个循环时遇到了困难,该循环会询问它是否希望您运行另一个迭代。所以我删除了它,直到以前的错误得到修复。我用 C++ 写这个

0 投票
1 回答
1208 浏览

artificial-intelligence - 使用生命游戏或其他虚拟环境进行人工(智能)生命模拟?

我对 AI 的兴趣之一与其说是数据,不如说是生物计算。这包括神经网络、大脑映射、细胞自动机、虚拟生活和环境。

下面描述的是一个令人兴奋的项目,其中包括为机器人开发一个虚拟环境来进化。

“Polyworld 是由 Larry Yaeger 编写的跨平台(Linux、Mac OS X)程序,旨在通过自然选择和进化算法发展人工智能。” http://en.wikipedia.org/wiki/Polyworld "

Polyworld 是一个研究虚拟生活的有前途的项目,但距离创建“智能自主”代理还很远。

这是我的问题,理论上,您将使用哪些参数来创建 AI 环境?可能是大脑环境?可能有多个自给自足的生命有机体,它们有自己的“大脑”或生命结构。

我想在生活模拟游戏上创造一个旋转。如果你有一个 64x64 的生命网格游戏怎么办。但是,您可能有 N 个网格,而不是一个网格。N 个网格是你的“生命力” 如果所有生命实体游戏都死在一个特定的网格中,那么整个网格都会死。一组“格子”组成了一个生命体。

我没有直接的目标。首先,我想模拟一个环境,用 OpenGL 可视化环境中发生的事情,看看环境是否有任何有趣的属性。然后我想添加“稀缺资源”,看看 AI 环境是否可以充分管理资源。

0 投票
5 回答
4047 浏览

java - 康威人生游戏的多线程 Java 程序 - 边界单元的争用

我正在学习 Java 中的并发编程,并为 Game of Life 编写模拟。

这是我的想法:

  • 使用 int[][] 存储单元格的状态
  • 将 int[][] 划分为 t 个段并使用 t 个工作线程
  • t 线程将从它们的段中读取,计算其段中所有单元的新值并更新单元。
  • 一旦他们完成计算,他们就会在障碍处等待其他工人完成
  • 当越过障碍时,主线程将更新 UI。
  • 工人继续计算下一个状态。

现在将在段的共同边界处发生争用。如果一个线程在其邻居读取之前的值之前覆盖了边界单元的状态,则邻居的计算将是错误的。

我有哪些选择?

  • 使用 callable 而不是 runnable 并让工作线程返回新值(而不是更新段本身)。主线程可以在越界后更新矩阵。此选项涉及将工作线程返回的结果复制到矩阵中。
  • 使用两个屏障。工作线程从其邻居的段复制边界单元并在第一个屏障处等待。一旦通过了这个障碍,他们就会继续计算下一个状态并更新适当的段。然后他们在第二道屏障等待。主线程更新 UI。

我的问题是,有没有其他方法可以处理不涉及复制数据或比上述两个选项更有效的边界单元格的争用?可能是在使用 ReaderWriterLock、volatile 变量或其他同步机制?

更新:到目前为止,彼得的双缓冲解决方案是最干净的。但我有一个问题。由于这两个数组是共享数据并且我们没有使用任何同步(同步访问或 volatile 变量),它不会造成可见性问题吗?多个 CPU 是否可以缓存数组值并在每次迭代时只更新数组的一部分?然后线程将获得边界单元格的陈旧值。这可能吗?如果不是,为什么。如果是,我该如何解决?似乎声明两个数组 volatile 不会使它们的各个元素 volatile

0 投票
2 回答
1046 浏览

f# - 带加速器的 F# 生活游戏

我正在尝试使用加速器 v2 在 F# 中编写生活,但由于某些奇怪的原因,尽管我的所有数组都是方形的,但我的输出不是方形 - 似乎除了矩阵左上角的矩形区域之外的所有内容都被设置为错误的。我不知道这是怎么发生的,因为我的所有操作都应该平等地对待整个数组。有任何想法吗?