-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAmbulanceScreenDisplay.java
125 lines (97 loc) · 3.91 KB
/
AmbulanceScreenDisplay.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* RDDL: A simple text display for the SysAdmin domain state.
*
* @author Scott Sanner ([email protected])
* @version 10/10/10
*
**/
package rddl.viz;
import java.util.ArrayList;
import rddl.EvalException;
import rddl.State;
import rddl.RDDL.LCONST;
import rddl.RDDL.PVARIABLE_DEF;
import rddl.RDDL.PVAR_NAME;
import rddl.RDDL.TYPE_NAME;
public class AmbulanceScreenDisplay extends StateViz {
public int _numCols = 3;
public AmbulanceScreenDisplay() {
_bSuppressNonFluents = true;
}
public AmbulanceScreenDisplay(boolean suppress_nonfluents) {
_bSuppressNonFluents = suppress_nonfluents;
}
public boolean _bSuppressNonFluents = false;
public void display(State s, int time) {
try {
System.out.println("TIME = " + time + ": " + getStateDescription(s));
} catch (EvalException e) {
System.out.println("\n\nError during visualization:\n" + e);
e.printStackTrace();
System.exit(1);
}
}
//////////////////////////////////////////////////////////////////////
public String getStateDescription(State s) throws EvalException {
StringBuilder sb = new StringBuilder();
TYPE_NAME ambulance = new TYPE_NAME("ambulance");
ArrayList<LCONST> ambulances = s._hmObject2Consts.get(ambulance);
TYPE_NAME node = new TYPE_NAME("node");
ArrayList<LCONST> nodes = s._hmObject2Consts.get(node);
PVAR_NAME ambulanceAt = new PVAR_NAME("ambulance-at-node");
//PVARIABLE_DEF location = s._hmPVariables.get(ambulanceAt);
PVAR_NAME personWaiting = new PVAR_NAME("person-waiting-service");
//PVARIABLE_DEF calls = s._hmPVariables.get(personWaiting);
PVAR_NAME inAmbulance = new PVAR_NAME("person-in-ambulance");
//PVARIABLE_DEF loaded = s._hmPVariables.get(inAmbulance);
PVAR_NAME hospital = new PVAR_NAME("HOSPITAL");
//PVARIABLE_DEF isHospital = s._hmPVariables.get(hospital);
// Set up an arity-2 parameter list for ambulance, node
ArrayList<LCONST> paramsAN = new ArrayList<LCONST>(2);
paramsAN.add(null);
paramsAN.add(null);
// Set up an arity-1 parameter list for ambulance
ArrayList<LCONST> paramsA = new ArrayList<LCONST>(1);
paramsA.add(null);
// Set up an arity-1 parameter list for node
ArrayList<LCONST> paramsN = new ArrayList<LCONST>(1);
paramsN.add(null);
sb.append("\n\n");
int iter = 0;
// Dipict the status of each node
for (LCONST n : nodes) {
paramsN.set(0, n);
if((Boolean)s.getPVariableAssign(hospital, paramsN)) {
sb.append("H");
}
else if((Boolean)s.getPVariableAssign(personWaiting, paramsN)){
sb.append("C");
}
else{
sb.append(".");
}
for (LCONST a : ambulances) {
paramsA.set(0,a);
paramsAN.set(0,a);
paramsAN.set(1,n);
if(((Boolean)s.getPVariableAssign(ambulanceAt, paramsAN)) && ((Boolean)s.getPVariableAssign(inAmbulance, paramsA))){
sb.append("F");
}
else if((Boolean)s.getPVariableAssign(ambulanceAt, paramsAN)){
sb.append("E");
}
else{
sb.append(" ");
}
}
iter++;
if(iter%_numCols == 0) {
sb.append("\n\n");
}
else {
sb.append(" ");
}
}
return sb.toString();
}
}