3个稳定版本
2.0.0 | 2024年6月29日 |
---|---|
1.3.4 | 2022年1月6日 |
1.3.3 | 2022年1月5日 |
#6 in 模拟
43 每月下载量
在 3 crates 中使用
600KB
14K SLoC
dvcompute
该crate是离散事件模拟框架DVCompute Simulator(Rospatent注册号2021660590)的一部分。dvcompute crate旨在进行顺序模拟,但与dvcompute_cons crate共享相同的代码库,dvcompute_cons crate旨在进行保守分布式模拟。
以下是一些主要crate:dvcompute
(顺序模拟),dvcompute_dist
(乐观分布式模拟),dvcompute_cons
(保守分布式模拟)和dvcompute_branch
(嵌套模拟)。所有四个crate都非常接近。它们基于相同的方法。
模拟方法
主要思想是使用延续来建模不连续的过程。这些延续本身被包装在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 Simulator教程。
参考文献
- Sorokin David. DVCompute Simulator for discrete event simulation. Prikladnaya informatika=Journal of Applied Informatics, 2021, vol.16, no.3, pp.93-108 (in Russian). DOI: 10.37791/2687-0649-2021-16-3-93-108
许可证
版权所有 2020-2024 David Sorokin [email protected],位于俄罗斯尤什卡尔-奥拉
此软件受Mozilla公共许可证第2.0版条款约束。如果没有与该文件一起分发MPL副本,您可以在 http://mozilla.org/MPL/2.0/ 获取一份。
依赖项
~0–600KB