1 package nl.tudelft.simulation.examples.dsol.terminal;
2
3 import java.rmi.RemoteException;
4
5 import javax.naming.NamingException;
6
7 import org.djutils.event.Event;
8 import org.djutils.event.EventListener;
9
10 import nl.tudelft.simulation.dsol.SimRuntimeException;
11 import nl.tudelft.simulation.dsol.experiment.Replication;
12 import nl.tudelft.simulation.dsol.experiment.SingleReplication;
13 import nl.tudelft.simulation.dsol.model.inputparameters.InputParameterException;
14 import nl.tudelft.simulation.dsol.model.inputparameters.InputParameterInteger;
15 import nl.tudelft.simulation.dsol.model.inputparameters.InputParameterMap;
16 import nl.tudelft.simulation.dsol.simulators.DevsSimulator;
17 import nl.tudelft.simulation.jstats.streams.MersenneTwister;
18
19
20
21
22
23
24
25
26
27
28
29
30 public final class ConsoleRunnerTerminal implements EventListener
31 {
32
33 private static final long serialVersionUID = 20220110L;
34
35
36
37
38
39
40
41
42 private ConsoleRunnerTerminal() throws SimRuntimeException, RemoteException, NamingException, InputParameterException
43 {
44 long seed = 127;
45 int rep = 1;
46 int numQC = 5;
47 int numAGV = 42;
48 double runtime = 40 * 60;
49 DevsSimulator<Double> simulator = new DevsSimulator<Double>("ConsoleRunnerTerminal");
50 Terminal model = new Terminal(simulator, rep);
51 Replication<Double> replication = new SingleReplication<Double>("rep1", 0.0, 0.0, runtime);
52 model.getStreams().put("default", new MersenneTwister(seed++));
53 InputParameterMap parameters = model.getInputParameterMap();
54 ((InputParameterInteger) parameters.get("numQC")).setIntValue(numQC);
55 ((InputParameterInteger) parameters.get("numAGV")).setIntValue(numAGV);
56 simulator.initialize(model, replication);
57 simulator.scheduleEventAbs(runtime - 0.00001, this, "terminate", new Object[] {simulator, numQC, numAGV, rep});
58 model.addListener(this, Terminal.READY_EVENT);
59 simulator.start();
60 }
61
62
63
64
65
66
67
68
69
70 public synchronized void terminate(final DevsSimulator<Double> simulator, final int numQC, final int numAGV,
71 final int rep) throws SimRuntimeException, RemoteException
72 {
73 simulator.stop();
74 System.out.println(numQC + "\t" + numAGV + "\t" + rep + "\tNaN\tNaN");
75 System.exit(0);
76 }
77
78
79 @Override
80 public synchronized void notify(final Event event) throws RemoteException
81 {
82 if (event.getType().equals(Terminal.READY_EVENT))
83 {
84 Terminal.Output output = (Terminal.Output) event.getContent();
85 System.out.println(output.getNumQC() + "\t" + output.getNumAGV() + "\t" + output.getRep() + "\t"
86 + output.getDelayHours() + "\t" + output.getCosts());
87 System.exit(0);
88 }
89 }
90
91
92
93
94
95
96
97
98 public static void main(final String[] args)
99 throws SimRuntimeException, RemoteException, NamingException, InputParameterException
100 {
101 new ConsoleRunnerTerminal();
102 }
103 }