aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-04-07 13:46:36 +0200
committerLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-04-07 13:46:36 +0200
commit3f9b1c92cc35fa4ed9672a2b8601f4c22af24921 (patch)
tree927c41492ff3b50b3d998a4fbe87861187d85912 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
parentAdd reliability probability and mtff objectives (diff)
downloadVIATRA-Generator-3f9b1c92cc35fa4ed9672a2b8601f4c22af24921.tar.gz
VIATRA-Generator-3f9b1c92cc35fa4ed9672a2b8601f4c22af24921.tar.zst
VIATRA-Generator-3f9b1c92cc35fa4ed9672a2b8601f4c22af24921.zip
Infrastructure for objective functions
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java57
1 files changed, 24 insertions, 33 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
index 60f46033..1234d54b 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
@@ -75,7 +75,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
75 // Running 75 // Running
76 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore; 76 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore;
77 private SolutionStore solutionStore; 77 private SolutionStore solutionStore;
78 private SolutionStoreWithCopy solutionStoreWithCopy;
79 private SolutionStoreWithDiversityDescriptor solutionStoreWithDiversityDescriptor; 78 private SolutionStoreWithDiversityDescriptor solutionStoreWithDiversityDescriptor;
80 private volatile boolean isInterrupted = false; 79 private volatile boolean isInterrupted = false;
81 private ModelResult modelResultByInternalSolver = null; 80 private ModelResult modelResultByInternalSolver = null;
@@ -97,9 +96,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
97 this.method = method; 96 this.method = method;
98 } 97 }
99 98
100 public SolutionStoreWithCopy getSolutionStoreWithCopy() {
101 return solutionStoreWithCopy;
102 }
103 public SolutionStoreWithDiversityDescriptor getSolutionStoreWithDiversityDescriptor() { 99 public SolutionStoreWithDiversityDescriptor getSolutionStoreWithDiversityDescriptor() {
104 return solutionStoreWithDiversityDescriptor; 100 return solutionStoreWithDiversityDescriptor;
105 } 101 }
@@ -121,7 +117,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
121 matchers.add(matcher); 117 matchers.add(matcher);
122 } 118 }
123 119
124 this.solutionStoreWithCopy = new SolutionStoreWithCopy();
125 this.solutionStoreWithDiversityDescriptor = new SolutionStoreWithDiversityDescriptor(configuration.diversityRequirement); 120 this.solutionStoreWithDiversityDescriptor = new SolutionStoreWithDiversityDescriptor(configuration.diversityRequirement);
126 121
127 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 122 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
@@ -146,13 +141,13 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
146 return; 141 return;
147 } 142 }
148 143
149 final Fitness firstFittness = context.calculateFitness(); 144 final Fitness firstfitness = context.calculateFitness();
150 checkForSolution(firstFittness); 145 checkForSolution(firstfitness);
151 146
152 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 147 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
153 final Object[] firstTrajectory = context.getTrajectory().toArray(new Object[0]); 148 final Object[] firstTrajectory = context.getTrajectory().toArray(new Object[0]);
154 TrajectoryWithFitness currentTrajectoryWithFittness = new TrajectoryWithFitness(firstTrajectory, firstFittness); 149 TrajectoryWithFitness currentTrajectoryWithfitness = new TrajectoryWithFitness(firstTrajectory, firstfitness);
155 trajectoiresToExplore.add(currentTrajectoryWithFittness); 150 trajectoiresToExplore.add(currentTrajectoryWithfitness);
156 151
157 //if(configuration) 152 //if(configuration)
158 visualiseCurrentState(); 153 visualiseCurrentState();
@@ -167,22 +162,22 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
167 162
168 mainLoop: while (!isInterrupted && !configuration.progressMonitor.isCancelled()) { 163 mainLoop: while (!isInterrupted && !configuration.progressMonitor.isCancelled()) {
169 164
170 if (currentTrajectoryWithFittness == null) { 165 if (currentTrajectoryWithfitness == null) {
171 if (trajectoiresToExplore.isEmpty()) { 166 if (trajectoiresToExplore.isEmpty()) {
172 logger.debug("State space is fully traversed."); 167 logger.debug("State space is fully traversed.");
173 return; 168 return;
174 } else { 169 } else {
175 currentTrajectoryWithFittness = selectState(); 170 currentTrajectoryWithfitness = selectState();
176 if (logger.isDebugEnabled()) { 171 if (logger.isDebugEnabled()) {
177 logger.debug("Current trajectory: " + Arrays.toString(context.getTrajectory().toArray())); 172 logger.debug("Current trajectory: " + Arrays.toString(context.getTrajectory().toArray()));
178 logger.debug("New trajectory is chosen: " + currentTrajectoryWithFittness); 173 logger.debug("New trajectory is chosen: " + currentTrajectoryWithfitness);
179 } 174 }
180 context.getDesignSpaceManager().executeTrajectoryWithMinimalBacktrackWithoutStateCoding(currentTrajectoryWithFittness.trajectory); 175 context.getDesignSpaceManager().executeTrajectoryWithMinimalBacktrackWithoutStateCoding(currentTrajectoryWithfitness.trajectory);
181 } 176 }
182 } 177 }
183 178
184// visualiseCurrentState(); 179// visualiseCurrentState();
185// boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); 180// boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithfitness);
186// if(consistencyCheckResult == true) { 181// if(consistencyCheckResult == true) {
187// continue mainLoop; 182// continue mainLoop;
188// } 183// }
@@ -194,7 +189,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
194 final Object nextActivation = iterator.next(); 189 final Object nextActivation = iterator.next();
195// if (!iterator.hasNext()) { 190// if (!iterator.hasNext()) {
196// logger.debug("Last untraversed activation of the state."); 191// logger.debug("Last untraversed activation of the state.");
197// trajectoiresToExplore.remove(currentTrajectoryWithFittness); 192// trajectoiresToExplore.remove(currentTrajectoryWithfitness);
198// } 193// }
199 logger.debug("Executing new activation: " + nextActivation); 194 logger.debug("Executing new activation: " + nextActivation);
200 context.executeAcitvationId(nextActivation); 195 context.executeAcitvationId(nextActivation);
@@ -209,7 +204,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
209// System.out.println("---------"); 204// System.out.println("---------");
210// } 205// }
211 206
212 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); 207 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithfitness);
213 if(consistencyCheckResult == true) { continue mainLoop; } 208 if(consistencyCheckResult == true) { continue mainLoop; }
214 209
215 if (context.isCurrentStateAlreadyTraversed()) { 210 if (context.isCurrentStateAlreadyTraversed()) {
@@ -227,31 +222,31 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
227 continue; 222 continue;
228 } 223 }
229 224
230 TrajectoryWithFitness nextTrajectoryWithFittness = new TrajectoryWithFitness( 225 TrajectoryWithFitness nextTrajectoryWithfitness = new TrajectoryWithFitness(
231 context.getTrajectory().toArray(), nextFitness); 226 context.getTrajectory().toArray(), nextFitness);
232 trajectoiresToExplore.add(nextTrajectoryWithFittness); 227 trajectoiresToExplore.add(nextTrajectoryWithfitness);
233 228
234 int compare = objectiveComparatorHelper.compare(currentTrajectoryWithFittness.fitness, 229 int compare = objectiveComparatorHelper.compare(currentTrajectoryWithfitness.fitness,
235 nextTrajectoryWithFittness.fitness); 230 nextTrajectoryWithfitness.fitness);
236 if (compare < 0) { 231 if (compare < 0) {
237 logger.debug("Better fitness, moving on: " + nextFitness); 232 logger.debug("Better fitness, moving on: " + nextFitness);
238 currentTrajectoryWithFittness = nextTrajectoryWithFittness; 233 currentTrajectoryWithfitness = nextTrajectoryWithfitness;
239 continue mainLoop; 234 continue mainLoop;
240 } else if (compare == 0) { 235 } else if (compare == 0) {
241 logger.debug("Equally good fitness, moving on: " + nextFitness); 236 logger.debug("Equally good fitness, moving on: " + nextFitness);
242 currentTrajectoryWithFittness = nextTrajectoryWithFittness; 237 currentTrajectoryWithfitness = nextTrajectoryWithfitness;
243 continue mainLoop; 238 continue mainLoop;
244 } else { 239 } else {
245 logger.debug("Worse fitness."); 240 logger.debug("Worse fitness.");
246 currentTrajectoryWithFittness = null; 241 currentTrajectoryWithfitness = null;
247 continue mainLoop; 242 continue mainLoop;
248 } 243 }
249 } 244 }
250 } 245 }
251 246
252 logger.debug("State is fully traversed."); 247 logger.debug("State is fully traversed.");
253 trajectoiresToExplore.remove(currentTrajectoryWithFittness); 248 trajectoiresToExplore.remove(currentTrajectoryWithfitness);
254 currentTrajectoryWithFittness = null; 249 currentTrajectoryWithfitness = null;
255 250
256 } 251 }
257 logger.info("Interrupted."); 252 logger.info("Interrupted.");
@@ -269,15 +264,11 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
269 return activationIds; 264 return activationIds;
270 } 265 }
271 266
272 private void checkForSolution(final Fitness fittness) { 267 private void checkForSolution(final Fitness fitness) {
273 if (fittness.isSatisifiesHardObjectives()) { 268 if (fitness.isSatisifiesHardObjectives()) {
274 if (solutionStoreWithDiversityDescriptor.isDifferent(context)) { 269 if (solutionStoreWithDiversityDescriptor.isDifferent(context)) {
275 solutionStoreWithCopy.newSolution(context);
276 solutionStoreWithDiversityDescriptor.newSolution(context); 270 solutionStoreWithDiversityDescriptor.newSolution(context);
277 solutionStore.newSolution(context); 271 solutionStore.newSolution(context);
278 configuration.progressMonitor.workedModelFound(configuration.solutionScope.numberOfRequiredSolution);
279
280 logger.debug("Found a solution.");
281 } 272 }
282 } 273 }
283 } 274 }
@@ -311,11 +302,11 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
311 } 302 }
312 303
313 public void visualiseCurrentState() { 304 public void visualiseCurrentState() {
314 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; 305 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugConfiguration.partialInterpretatioVisualiser;
315 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) { 306 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) {
316 PartialInterpretation p = (PartialInterpretation) (context.getModel()); 307 PartialInterpretation p = (PartialInterpretation) (context.getModel());
317 int id = ++numberOfPrintedModel; 308 int id = ++numberOfPrintedModel;
318 if (id % configuration.debugCongiguration.partalInterpretationVisualisationFrequency == 0) { 309 if (id % configuration.debugConfiguration.partalInterpretationVisualisationFrequency == 0) {
319 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p); 310 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p);
320 visualisation.writeToFile(workspace, String.format("state%09d.png", id)); 311 visualisation.writeToFile(workspace, String.format("state%09d.png", id));
321 } 312 }