dvcompute_gpss_cons

Crates.iodvcompute_gpss_cons
lib.rsdvcompute_gpss_cons
version2.0.0
sourcesrc
created_at2022-01-05 11:20:14.669851
updated_at2024-06-29 10:47:45.17299
descriptionDiscrete event simulation library (support of GPSS-like DSL language for conservative distributed simulation)
homepagehttps://gitflic.ru/project/dsorokin/dvcompute
repositoryhttps://gitflic.ru/project/dsorokin/dvcompute
max_upload_size
id508325
size179,720
dsorokin (dsorokin)

documentation

README

dvcompute_gpss_cons

This crate is a part of discrete event simulation framework DVCompute Simulator (registration number 2021660590 of Rospatent). The dvcompute_gpss_cons crate defines a GPSS-like DSL for conservative distributed simulation, but the same code base is shared by the dvcompute_gpss crate destined for sequential simulation.

The DSL language implements analogs of the following blocks: PREEMPT, RETURN, ASSEMBLE, GATHER, SPLIT, TRANSFER and others. The SELECT block is naturally expressed as a composition of computations. There are analogs of the facility and storage entities.

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.

Requirements

In case of conservative distributed simulation, you must satisfy the requirements that the dvcompute_cons crate imposes regarding the dynamic (shared) libraries.

Simulation Method

Here is an example, where each student arrival is modeled by some transact. These transacts are processed by the block computations:

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()
}

These computations are arrows in terms of functional programming. They are combined with help of composition. Such computations should be run later to take effect.

Examples

You can find examples in the author's repository.

Documentation

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 davsor@mail.ru, 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 http://mozilla.org/MPL/2.0/.

Commit count: 0

cargo fmt