问题标签 [cellular-automata]
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.
java - Java:具有类型化单元的元胞自动机
我正在研究一个基于 Java 的类似元胞自动机的实现(在技术上不确定它是否如此,鉴于以下内容),其中各个单元可能具有封装不同数据和 CA 规则的不同类型。可能有大量类型,我希望能够动态插入新的类型,而无需维护其他代码。
所有单元类型都派生自一个公共基类。每个单元格的 update() 方法在模拟的每一帧中只调用一次:
当 CA 规则只需要相关单元格的数据时,这可以正常工作,例如:
但是,我有一些模拟规则要求单元格查询相邻相邻单元格的数据,但前提是它们属于具有所述数据的类型。使用 instanceof 运算符来完成此操作的诱惑力很大:
如果可能的话,我宁愿避免臭味的 instanceof 。我也不能仅仅将 getData() 提升到超类以实现多态性,因为这些单元的实际数据结构会更加复杂和多样。我一直在阅读有关解决 instanceof 滥用的 GoF 访问者模式,但我似乎无法弄清楚如何将其应用于此问题。关于如何做到这一点或其他解决问题的方法的想法?
谢谢!史蒂夫
c# - C# 每次使用新值迭代一个 If 语句
是否可以在每次迭代时使用新值迭代嵌套的 if 语句?我正在尝试构建一个一维元胞自动机(对于家庭作业,我不能否认)而且我对 C# 完全陌生,因为下面的代码无疑会保证。我尝试使用可用的最直接、基本的 DIY 方法来创建这个程序,但我已经陷入了困境。
我有一个长度为 8 的 1 和 0 的字符串,比如说
我想将这个设置分解为 8 个子字符串组,每组 3 个,每组由 y 中的一个值及其两侧的单个值组成。所以从 0 开始计数,第 3 组将是 110,第 7 组将是 001。但是,子字符串只会提供第 1 组到第 6 组,因为我无法根据自己的喜好将它们围绕 y 循环,所以我定义了以下内容 -
使用 y1 我能够取出所有必要的子字符串。这些基本上定义如下 -
下一代元胞自动机的规则由该程序中的用户决定——也就是说,用户可以选择是否为所有迭代的子字符串,例如 111->0 或 1。对于每个子字符串,我以下列方式使用(非常多)if 表
其中 a,b,c,d,e,f,g,h 是整数,是用户选择的规则。例如,假设用户决定每个集合 000 应该产生一个 1 值,然后 a=1。b 对应于 {0,0,1},c 对应于 {0,1,0},依此类推。然而,这种方法的一个相当明显的问题是,我最终只能得到 1 代 int 我无法获得。我很想用新一代替换 y1 (转换为字符串)。如果这不可能,请告诉我!
c# - 在 C# 中写入控制台时,Unicode 字符无法正确显示
我正在开发代码以在 C# 中执行基本的元胞自动机。我在 Microsoft Visual Studio Express 2012 中工作。
总的来说,我的代码正在运行,但是在将结果写入控制台时遇到了麻烦。
我编写了一个类“bitrep”,其中包括一个方法“brep”,该方法将 uint 作为输入并返回一个字符串,该字符串对应于该 uint 的位表示。
出于这个问题的目的,我希望返回的字符串是一个黑色(实心)方块代表 1,一个白色(空)方块代表 0。
当程序使用上述代码运行时,输出示例如下:
实心/黑色方块代表 1,但不是白色方块,而是 0 被写为?
为什么没有正确显示 0 的白色方块(具有 Unicode UTF-16(十进制)编码 9633)的所需输出?
matlab - 我的元胞自动机代码无法正常工作
以上是模拟HIV病毒4阶段的元胞自动机代码。当我运行上面的代码时,右侧的单元格保持不变,没有任何更改,我非常努力地找出问题所在,但也无法找到。
以下是我的自动机的规则,
规则 1:如果一个 H 小区至少满足下列规则之一,则在下一步中成为 I1 小区: (i) 最近邻或次近邻中至少有一个 I1 小区;(ii) 最近邻中至少有 x I2 个小区,次近邻中至少有 y I2 个小区。
规则 2:I1 单元在下一步中变为 I2 单元。
规则 3:一个 I2 细胞经过 τ 步后成为 D 细胞,因为免疫识别和清除。
规则 4:在下一步中,AD 单元格可以用概率为 Pinf 的 I1 单元格替换,也可以用概率为 (Prep - Pinf) 的 H 单元格替换。
我想知道我的代码是否符合这些规则,以及我必须对代码进行哪些更改才能正确模拟病毒。请任何人帮助我解决这个问题。提前致谢
language-agnostic - Wolfram Alpha 上显示为加载屏幕的元胞自动机是什么?
在 Wolfram Alpha 中输入查询时,您通常会看到动画显示几秒钟,然后显示结果. 它似乎是一个具有 3 个不同状态的元胞自动机。
我想知道这个特殊的自动机叫什么,以及在哪里可以找到有关它的信息。谢谢!
dimension - 元胞自动机的 Z 阶曲线和反 Z 阶
我在 Processing 中编写了一个程序,它可以模拟任意数量维度的元胞自动机(完全、最近邻、摩尔邻域)。为了简化事情并使程序尽可能通用,我将单元的状态存储在一维整数数组中。为了计算一个单元的 n 维邻居,我将一维数组视为光栅顺序(将第一个坐标从零迭代到相关空间的大小,然后将下一个坐标递增 1 并迭代第一个再一次,以此类推。)
由于在计算机屏幕的 2 维中显示 n 维数据的优雅方式很少(特别是在这种情况下,n 理论上可以从 2 到无穷大,实际上至少可以从 2 到 5),我决定尝试使用 Z 顺序,但我读到的关于该主题的所有内容都让我感到困惑,所有材料似乎都是从笛卡尔坐标 (x1,x2,x3...xn) 的假设开始的,其中不适用于我的情况。
我想要的是能够将一维元胞数组中的元素存储在另一个一维数组中,按 n 维 Z 顺序排序,然后将该数组转换为按二维 Z 排序的数组-订单,以便我可以显示它。我想以一种有效的方式做到这一点(我试图让程序以每秒至少 0.5 帧的速度运行,这在 5 个维度上已经很困难,即使对于小空间也是如此)。
我知道位交错算法,但我不太确定如何在处理中实现它而不会溢出我的 32 位整数。任何帮助,将不胜感激。如果您想了解更多详细信息,我在下面包含了相关代码(是的,我知道这很混乱;这就是我的工作方式):
cellular-automata - 蜂窝自动化获得无生命的邻居
我正在尝试开发一个元胞自动机模拟,问题是我想获得每个细胞的近邻和远邻(以蓝色和米色表示)并确定哪些细胞已经死亡并使用一些规则使它们复活。因此,在每次迭代中,我都会遍历数组中的所有单元格,并且我想以某种方式有效地获取这些单元格的所有近邻和远邻。
但是,根据网格上单元格的位置,只有一些邻居可用,到目前为止我想到的唯一方法是使用 getNeighbours(cell) 方法,该方法将返回一个包含所有可用邻居的列表我将不得不迭代以获得非生命的那个单元格。
然而,对于网格中的每个单元格,这是一个很大的开销和大量的比较!
是否有任何通常用于蜂窝自动化的通用方法?也许我可以使用任何数据结构?因为到目前为止,如果网格足够大,每次迭代都将花费大量时间。
lua - Lua有什么功能可以判断一个cell的坐标?
我正在编写 Lua 脚本(单元自动化),现在我需要将蜂窝空间分成 4 个部分,每个部分都有自己的功能,我使用以下代码(对你们中的一些人来说可能看起来很愚蠢):
现在我想问一下重写上述代码的正确方法是什么?有什么功能吗?谢谢!
c - 元胞自动机不工作
我正在尝试基于此创建一个元胞自动机。我设法以一种仅遵循规则 90 的简单方式做到了这一点,但是当我将其更改为接受任何规则时,我做错了。
这就是结果的样子。 http://natureofcode.com/book/imgs/chapter07/ch07_12.png
这是我的代码:
使用以下 input.txt
00000000000000000000000000000000000000100000000000000000000000000000000000000000
谢谢!
class - 用Processing编写的程序什么都不做,但没有错误
对于我的第一个使用类的项目,我决定编写“生命游戏”。我创建了一个名为 cell 的类,它的工作是检查附近的细胞是否还活着(变量状态为真),然后决定下一帧细胞是否还活着。这是我的代码