4 个版本 (1 个稳定版)
1.0.0 | 2022 年 8 月 29 日 |
---|---|
0.3.0 | 2019 年 8 月 30 日 |
0.2.0 | 2019 年 3 月 6 日 |
0.1.0 | 2019 年 3 月 2 日 |
#261 in 科学
36KB
592 行
Rust 伊辛库
Ising Lib 是一个帮助研究人员和好奇者执行晶格和其他图上的伊辛模型模拟的工具。它旨在提供广泛的快速伊辛模拟工具。
伊辛模型之所以受欢迎,是因为它很容易从数学上描述,并且有广泛的应用。最初它被构想为模拟由于冷却而导致的铁磁体的自发磁化,但在 20 世纪 50 年代中期,它因其对许多类型相变的建模而成为物理学界非常受欢迎。(点击此处了解普适类)
得益于计算能力的提升,今天我们能够运行比以往任何时候都更大和更多的伊辛模型模拟!最近,伊辛模型开始在社会科学领域受到关注,用于模拟羊群行为和人口动力学。
演示
访问 此网站 以查看交互式演示。[提示:尝试点击 +T
、-T
和 random
按钮。当系统冷却到临界温度以下时,它会“淬火”或自发磁化——这是一个相变示例。]
以下是一个玩具终端可视化演示(examples/displayrun_lattice2d),让您了解模拟内部的情况。
以下是最邻近邻域相关性与温度的图。透明的绿色点是数据点(即样本),蓝色交叉是平均值(即最佳猜测估计),红色误差条是平均值的不确定性 1 sigma。以下图是在 25x25 晶格网格上生成的,在我的 Mac Air (M1) 上运行大约需要 3 分钟(没有 GPU)。
实现细节
该库使您轻松估计一类马尔可夫链的性质。它们被称为伊辛模型,因为它们是由伊辛博士为了模拟铁磁性而提出的。由于它们有许多其他应用(普适性类别),它们在20世纪60年代(核实此事实)变得流行。
类型
该库为每种可能使用的图提供了类型。目前实现的有
- 二维晶格,典型的自旋半数(目前如此)晶格 TODO
- 三维晶格
- 图(可能重命名为GraphGeneral)
愿望清单:一旦我们有一个完全功能的库,实现了二维晶格和自旋半数图类型,我们将首先使自旋类型更加多样(例如,使用三自旋半数或xy模型),然后我们将引入更多的专用图类型:一维晶格(在数学上很容易解决,将仅作为示例有用)、三维晶格、多维晶格和其他类型的图。
特性
测量特性测量每个图类型之间的数量。与此特性关联的数量是可以即时测量的,例如平均自旋或晶格的能量。(在此处链接到文档)
蒙特卡洛特性通过在许多运行中平均来概率估计与系统相关的数量。
您可以使用这些特性以相同的方式使用,而不管底层图结构是什么。即使用相同的方法和相关函数。这样,一旦您看到一个图类型的示例实现,您就看到了所有其他实现。
TODO
- 在蒙特卡洛中实现多线程,以便所有内容都可以在并行中运行
- 实现Lattice2d的深拷贝
- 并行实现MonteCarlo特性,三个指标:能量、邻居相关性、磁化
- 实现二维晶格的基准测试,包括蒙特卡洛、并行处理等。
- 实现Sznajd模型晶格2d的哈密顿量。
- 完成晶格2d的MonteCarlo特性
- 生成文档,使它们更美观、更具信息量
- 发布库
- 清理测量中的
_convolve_2d_circ_neighbours
- 实现三维晶格
- 实现随机图和通用图类型。
- 示例计算磁化率
- 示例计算能量波动
想法
蒙特卡洛例程
- 较大空间距离上的相关性
- 与第n个邻居的相关性(n个向右)
- 与(k,n)个邻居的相关性(n向右,k向上)
- 重构以每次采样多个指标
- 时间相关性:考虑如何缩放“时间”。如果您想评估经过的时间并与不同大小网格进行比较,我们需要通过nsize(站点数)缩放尝试翻转的次数。
参考文献
[1] Wonseok Oh, Sangyong Jeon, Membership Herding and Network Stability in the Open Source Community: The Ising Perspective, Management Science, Vol. 53, No. 7, 1086-1101 (2007). 从两个开源项目的数据中汲取。概念包括:成员群聚,开源社区。
[2] Ising Model of User Behavior Decision in Network Rumor Propagation. 讨论了在谣言传播中使用伊辛模型。使用2d伊辛晶格进行模拟。相互作用力有三个术语,即“微粒子”或“自我认同属性”,“中间部分”或“用户-用户交互”(即交互常数J
),“宏观部分”或“社会环境的影响”(即外磁场H
)。概念包括冯·诺伊曼熵,博弈论。
[3] 伊辛模型:简介及其应用是关于伊辛模型的一个简要介绍,包括一些基本应用。
注意:Ising 库将于本周日发布版本 1.0.0。Ising_lib crate 的维护者已友好地同意将其 crate 的所有权转让给我的项目。
依赖项
~1.5MB
~30K SLoC