2个版本
0.1.1 | 2023年5月31日 |
---|---|
0.1.0 | 2023年5月28日 |
#459 in 图像
每月下载 27 次
215KB
1.5K SLoC
lenia_ca
此crate具有模拟Lenia细胞自动机系统的核心功能。有关更全面的文档,请访问docs.rs页面。
在发布此仓库和crate时,docs.rs不允许在文档中嵌入图像(至少不是容易嵌入的),因此以下是几个可在GitHub上查看的图形,展示了lenia_ca crate能够模拟的两种Lenia的工作原理。
StandardLenia
的工作原理如下
- 在
convolution_channel
的channel和
kernel
之间执行卷积操作(实现为基于FFT的卷积) - 然后,将每个点/像素的值传递到
convolution_channel
的growth_function
。 - 然后将得到的点/像素乘以积分步长
dt
,并添加到channel
中的原始值。 - 然后将得到的点/像素夹到范围
0..1
内。这是channel
的下一次时间步,将用作下一次迭代的channel
值。
使用set_kernel()
来更改内核的外观。
使用set_growth_function()
来为卷积结果设置特定的增长函数。
使用set_dt()
来更改模拟的积分步长。
ExpandedLenia
的工作原理如下
- 对于每个
convolution_channel
,在源channel
和convolution_channel
的kernel
之间执行卷积操作(以FFT为基础实现)。注意每个convolution_channel
只从单个channel
接收输入。 - 对于每个
convolution_channel
,将卷积结果传递到convolution_channel
的growth_function
。 - 对于每个
channel
,将相应的convolution_channel
结果和channel
的权重进行逐元素乘法。 - 对于每个
channel
,对加权卷积乘积的结果进行加权求和。 - 对于每个
channel
,将加权求和乘以积分步长dt
,并将其加到channel
中的原始值。 - 对于每个
channel
,将结果值夹逼到范围0..1
内。这是相应channel
的下一个时间步,将被用作下一次迭代的channel
值。
使用set_channels()
来设置模拟中的通道数量。
使用set_convolution_channels()
来设置内核的数量及其相关增长函数。
使用set_convolution_channel_source()
来设置将被特定内核卷积的通道。
使用set_kernel()
来更改convolution_channel
的内核外观。
使用set_growth_function()
来为卷积结果设置特定的增长函数。
使用set_weights()
来设置对应卷积通道结果的通道权重。
使用set_dt()
来更改模拟的积分步长。
依赖项
~6.5MB
~121K SLoC