# dvcompute_branch This crate is a part of discrete event simulation framework DVCompute Simulator (registration number 2021660590 of Rospatent). The `dvcompute_branch` crate is destined for nested simulation, but the same code base is shared by the `dvcompute_dist` crate destined for optimistic distributed simulation. There are the following main crates: `dvcompute` (sequential simulation), `dvcompute_dist` (optimistic distributed simulation), `dvcompute_cons` (conservative distributed simulation) and `dvcompute_branch` (nested simulation). All four crates are very close. They are based on the same method. ## Simulation Method The main idea is to use continuations for modeling discontinuous processes. Such continuations are themselves wrapped in the monad, for which there are easy-to-use combinators. This idea is inspired by two sources: (1) combinators for futures that were in Rust before introducing the async/await syntax and (2) the Aivika simulation library that I developed in Haskell before. Here is an example that defines a model of the machine that breaks down and then it is repaired: ```rust const UP_TIME_MEAN: f64 = 1.0; const REPAIR_TIME_MEAN: f64 = 0.5; fn machine_process(total_up_time: Grc>) -> 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() } ``` These computations are combined with help of the monadic bind. Such computations should be run later to take effect. ## Examples You can find examples in the author's [repository](https://gitflic.ru/project/dsorokin/dvcompute). ## Documentation * [API docs](https://docs.rs/dvcompute_branch/) ## Tutorial Also you can read the PDF document [DVCompute Simulator Tutorial](https://gitflic.ru/project/dsorokin/dvcompute/blob?file=doc%2Fdvcompute-tutorial.pdf). ## Bibliography * 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 ## Licence Copyright 2020-2024 David Sorokin , based in Yoshkar-Ola, Russia This software is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at .