Usage

Import required components

To use OpenCLSim in a project you have to import the following three components:

# Import openclsim for the logistical components
import openclsim.model as model
import openclsim.core as core

# Import simpy for the simulation environment
import simpy

Using Mixins and Metaclasses

The Open Complex Logistics Simulation package is developed with the goal of reusable and generic components in mind. A new class can be instatiated by combining mixins from the openclsim.core, such as presented below. The following lines of code demonstrate how a containervessel can be defined:

# Define the core components
# A generic class for an object that can move and transport material
ContainerVessel = type('ContainerVessel',
                    (core.Identifiable,             # Give it a name and unique UUID
                     core.Log,                      # Allow logging of all discrete events
                     core.ContainerDependentMovable,# It can transport an amount
                     core.HasResource,              # Add information on serving equipment
                     ),
                    {})

# The next step is to define all the required parameters for the defined metaclass
# For more realistic simulation you might want to have speed dependent on the filling degree
v_full  = 8     # meters per second
v_empty = 5     # meters per second

def variable_speed(v_empty, v_full):
    return lambda x: x * (v_full - v_empty) + v_empty

# Other variables
data_vessel = {
           "env": simpy.Environment(),                   # The simpy environment
           "name": "Vessel 01",                          # Name
           "geometry": shapely.geometry.Point(0, 0),     # The lat, lon coordinates
           "capacity": 5_000,                            # Capacity of the vessel
           "compute_v": variable_speed(v_empty, v_full), # Variable speed
           }

# Create an object based on the metaclass and vessel data
vessel_01 = ContainerVessel(**data_vessel)

For more elaboration and examples please check the examples documentation. In-depth Jupyter Notebooks can also be used.