Module functions

Source
Expand description

This module will hold all the main functions that should be called. The specific order is recommended but some functions depend on the build up or tear down of others.

The following order order of operations is recommended:

§Example

use sim_rust::Agent;
use sim_rust::functions::*;

// method 1 and 2 have the exact same outcome

// method 1  
let mut env_1 = generate_default_env::<ExampleAgent1>(10).unwrap();
tick(&mut env_1).unwrap(); //(or tick_collect)
collect(env_1);


// method 2
let mut env_2 = generate_default_tick_collect::<ExampleAgent1>(10, 1, 1).unwrap();


// method 3
let mut env_3 = generate_default_env::<ExampleAgent1>(10).unwrap();
// Any type that implements the Agent trait can be added to the environment.
let example_agent_2 = ExampleAgent2::generate().unwrap();
env_3.add_agent(example_agent_2).unwrap();
// even mulitple instances at once.
let example_agents: Vec<Box<dyn Agent>> = vec![
    ExampleAgent2::generate().unwrap(),
    ExampleAgent2::generate().unwrap(),
    ExampleAgent2::generate().unwrap(),
];
env_3.add_agents(example_agents).unwrap();
tick(&mut env_3).unwrap();
collect(env_3);

  
// This is just a very simple implementation of an agent.
struct ExampleAgent1 {
    age: u8,
}

struct ExampleAgent2 {
    age: u8,
}


impl Agent for ExampleAgent1 {
    fn generate() -> Result<Box<Self> ,&'static str> {
        let agent = Box::new(Self {age: 1});
        Ok(agent)
    }

    fn tick(&mut self) -> Result<(), &'static str> {
        self.age += 1;
        Ok(())
    }

    fn collect(&self)  -> Result<(), &'static str> {
        Ok(())
    }
}

// This is a direct copy of the implementation of ExampleAgent1
impl Agent for ExampleAgent2 {
    fn generate() -> Result<Box<Self> ,&'static str> {
        let agent = Box::new(Self {age: 1});
        Ok(agent)
    }

    fn tick(&mut self) -> Result<(), &'static str> {
        self.age += 1;
        Ok(())
    }

    fn collect(&self)  -> Result<(), &'static str> {
        Ok(())
    }
}

Functions§

collect
Applies a collect to a passed in environment. This takes both the default environment provided by this library and custom defined environments created by the user.
generate_default_env
Generates a standard environment with a specified agent. This environment is the standard implementation and does not provide any custom behavior.
generate_default_tick_collect
Generates an environment and runs it the simulation in multiple processes. This also runs the generated simulation with the given parameters.
generate_env
Generates a custom environment specified agent. This environment is the standard implementation and does not provide any custom behavior.
generate_tick_collect
Generates a custom environment and runs it the simulation in multiple processes. This also runs the generated simulation with the given parameters.
tick
Applies a tick to a passed in environment. This takes both the default environment provided by this library and custom defined environments created by the user.
tick_collect
Applies a tick and a collent to a passed in environment. This takes both the default environment provided by this library and custom defined environments created by the user. This function can be used when the user requies data from a certain time in a running simulation.

Type Aliases§

EnvResult
VoidResult