6 个稳定版本
2.0.0 | 2024年6月29日 |
---|---|
1.3.7 | 2022年1月16日 |
#22 在 模拟
33 每月下载量
用于 3 包
675KB
16K SLoC
dvcompute_dist
此包是离散事件模拟框架 DVCompute Simulator(俄罗斯专利局登记号 2021660590)的一部分。dvcompute_dist 包旨在进行乐观分布式模拟,但与用于嵌套模拟的 dvcompute_branch 包共享相同的代码库。
以下是一些主要的包:dvcompute
(顺序模拟)、dvcompute_dist
(乐观分布式模拟)、dvcompute_cons
(保守分布式模拟)和 dvcompute_branch
(嵌套模拟)。所有四个包都非常相似。它们基于相同的方法。
需求
在乐观分布式模拟的情况下,当启动模拟模型的可执行文件时,操作系统应能找到 dvcompute_mpi
和 dvcompute_core_dist
动态(共享)库。
您可以从源代码构建 dvcompute_mpi
库,这些源代码需要 CMake、C++ 编译器和您打算使用的某些 MPI 实现。
但是,dvcompute_core_dist
动态库必须满足在 dvcompute_dist
包中指定的预定义二进制接口(动态库必须实现事件队列)。您可以向作者请求实现此接口的预构建版本。此预构建版本是 DVCompute Simulator 的“可分发代码”部分。
模拟方法
主要思想是使用延续来建模不连续过程。这样的延续本身被包裹在 monad 中,这为它提供了易于使用的组合子。这个想法受到了两个来源的启发:(1)在引入 async/await 语法之前在 Rust 中的 futures 组合子,(2)我在 Haskell 中开发的 Aivika 模拟库。
以下是一个定义了机器故障后进行维修的模型的示例
const UP_TIME_MEAN: f64 = 1.0;
const REPAIR_TIME_MEAN: f64 = 0.5;
fn machine_process(total_up_time: Grc<RefComp<f64>>) -> ProcessBox<()> {
let total_up_time2 = total_up_time.clone();
random_exponential_process(UP_TIME_MEAN)
.and_then(move |up_time| {
RefComp::modify(total_up_time, move |total_up_time| {
total_up_time + up_time
})
.into_process()
.and_then(move |()| {
random_exponential_process_(REPAIR_TIME_MEAN)
})
.and_then(move |()| {
machine_process(total_up_time2)
})
})
.into_boxed()
}
这些计算通过 monadic bind 组合。这些计算应在以后运行以生效。
示例
您可以在作者的仓库中找到示例。
文档
教程
您还可以阅读PDF文档DVCompute 模拟器教程。
参考文献
- Sorokin David. DVCompute 模拟器用于离散事件模拟。应用信息学杂志,2021年,第16卷,第3期,第93-108页(俄语)。DOI: 10.37791/2687-0649-2021-16-3-93-108
许可证
版权所有 © 2020-2024 David Sorokin [email protected],俄罗斯尤什卡尔-奥拉
本软件受Mozilla公共许可证(MPL)第2.0版条款约束。如果本文件未附带MPL副本,您可以从http://mozilla.org/MPL/2.0/获取。
依赖项
~1.7–2.6MB
~50K SLoC