Basics of O2DES.Net
Note: These introductory pages assume foundational knowledge of Object-Oriented Programming. Additionally, a working knowledge of C# programming language is preferred.
Note 2: If you are unfamiliar with the Discrete-Event Simulation paradigm, refer to the brief introduction.
Below is the simplified class diagram for the O2DES simulator. Only the relevant public and protected parameters and classes are shown.
Scenario
The class Scenario
encapsulates the static properties of the system bring simulated. These entities are static as they are simply a description of the entities and do not change in state during the simulation. These static properties include entities such as path, road, rack, SKU, etc. Essentially, this class should describe the entities present in the system.
The template for the Scenario
class is as such:
public class Scenario : O2DESNet.Scenario
{
// encapsulate all static properties here
// ...
}
Status
The class Status
, as the name suggests, tracks the respective status of the entities in the system. These entities are dynamic in nature as their respective states can change as the simulation progresses. Examples of such dynamic entities are load, server, etc. Consequently, the output statistics desired from the simulation should be inferred from this class. Click here to learn about the Status API.
The template for the Status
class is as such:
public class Status : O2DESNet.Status<Scenario>
{
// encapsulate all dynamic properties here
// ...
public Status(Scenario scenario, int seed = 0) : base(scenario, seed)
{
// initialize all the dynamic elements
// ...
}
// implement methods that help to update the Status
// ...
}
Event
The class Event
is an abstract class which can be scheduled to change the status of the entities in the simulation, according to the discrete-event simulation paradigm. Each event in the simulation should be encapsulated as a new sub-class derived from this abstract class. Click here to learn about the Event API.
The template for the Event
class is as such:
public class MyEvent : O2DESNet.Event<Scenario, Status>
{
public override void Invoke()
{
// implementation of this Event
// ...
}
}
The Event
class is the only class that has to be created multiple times, one for each event. The template is available in Project > Add New Item...
as O2DESNet.Event
. Name your new Event
class and place the new .cs file into the Event folder in the solution.
Simulator
The class Simulator
contains the future event list and the simulation clock. The mechanism to drive the simulation forward is also contained in this class. Click here to learn about the Simulator API.
The template for the Simulator
class is as such:
public class Simulator : O2DESNet.Simulator<Scenario, Status>
{
public Simulator(Status status) : base(status)
{
// specify initial events here
// example of scheduling a new event
// Schedule(new MyEvent(), TimeSpan.FromMinutes(DefaultRS.NextDouble()));
// example of executing a new event
// Execute(new MyEvent());
}
}