2个版本

0.1.1 2023年5月31日
0.1.0 2023年5月28日

#459 in 图像

每月下载 27

MIT 许可证

215KB
1.5K SLoC

lenia_ca

此crate具有模拟Lenia细胞自动机系统的核心功能。有关更全面的文档,请访问docs.rs页面。

在发布此仓库和crate时,docs.rs不允许在文档中嵌入图像(至少不是容易嵌入的),因此以下是几个可在GitHub上查看的图形,展示了lenia_ca crate能够模拟的两种Lenia的工作原理。

StandardLenia 的工作原理如下

  • convolution_channelchannelkernel之间执行卷积操作(实现为基于FFT的卷积)
  • 然后,将每个点/像素的值传递到convolution_channelgrowth_function
  • 然后将得到的点/像素乘以积分步长dt,并添加到channel中的原始值。
  • 然后将得到的点/像素夹到范围0..1内。这是channel的下一次时间步,将用作下一次迭代的channel值。

使用set_kernel()来更改内核的外观。

使用set_growth_function()来为卷积结果设置特定的增长函数。

使用set_dt()来更改模拟的积分步长。

Image representation of the algorithm on GitHub

ExpandedLenia 的工作原理如下

  • 对于每个convolution_channel,在源channelconvolution_channelkernel之间执行卷积操作(以FFT为基础实现)。注意每个convolution_channel只从单个channel接收输入。
  • 对于每个convolution_channel,将卷积结果传递到convolution_channelgrowth_function
  • 对于每个channel,将相应的convolution_channel结果和channel的权重进行逐元素乘法。
  • 对于每个channel,对加权卷积乘积的结果进行加权求和。
  • 对于每个channel,将加权求和乘以积分步长dt,并将其加到channel中的原始值。
  • 对于每个channel,将结果值夹逼到范围0..1内。这是相应channel的下一个时间步,将被用作下一次迭代的channel值。

Image representation of the algorithm on GitHub

使用set_channels()来设置模拟中的通道数量。

使用set_convolution_channels()来设置内核的数量及其相关增长函数。

使用set_convolution_channel_source()来设置将被特定内核卷积的通道。

使用set_kernel()来更改convolution_channel的内核外观。

使用set_growth_function()来为卷积结果设置特定的增长函数。

使用set_weights()来设置对应卷积通道结果的通道权重。

使用set_dt()来更改模拟的积分步长。

依赖项

~6.5MB
~121K SLoC