Last updated on 16th July 2024
The toolkit exposes a new Facility
agent class that you are free to extend. This class is the main agent class that can be used to represent all different kinds of facilities.
A sample model has been provided in the Supply Chain Toolkit Overview that gives a specific usage example for reference.
The Facility
agent contains abstract functions in the super class that must be implemented in your extended class.
When you create a new Facility
agent you will need to implement the following methods.
@Override
protected void processOutboundLoadingBay() {
}
@Override
protected void departTransport() {
}
@Override
protected void receiveInboundTransport(){
}
@Override
protected void processInboundLoadingBay(){
}
These methods provide the basic functionality required to handle the sending and receiving of TransportMessage
messages carrying units / products between facility agents. They must be called from an Action
and can be ignored if other mechanisms for departing transport are desired.
The receiveInboundTransport()
method also has a function in the super class for receiving TransportMessage
messages automatically.
@Override
protected void receiveInboundTransport(){
super.receiveInboundTransport();
}
When calling departTransport()
, you can add your custom logic for determining how you will depart trucks and by calling the receiveInboundTransport()
function in the super class immediately afterwards in the run sequence, the TransportMessage
messages will be placed in the LoadingBay.TransportQueue
.
An example from the sample model use case can be found below:
public static Action<FacilityTypeA> departOutboundTransport =
Action.create(FacilityTypeA.class, FacilityTypeA::departTransport);
As many LoadingBay
classes as desired can be added to your Facility
classes. They can be either initialized during the setup()
phase, it could be done during an firstStep()
run sequence, or new ones could be added during the simulation.
More on the LoadingBay
class can be found in the Loading Bay docs.
A common challenge when simulating supply chains with massive throughput is the simulation time required for dealing with processing and filtering through millions, even 100s of millions of units travelling through facilities.
One way to handle this and speed up these operations is by using ParallelStreams
, ConcurrentList
, and ConcurrentHashmap
.
By using these structure it's possible to parallelize the operations across massive lists and maps while not running in to concurrent modification exceptions.
More information can be found in the java.util.Concurrent
& java.util.Collection
libraries linked below: