DES (Discrete Event Simulation)
The DES solver is a discrete-event simulator implemented using the SSJ (Stochastic Simulation in Java) library in the JAR backend and SimPy in the Python implementation. It has similar support as JMT in terms of models, but it is lighter and thus tends to run faster. A wrapper to call DES is available both in MATLAB and Python.
| Method | Algorithm | Reference |
|---|---|---|
default | Discrete-event simulation (SSJ in JAR, SimPy in Python) | — |
Example
This example demonstrates solving a simple M/M/1 queue using the DES solver with discrete-event simulation. DES is primarily implemented in the JAR backend using the SSJ (Stochastic Simulation in Java) library.
% Create a simple M/M/1 queue
model = Network('M/M/1 Example');
source = Source(model, 'Source');
queue = Queue(model, 'Queue1', SchedStrategy.FCFS);
sink = Sink(model, 'Sink');
jobclass = OpenClass(model, 'Class1');
source.setArrival(jobclass, Exp(0.9));
queue.setService(jobclass, Exp(1.0));
model.link(Network.serialRouting(source, queue, sink));
% Solve with DES (via JAR backend)
solver = DES(model, 'samples', 5000, 'seed', 12345);
% Display average performance metrics
DES(model).avgTable()
Output:
DES analysis [method: default, lang: matlab] completed.
ans =
2×8 table
Station JobClass QLen Util RespT ResidT ArvR Tput
_______ ________ ______ _______ ______ ______ _______ _______
Source Class1 0 0 0 0 0 0.89856
Queue1 Class1 8.2105 0.88742 9.1954 9.1954 0.89856 0.89315
import jline.lang.*;
import jline.lang.constant.SchedStrategy;
import jline.lang.nodes.*;
import jline.lang.processes.Exp;
import jline.solvers.NetworkAvgTable;
import jline.solvers.des.DES;
public class DESExample {
public static void main(String[] args) {
// Create a simple M/M/1 queue
Network model = new Network("M/M/1 Example");
Source source = new Source(model, "Source");
Queue queue = new Queue(model, "Queue1", SchedStrategy.FCFS);
Sink sink = new Sink(model, "Sink");
OpenClass jobclass = new OpenClass(model, "Class1");
source.setArrival(jobclass, Exp.fitRate(0.9));
queue.setService(jobclass, Exp.fitRate(1.0));
model.link(Network.serialRouting(source, queue, sink));
// Solve with DES (Discrete Event Simulation)
DES solver = new DES(model);
solver.options.samples = 5000;
solver.options.seed = 12345;
// Display average performance metrics
NetworkAvgTable avgTable = solver.avgTable;
System.out.println(avgTable);
}
}
Output:
DES analysis [method: default, lang: java] completed. Station JobClass QLen Util RespT ResidT ArvR Tput Source Class1 0.0 0.0 0.0 0.0 0.0 0.89856 Queue1 Class1 8.2105 0.88742 9.1954 9.1954 0.89856 0.89315
from line_solver import *
# Create a simple M/M/1 queue
model = Network('M/M/1 Example')
source = Source(model, 'Source')
queue = Queue(model, 'Queue1', SchedStrategy.FCFS)
sink = Sink(model, 'Sink')
jobclass = OpenClass(model, 'Class1')
source.setArrival(jobclass, Exp(0.9))
queue.setService(jobclass, Exp(1.0))
model.link(Network.serialRouting(source, queue, sink))
# Solve with DES (via JAR backend)
solver = DES(model, samples=5000, seed=12345)
# Display average performance metrics
print(solver.avg_table)
Output:
DES analysis [method: default, lang: python] completed. Station JobClass QLen Util RespT ResidT ArvR Tput 0 Source Class1 0.0 0.0 0.0 0.0 0.0 0.89856 1 Queue1 Class1 8.2105 0.88742 9.1954 9.1954 0.89856 0.89315