des-sim
The des-sim crate is a classic time-driven simulation library for Discrete Event Systems (DES) implemented in Rust.
It aims to build discrete event system simulations in a type-safe and high-performance Rust environment.
Installation
Add it to your project using Cargo. Add the following to the [dependencies] section of your Cargo.toml:
[]
= "0.1.0" # *Please specify the latest version
Usage
Below is an image of the basic flow of a simulation using des-sim.
For more detailed implementation methods and working code, please refer to
the GitHub repository examples.
standard_runner.rs is especially
recommended as a first step.
Example
A sample incorporating all the basic features provided is shown below.
use ;
use ;
use Runner;
use ;
use ;
use Model;
use Source;
use Duration;
use VecDeque;
use fmt;
// Defines the events handled in the simulation.
// In the `standard_runner.rs` example, these represent job arrival and processing completion events.
// Defines the system (model) to be simulated.
// In the `standard_runner.rs` example, this is a server model that processes jobs.
// Implements the Model trait and describes the event processing logic.
// Implements the ModelSummary trait to provide a summary for logging.
// Defines a source that periodically generates events.
// In the `standard_runner.rs` example, this is a generator that creates jobs.
// Implements the Source trait and describes the event generation logic.
Running the above source code will produce output similar to the following:
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Start Register Source: Job Generator
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< After Register Source: Job Generator
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
>>> Tick at SimTime(0) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(0)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(0) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(0) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(0) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(0), priority: EventPriority(0), payload: JobArrived { job_id: 0 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(0), priority: EventPriority(0), payload: JobArrived { job_id: 0 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(0) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(0)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(0) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(1) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(1)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(1) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(1) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(1) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(1) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(1)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(1) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(2) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(2)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(2) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(2) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(2) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(2) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(2)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(2) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(3) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(3)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(3) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(3) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(3) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(3) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(3)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(3) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(4) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(4)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(4) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(4) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(4) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(4) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(4)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(4) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(5) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(5)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(5) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(10)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(5) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(5) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(1), priority: EventPriority(0), payload: JobProcessed { job_id: 0 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(1), priority: EventPriority(0), payload: JobProcessed { job_id: 0 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(5) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(5)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(5)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(5) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(5) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(5) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(2), priority: EventPriority(0), payload: JobArrived { job_id: 1 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(2), priority: EventPriority(0), payload: JobArrived { job_id: 1 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(5) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(5)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(5) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(6) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(6)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(6) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(6) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(6) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(6) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(6)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(6) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(7) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(7)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(7) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(7) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(7) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(7) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(7)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(7) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(8) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(8)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(8) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(8) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(8) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(8) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(8)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(8) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(9) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(9)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(9) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(9) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(9) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(9) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(9)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(9) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(10) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(10)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(10) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(15)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(10) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(10) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(3), priority: EventPriority(0), payload: JobProcessed { job_id: 1 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(3), priority: EventPriority(0), payload: JobProcessed { job_id: 1 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(10) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(10)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(10)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(10) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(10) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(10) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(4), priority: EventPriority(0), payload: JobArrived { job_id: 2 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(4), priority: EventPriority(0), payload: JobArrived { job_id: 2 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(10) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(10)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(10) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(11) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(11)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(11) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(11) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(11) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(11) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(11)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(11) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(12) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(12)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(12) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(12) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(12) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(12) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(12)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(12) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(13) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(13)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(13) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(13) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(13) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(13) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(13)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(13) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(14) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(14)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(14) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(14) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(14) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(14) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(14)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(14) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(15) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(15)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(15) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(20)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(15) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(15) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(5), priority: EventPriority(0), payload: JobProcessed { job_id: 2 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(5), priority: EventPriority(0), payload: JobProcessed { job_id: 2 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(15) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(15)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(15)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(15) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(15) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(15) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(6), priority: EventPriority(0), payload: JobArrived { job_id: 3 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(6), priority: EventPriority(0), payload: JobArrived { job_id: 3 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(15) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(15)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(15) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(16) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(16)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(16) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(16) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(16) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(16) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(16)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(16) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(17) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(17)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(17) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(17) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(17) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(17) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(17)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(17) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(18) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(18)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(18) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(18) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(18) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(18) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(18)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(18) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(19) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(19)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(19) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(19) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(19) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(19) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(19)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(19) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(20) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(20)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(20) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(25)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(20) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(20) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(7), priority: EventPriority(0), payload: JobProcessed { job_id: 3 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(7), priority: EventPriority(0), payload: JobProcessed { job_id: 3 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(20) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(20)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(20)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(20) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(20) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(20) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(8), priority: EventPriority(0), payload: JobArrived { job_id: 4 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(8), priority: EventPriority(0), payload: JobArrived { job_id: 4 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(20) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(20)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(20) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(21) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(21)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(21) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(21) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(21) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(21) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(21)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(21) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(22) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(22)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(22) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(22) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(22) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(22) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(22)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(22) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(23) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(23)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(23) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(23) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(23) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(23) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(23)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(23) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(24) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(24)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(24) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(24) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(24) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(24) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(24)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(24) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(25) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(25)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(25) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(30)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(25) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(25) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(9), priority: EventPriority(0), payload: JobProcessed { job_id: 4 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(9), priority: EventPriority(0), payload: JobProcessed { job_id: 4 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(25) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(25)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(25)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(25) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(25) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(25) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(10), priority: EventPriority(0), payload: JobArrived { job_id: 5 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(10), priority: EventPriority(0), payload: JobArrived { job_id: 5 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(25) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(25)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(25) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(26) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(26)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(26) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(26) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(26) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(26) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(26)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(26) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(27) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(27)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(27) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(27) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(27) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(27) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(27)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(27) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(28) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(28)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(28) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(28) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(28) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(28) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(28)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(28) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(29) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(29)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(29) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(29) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(29) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(29) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(29)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(29) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(30) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(30)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(30) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(35)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(30) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(30) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(11), priority: EventPriority(0), payload: JobProcessed { job_id: 5 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(11), priority: EventPriority(0), payload: JobProcessed { job_id: 5 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(30) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(30)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(30)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(30) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(30) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(30) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(12), priority: EventPriority(0), payload: JobArrived { job_id: 6 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(12), priority: EventPriority(0), payload: JobArrived { job_id: 6 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(30) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(30)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(30) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(31) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(31)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(31) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(31) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(31) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(31) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(31)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(31) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(32) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(32)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(32) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(32) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(32) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(32) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(32)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(32) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(33) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(33)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(33) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(33) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(33) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(33) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(33)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(33) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(34) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(34)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(34) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(34) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(34) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(34) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(34)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(34) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(35) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(35)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(35) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(40)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(35) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(35) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(13), priority: EventPriority(0), payload: JobProcessed { job_id: 6 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(13), priority: EventPriority(0), payload: JobProcessed { job_id: 6 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(35) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(35)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(35)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(35) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(35) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(35) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(14), priority: EventPriority(0), payload: JobArrived { job_id: 7 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(14), priority: EventPriority(0), payload: JobArrived { job_id: 7 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(35) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(35)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(35) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(36) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(36)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(36) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(36) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(36) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(36) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(36)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(36) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(37) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(37)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(37) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(37) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(37) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(37) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(37)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(37) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(38) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(38)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(38) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(38) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(38) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(38) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(38)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(38) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(39) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(39)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(39) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(39) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(39) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(39) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(39)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(39) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(40) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(40)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(40) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(45)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(40) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(40) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(15), priority: EventPriority(0), payload: JobProcessed { job_id: 7 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(15), priority: EventPriority(0), payload: JobProcessed { job_id: 7 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(40) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(40)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(40)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(40) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(40) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(40) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(16), priority: EventPriority(0), payload: JobArrived { job_id: 8 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(16), priority: EventPriority(0), payload: JobArrived { job_id: 8 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(40) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(40)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(40) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(41) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(41)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(41) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(41) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(41) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(41) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(41)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(41) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(42) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(42)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(42) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(42) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(42) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(42) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(42)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(42) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(43) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(43)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(43) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(43) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(43) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(43) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(43)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(43) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(44) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(44)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(44) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(44) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(44) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(44) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(44)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(44) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(45) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(45)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(45) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(50)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(45) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(45) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(17), priority: EventPriority(0), payload: JobProcessed { job_id: 8 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(17), priority: EventPriority(0), payload: JobProcessed { job_id: 8 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(45) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(45)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(45)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(45) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(45) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(45) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(18), priority: EventPriority(0), payload: JobArrived { job_id: 9 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(18), priority: EventPriority(0), payload: JobArrived { job_id: 9 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(45) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(45)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(45) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(46) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(46)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(46) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(46) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(46) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(46) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(46)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(46) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(47) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(47)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(47) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(47) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(47) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(47) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(47)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(47) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(48) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(48)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(48) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(48) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(48) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(48) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(48)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(48) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(49) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(49)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(49) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(49) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(49) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(49) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(49)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(49) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(50) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(50)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(50) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(55)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(50) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(50) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(19), priority: EventPriority(0), payload: JobProcessed { job_id: 9 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(19), priority: EventPriority(0), payload: JobProcessed { job_id: 9 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(50) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(50)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(50)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(50) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(50) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(50) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(20), priority: EventPriority(0), payload: JobArrived { job_id: 10 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(20), priority: EventPriority(0), payload: JobArrived { job_id: 10 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(50) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(50)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(50) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(51) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(51)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(51) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(51) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(51) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(51) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(51)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(51) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(52) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(52)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(52) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(52) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(52) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(52) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(52)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(52) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(53) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(53)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(53) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(53) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(53) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(53) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(53)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(53) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(54) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(54)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(54) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(54) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(54) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(54) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(54)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(54) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(55) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(55)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(55) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(60)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(55) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(55) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(21), priority: EventPriority(0), payload: JobProcessed { job_id: 10 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(21), priority: EventPriority(0), payload: JobProcessed { job_id: 10 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(55) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(55)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(55)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(55) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(55) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(55) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(22), priority: EventPriority(0), payload: JobArrived { job_id: 11 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(22), priority: EventPriority(0), payload: JobArrived { job_id: 11 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(55) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(55)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(55) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(56) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(56)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(56) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(56) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(56) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(56) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(56)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(56) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(57) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(57)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(57) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(57) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(57) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(57) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(57)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(57) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(58) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(58)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(58) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(58) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(58) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(58) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(58)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(58) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(59) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(59)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(59) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(59) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(59) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(59) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(59)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(59) finished (last μSteps: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
>>> Tick at SimTime(60) (skipped: 0 ticks)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 0 at SimTime(60)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Source Phase at SimTime(60) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Source firing | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Source finished (next: after Some(SimTime(65)) tick) | Source: SourceView { source_id: SourceId(0), name: "Job Generator" }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Source Phase finished at SimTime(60) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
> Event Phase at SimTime(60) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
+ Event firing | Event: Event { event_id: EventId(23), priority: EventPriority(0), payload: JobProcessed { job_id: 11 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
- Event finished | Event: Event { event_id: EventId(23), priority: EventPriority(0), payload: JobProcessed { job_id: 11 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Event Phase finished at SimTime(60) (μStep: 0)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 0 at SimTime(60)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
[μStep: 1 at SimTime(60)] START
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Source Phase at SimTime(60) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
< Source Phase finished at SimTime(60) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
> Event Phase at SimTime(60) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
+ Event firing | Event: Event { event_id: EventId(24), priority: EventPriority(0), payload: JobArrived { job_id: 12 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: false }
- Event finished | Event: Event { event_id: EventId(24), priority: EventPriority(0), payload: JobArrived { job_id: 12 } }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
< Event Phase finished at SimTime(60) (μStep: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
[μStep: 1 at SimTime(60)] END
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
<<< Tick at SimTime(60) finished (last μSteps: 1)
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
model summary: ServerModel { name: "Sample Server", queue_len: 0, busy: true }
Simulation Result: Ok(SimulationOutput { time: SimTime(60), model: ServerModel { name: "Sample Server", queue: [], is_busy: true } })
Discrete Event Systems and Features of this Crate
A Discrete Event System is a system where events fire at discrete timings as time progresses, and these events are processed.
Unlike process-oriented simulators such as SimPy in Python, des-sim is a *
classic time-driven simulator*.
In process-oriented systems, a flow like "Process A -> Wait N seconds -> Process B" is described within a single
process (e.g., a generator). In contrast, this crate adopts a method where, as time advances, events that should be
processed at that time are handled, such as "Execute Process A and schedule an event for Process B at N seconds later."
Although the writing style differs, both process-oriented and time-driven approaches can achieve equivalent simulation
functionalities.
Module Structure
This crate is broadly composed of the following three modules:
1. modeling Module
This module is primarily used by users to model the simulation target.
event/model: The basic units of simulation. A minimal simulation can be built using just these.source: Used to schedule events periodically.hook: Used to collect logs and states during simulation execution.sampler: Used to sample random data, such as determining the next event time randomly.
These elements are generally registered with the Engine in the execution module before the simulation starts.
2. execution Module
Provides the execution environment for simulations. It consists of the core Engine and the Runner trait that drives
it.
StandardRunner: A standard runner that skips idle time and executes simulations quickly.RealtimeRunner: A runner that executes simulations in sync with real-world time progression.AsyncRunner: A runner that can process events asynchronously.
*If Model, Source, and Hook are implemented deterministically (results do not change with each execution),
simulations using StandardRunner and RealtimeRunner will also be deterministic, allowing for complete
reproducibility of a simulation run. It is also possible to implement your own Runner trait.
3. context Module
Provides the context for requesting operations from the execution environment, such as scheduling events.
Since Context is passed as an argument within the modeling module, you can operate the environment simply by calling
the provided methods.
Contribution
We aim to continuously improve this crate to make it more user-friendly. If you have any feedback, bug reports, or feature requests, please feel free to open an Issue or Pull Request on GitHub!
License
This project is licensed under either of