Simulation

Struct Simulation 

Source
pub struct Simulation { /* private fields */ }
Expand description

A Simulation struct is responsible to hold all the state for a simulation and coordinates the actions and interactions of the agents.

A Simulation has its own concept of time, which is implemented as discrete ticks of the u64 field time. Every tick is modeled as an instantaneous point in time at which interactions can occur. The Simulation engine uses a concept of Messages to communicate between agents. Agents can receive messages and send messages to other Agents.

Implementations§

Source§

impl Simulation

Source

pub fn new(parameters: SimulationParameters) -> Self

Source

pub fn consumed_for_agent(&self, name: &str) -> Option<&[Message]>

Returns the consumed messages for a given Agent during the Simulation.

Source

pub fn find_by_name(&self, name: &str) -> Option<&SimulationAgent>

Returns a SimulationAgent by name.

Source

pub fn find_by_name_mut(&mut self, name: &str) -> Option<&mut SimulationAgent>

Returns a SimulationAgent by name.

Source

pub fn produced_for_agent(&self, name: &str) -> Option<&[Message]>

Returns the produced messages for a given Agent during the Simulation.

Source

pub fn queue_depth_metrics(&self, name: &str) -> Option<&[usize]>

Returns the queue depth timeseries for a given Agent during the Simulation.

Source

pub fn asleep_cycle_count(&self, name: &str) -> Option<DiscreteTime>

Returns the asleep cycle count for a given Agent during the Simulation.

Source

pub fn run(&mut self)

Runs the simulation. This should only be called after adding all the beginning state.

Source

pub fn calc_avg_wait_statistics(&self) -> HashMap<String, f64>

A helper to calculate the average waiting time to process items. Note: This function will likely go away; it is an artifact of prototyping.

Source

pub fn calc_queue_len_statistics(&self) -> HashMap<String, usize>

Calculates the statistics of queue lengths. Mostly useful for checking which agents still have queues of work after halting.

Source

pub fn calc_consumed_len_statistics(&self) -> HashMap<String, usize>

Calculates the length of the consumed messages for each Agent.

Source

pub fn calc_produced_len_statistics(&self) -> HashMap<String, usize>

Calculates the length of the produced messages for each Agent.

Source

pub fn find_agent<P>(&self, predicate: P) -> Option<&SimulationAgent>
where P: FnMut(&&SimulationAgent) -> bool,

Searches for an agent in the Simulation matching the given predicate.

Source

pub fn all_agents<P>(&self, predicate: P) -> bool
where P: FnMut(&SimulationAgent) -> bool,

Checks whether all agents match the given predicate.

Source

pub fn agents(&self) -> &[SimulationAgent]

Returns a slice of the Agents in the Simulation.

Source

pub const fn time(&self) -> DiscreteTime

Returns the current DiscreteTime tick for the Simulation.

Trait Implementations§

Source§

impl Clone for Simulation

Source§

fn clone(&self) -> Simulation

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Simulation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V