1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.simulation.assignments.random;
17
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.Map.Entry;
23
24 import org.jamesii.core.math.random.generators.IRandom;
25 import org.jamesii.core.util.misc.Pair;
26
27 import p3j.misc.errors.GeneratorError;
28 import p3j.misc.math.RandomNumberChecks;
29 import p3j.pppm.IProjectionModel;
30 import p3j.pppm.parameters.ParameterAssignment;
31 import p3j.pppm.parameters.ParameterAssignmentSet;
32 import p3j.pppm.parameters.ParameterInstance;
33 import p3j.pppm.sets.Set;
34 import p3j.pppm.sets.SetType;
35 import p3j.simulation.assignments.plugintype.IParamAssignmentGenerator;
36
37
38
39
40
41
42
43
44
45
46 public class RandomParamAssignmentGenerator implements
47 IParamAssignmentGenerator {
48
49
50 private IProjectionModel projection;
51
52 @Override
53 public void init(IProjectionModel proj) {
54 projection = proj;
55 }
56
57 @Override
58 public Pair<Map<ParameterInstance, ParameterAssignment>, List<GeneratorError>> chooseParamAssignments(
59 IRandom random) {
60
61 Map<ParameterInstance, ParameterAssignment> assignments = new HashMap<ParameterInstance, ParameterAssignment>();
62 RandomNumberChecks rnc = RandomNumberChecks.getInstance();
63 List<GeneratorError> errors = new ArrayList<GeneratorError>();
64
65
66 List<SetType> setTypes = projection.getAllSetTypes();
67
68
69 List<Set> sets = new ArrayList<Set>();
70 for (SetType setType : setTypes) {
71 sets.add(chooseSetRandomly(setType, rnc, random, errors));
72 }
73
74
75 for (Set set : sets) {
76 assignments.putAll(chooseParameterAssignmentsRandomly(set, rnc, random,
77 errors));
78 }
79
80 return new Pair<Map<ParameterInstance, ParameterAssignment>, List<GeneratorError>>(
81 assignments, errors);
82 }
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 public Set chooseSetRandomly(SetType setType, RandomNumberChecks rnc,
99 IRandom rand, List<GeneratorError> errorLog) {
100 rnc.checkProbabilitySetting("Sets of Settype '" + setType.getName() + "'",
101 setType.getSets(), errorLog);
102 return rnc.chooseNormalizedRandomObject(setType.getSets(), rand);
103 }
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 public Map<ParameterInstance, ParameterAssignment> chooseParameterAssignmentsRandomly(
121 Set set, RandomNumberChecks rnc, IRandom rand,
122 List<GeneratorError> errorLog) {
123 Map<ParameterInstance, ParameterAssignment> result = new HashMap<ParameterInstance, ParameterAssignment>();
124 Map<ParameterInstance, ParameterAssignmentSet> setData = set.getSetData();
125 for (Entry<ParameterInstance, ParameterAssignmentSet> instEntry : setData
126 .entrySet()) {
127 ParameterInstance instance = instEntry.getKey();
128 ParameterAssignmentSet assignments = instEntry.getValue();
129 rnc.checkProbabilitySetting("matrices of set '" + set.getName()
130 + "' for parameter instance '" + instance + "'",
131 assignments.getAssignments(), errorLog);
132 result.put(instance,
133 rnc.chooseNormalizedRandomObject(assignments.getAssignments(), rand));
134 }
135 return result;
136 }
137
138
139
140
141
142
143
144
145
146 @Override
147 public long assignmentsLeft() {
148 return Long.MAX_VALUE;
149 }
150
151 }