4个稳定版本
2.0.0 | 2024年6月29日 |
---|---|
1.3.5 | 2022年1月7日 |
1.3.4 | 2022年1月6日 |
1.3.3 | 2022年1月5日 |
#397 在 模拟
24 每月下载量
在 dvcompute_results_cons 中使用
365KB
8K SLoC
dvcompute_gpss_cons
此crate是离散事件模拟框架DVCompute Simulator(俄罗斯专利局注册号2021660590)的一部分。该dvcompute_gpss_cons
crate定义了一个用于保守分布式模拟的GPSS-like DSL,但与用于顺序模拟的dvcompute_gpss
crate共享相同的代码库。
DSL语言实现了以下块的类似物:PREEMPT、RETURN、ASSEMBLE、GATHER、SPLIT、TRANSFER和其他。SELECT块自然地表示为计算的组合。还有设施和存储实体的类似物。
以下是一些主要crate:dvcompute
(顺序模拟)、dvcompute_dist
(乐观分布式模拟)、dvcompute_cons
(保守分布式模拟)和dvcompute_branch
(嵌套模拟)。所有四个crate都非常接近。它们基于相同的方法。
要求
在保守分布式模拟的情况下,必须满足dvcompute_cons
crate对动态(共享)库的要求。
模拟方法
以下是一个示例,其中每个学生的到达通过某些事务来模拟。这些事务通过块计算进行处理
fn student_chain(line: Grc<Queue>, prof: Grc<Facility<f64>>) -> BlockBox<Transact<f64>, ()> {
queue_block(line.clone(), 1)
.and_then(seize_block(prof.clone()))
.and_then(depart_block(line.clone(), 1))
.and_then({
advance_block(random_exponential_process_(1000.0))
})
.and_then(let_go_chain(line, prof))
.into_boxed()
}
fn let_go_chain(_line: Grc<Queue>, prof: Grc<Facility<f64>>) -> BlockBox<Transact<f64>, ()> {
release_block(prof)
.and_then(terminate_block())
.into_boxed()
}
这些计算在函数式编程中是箭头。它们通过组合来结合。这些计算应该稍后运行以生效。
示例
您可以在作者的仓库中找到示例。
文档
参考文献
- 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公共许可证(v. 2.0)条款约束。如果此文件未附带Mozilla公共许可证(MPL)副本,您可以在以下地址获取:[http://mozilla.org/MPL/2.0/](http://mozilla.org/MPL/2.0/)。
依赖项
~0–395KB