9 个版本

0.0.13 2024年7月30日
0.0.12 2024年7月13日
0.0.11 2024年6月18日
0.0.8 2024年2月16日
0.0.3 2023年6月9日

194模拟

Download history 5/week @ 2024-05-20 187/week @ 2024-05-27 29/week @ 2024-06-03 175/week @ 2024-06-10 153/week @ 2024-06-17 49/week @ 2024-06-24 37/week @ 2024-07-01 111/week @ 2024-07-08 17/week @ 2024-07-15 2/week @ 2024-07-22 433/week @ 2024-07-29

563 每月下载
4 crate 中使用

GPL-2.0 许可证

87KB
1K SLoC

此 crate 封装了由 cellular_raza 指定的基于代理的模型的概念。要了解如何设计自己的概念,请参阅 cellular_raza 书籍

[力学]

定义如何调整单个细胞的位置、力和速度。

这个概念对于每个细胞代理都极为重要,因为它定义了细胞的空间表示,其他细胞可以看见。这意味着只要所有应包含在模拟中的细胞都可以用这个共享特质来表示,cellular_raza 应该能够模拟它们。

尽管模拟中的点在一般理论公式中不是可加的(例如由于边界),但需要有一个可加的类型来有效地使用自适应求解器。因此,我们需要独立检查和应用边界条件。

[交互]

交互可以由许多不同的机制引起。下表显示了可能使用的短总结的特质。其中一些特质组合使用可能没有意义。引擎可以选择仅实现某些特质,而省略其他特质。

交互特质 描述
[交互] 细胞通过具有比细胞本身更大的范围的力进行交互。例如,用户可以选择实现自己的排斥力和吸引力。
[细胞反应] 细胞内反应可以与细胞外环境相关联。我们可以通过 常微分方程 来模拟这些反应。

[周期]

循环特性负责循环的实现和增量更新。主要的 update 函数负责返回可选的循环事件。这些事件可以有不同的效果。例如,细胞分裂事件触发 divide 方法。以下表格展示了事件和函数的映射。

| 事件 | 效果 | | ----- -------- | ------ | | Division | divide 函数返回(创建)一个新的细胞并修改现有的细胞。这意味着,用户需要确保细胞结构中的每个字段都正确修改,以模拟细胞分裂。 | | PhasedDeath | 细胞进入死亡过程,并通过 update_conditional_phased_death 持续更新。一旦相应的函数返回 true,则过程被认为是完成的,细胞被移除。 | | Remove | 此事件将细胞从模拟中移除,不采取任何其他操作。 |

错误

对于后端,可能有用的是定义一个单一的错误类型(例如 SimulationError),它应可从模拟过程中产生的错误派生。它要求引擎的自定义错误类型 MyCustomError 实现 From<MyCustomError> for SimulationError。错误应根据其可恢复性、可忽略性或其他方式处理进行分离。由于这个crate旨在提供自适应求解方法,因此希望有一个回退机制,可以用于可能因精度问题而引起的错误。

以下表格显示了当前支持的错误摘要。后端需要了解它们,并实施自定义处理方案来克服或解决它们。中止模拟是一个选项,但必须有良好的文档记录,而不引入未定义的行为。

错误类型 可能的错误原因
BoundaryError 求解精度、域实现错误、内部引擎错误
CalcError 求解精度、用户对应函数实现的错误、内部引擎错误
捕获与细胞之间交互相关的特性和类型。

绘图

通过 plotters 库直接可视化模拟的组件。

依赖关系

~6–8.5MB
~147K SLoC