#事件 #框架 #离散 #时间

nightly desim

受 Simpy 启发的离散时间事件模拟框架

4 个版本 (破坏性)

0.4.0 2023年11月25日
0.3.0 2023年1月20日
0.2.0 2021年3月20日
0.1.0 2018年4月4日

#90模拟

GPL-3.0 许可证

37KB
488 代码行

desim

crate Build Test

desim 代表离散时间事件模拟器。它的目标是成为一个高质量、易于使用的模拟框架,用于基于事件触发的物理或逻辑系统,这些系统可以引发其他事件。

它受到 Python 的 Simpy 环境的启发,但旨在更高效,并提供并发实现。为了保持轻量级和高效,它基于实验性的 Rust 协程 功能。

您可以在这里阅读 API 文档

使用方法

要使用此框架,请将以下行添加到您的 Cargo.toml 文件中

desim = "0.4"

版本号遵循 semver 规范。

模拟环境由 Simulation 结构体提供,该结构体公开了用于生成进程、分配资源和安排事件的函数。此外,它还提供获取当前时间和已处理事件的有序列表的获取器以及处理下一个事件和运行所有事件直到满足一定条件的函数。

进程是一个协程,它产生 Effect 枚举的一个变体。使用此类型,进程可以与模拟交互,例如安排事件或请求资源。

有关更多信息,请参阅上面的链接 API 文档。

示例

示例文件夹包含一些使用 desim 的模拟。您可以使用 cargo run --example <name> 来构建和运行它们。

贡献

请随时通过拉取请求和/或问题为该项目做出贡献。所有贡献都应符合与 GNU GPLv3 兼容的许可证。

为什么选择 GNU GPL 而不是 Apache/MIT 这样的更宽松的许可证?因为我编写了一款自由软件,我不想让它成为专有软件的基础。此工作的改进或使用 desim 作为库编写的模拟软件也应为自由软件。

变更

  • 0.4.0 将所有出现的 generator 替换为 coroutine
  • 0.3.0 允许定义自定义资源类型。
    警告:包含破坏性更改
    • SimGen 已重命名为 Process
    • Resource 现在是一个特质,并且 create_resource 方法已被更新,以接受一个输入 Box<dyn Resource<T>>
    • 仍然可以使用旧资源类型创建 SimpleResource 的实例
  • 0.2.0 通过生成器恢复参数支持,添加了一个模拟上下文,在恢复过程中传递给进程,并可以用来检索模拟时间或导致生成器恢复的事件
  • 0.1.0 首次发布

无运行时依赖