This method initialises a trajectory object, which comprises a chain of activities that can be attached to an arrivals (intakes) generator for the purpose of simulation. See below for a complete list of available activities by category.
The AXCEL.DES.TRAJECTORY function syntax has the following arguments:
trajectory Required. If you enter a single cell or a text input, this function looks for the trajectory name. If exist with appropriate access, the function send the details back to your spreadsheet and displays the trajectory as a flow chart in your task pane. Otherwise, the function builds the trajectory based on input. The structure of the trajectory is as follws:
|First step of trajectory||specification 1||specification 2||…||specification n|
|Second step of trajectory||specification 1||specification 2||…||specification n|
|Last step of trajectory||specification 1||specification 1||…||specification n|
There are several types of trajectories explained below:
seize / release / release_all :
Activities for seizing / releasing a resource, by name. Here is the format:
resource is the name of the resource seized / released such as “Doctor 1” or “SMT Machine”.
amount is the amount to seize
continue is a boolean (TRUE / FALSE) to indicate whether the subtrajectory defined in reject, if it is defined, should continue to the next activity in the main trajectory.
reject is an optional trajectory object which will be followed if the arrival is rejected (dropped). Rejection happens when a resource is at full capacity and there is no room in the queue (either because there is a finite
queue_size and it is full, or because
queue_size=0 and thus it is disabled).
Activity for inserting delays and execute user-defined tasks. Here is the format:
|timeout||timeout distribution||argument 1||argument 2||argument …|
Here is the list of distributions:
|Distribution||input name||argument 1||argument 2||argument 3||argument …|
|classic beta pert||betapert||min||likeliest||max|
|custom inputs||sample||obs 1||obs 2||obs 3||…|
Activity for going backwards to a previous point in the trajectory. Useful to implement loops.
steps is the number of activities to roll back and times is the number of repetitions until an arrival may continue.
Concatenate any number of trajectories in the specified order. Here is the format:
|join||trajectory 1||trajectory 2||trajectory …||trajectory n|
All trajectories should be in your storage already deployed or shared by other users.
activate / deactivate:
Activities for activating or deactivating the generation of arrivals by name. Here is the format:
|activate||arrival name in generator|
|deactivate||arrival name in generator|
send / trap / untrap wait:
These activities enable asynchronous programming.
send broadcasts a signal. Arrivals can subscribe to signals and (optionally) assign a handler with
trap. Note that, while inside a batch, all the signals subscribed before entering the batch are ignored. Upon a signal reception, the arrival stops the current activity and executes the handler (if provided). Then, the execution returns to the activity following the point of the interruption.
untrap can be used to unsubscribe from signals.
wait blocks until a signal is received. Here is the format of each:
|trap||signal name||handler trajectory||interruptible (TRUE or FALSE)|
This process encapsulates the activity of
n workers running parallel sub-trajectories. You can define wait behaviour. If
TRUE, the arrival waits until all parallel sub-trajectories are finished; if
FALSE, the arrival continues as soon as the first parallel task ends. The input trajectories must be in user’s storage with appropriate access. Here is the format:
|parallel||wait (TRUE / FALSE)||trajectory 1||trajectory 2||…||trajectory n|
set_attribue / set_global
Activity for modifying attributes. Attributes defined with
set_attribute are per arrival, meaning that each arrival has its own set of attributes, not visible by any other one. On the other hand, attributes defined with
set_global are shared by all the arrivals in the simulation. Here is the format:
|set_attribute||key||value||operation ( +, *, or empty)||initial value|
|set_global||key||value||operation ( +, *, or empty)||initial value|
get_attribute / get_global
Logs the key values set by set_global or set_attribute. Here is the format:
logs a message. Here isthe format:
Activities for leaving with some probability. Here is the format:
|leave||probability (0 to 1)||out trajectory or empty|
Arrivals the original trajectory randomly with defined probability. After leaving, they follow out trajectory or leave permanently if no trajectory is provided.
Activity for setting a drop-out trajectory for unfinished arrivals, i.e., those dropped from a resource (due to preemption, resource shrinkage or a rejected seize) or those that leave a trajectory. Here is the format:
|handle_unfinished||unfinished trajectory or empty|
trajectory must be in user’s storage with appropriate access.
Reneging after provided waiting time.
|renege_in||time||out trajectory or empty|
Arrivals leave the trajectory if they are not served after waiting time. After leaving, they follow out trajectory or leave permanently, if no trajectory is provided.
Activity for defining a fork with
N alternative sub-trajectories based on key value. Here is the format:
|branch||key||trajectory 1||…||trajectory n|| continue 1 |
(TRUE / FALSE)
|…|| continue n|
(TRUE / FALSE)
All trajectories must be in user’s storage. Continue 1,2 .. indicates whether the arrivals continue by coming back to the original trajectory (TRUE) or not (FALSE).
batch / separate
Activities for collecting a number of arrivals before they can continue processing . Here is the format:
n number of arrivals are in the batch. timeout sets an optional timer which triggers batches every
timeout time units even if the batch size has not been fulfilled. name is the batch name.
For splitting a previously established batch you need to run separate as follows:
Define machine specifications in a production line. Each production line is structured in a block defined as follows:
|machines||machine 1||machine 2||…||machine n|
|amount||amount 1||amount 2||…||amount n|
|passthrough||rate 1 ( 0 – 1)||rate 2 ( 0 – 1)||…||rate n ( 0 – 1)|
|rejects||trajectory 1||trajectory n||…||trajectory n|
|time||dist. 1||arg 1||arg2||dist. 2||arg 1||arg 2||…||dist. n||arg 1||arg 2|
Please note that for machine blocks all 5 elements should be defined in the order showed above. Otherwise, the system shows error.
reject trajectories show the path when a part if rejected. If you leave it empty, the part is identified with permanent leave and shows “Unfinished” in simulations. Dist1,2,… and corresponding arguments follow the same convention defined in the timeout section.
deployment Optional. You can define a deployment name to deploy your model. After deployment, you can use the deployed function in AXCEL.DES.SIMULATION function. Please note that the deployment name is case sensitive and should include alphabets, numbers, and non-repeating underline. You cannot use underline at the beginning or end of the filename. For instance “abc-123” or “a-b-c-123” are allowed but “abc–123”, “abc-123-“, “-abc-123” or “abc-$123” are not allowed. Depending on your subscription, you can view and restrict access to the deployed model through Axcel web application.
when you run the function, it validates the structure first. If all valid, the system shows the details of the trajectory in the console and a flow chart showing the steps in the trajectory. Here is an example: