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:
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.java72
1 files changed, 25 insertions, 47 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..077fea21 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
@@ -20,6 +20,7 @@ import java.util.List;
20import java.util.PriorityQueue; 20import java.util.PriorityQueue;
21import java.util.Random; 21import java.util.Random;
22 22
23import org.apache.log4j.Level;
23import org.apache.log4j.Logger; 24import org.apache.log4j.Logger;
24import org.eclipse.emf.ecore.util.EcoreUtil; 25import org.eclipse.emf.ecore.util.EcoreUtil;
25import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy; 26import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy;
@@ -75,8 +76,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
75 // Running 76 // Running
76 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore; 77 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore;
77 private SolutionStore solutionStore; 78 private SolutionStore solutionStore;
78 private SolutionStoreWithCopy solutionStoreWithCopy;
79 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;
82 private Random random = new Random(); 81 private Random random = new Random();
@@ -95,14 +94,9 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
95 this.workspace = workspace; 94 this.workspace = workspace;
96 this.configuration = configuration; 95 this.configuration = configuration;
97 this.method = method; 96 this.method = method;
97 //logger.setLevel(Level.DEBUG);
98 } 98 }
99 99
100 public SolutionStoreWithCopy getSolutionStoreWithCopy() {
101 return solutionStoreWithCopy;
102 }
103 public SolutionStoreWithDiversityDescriptor getSolutionStoreWithDiversityDescriptor() {
104 return solutionStoreWithDiversityDescriptor;
105 }
106 public int getNumberOfStatecoderFail() { 100 public int getNumberOfStatecoderFail() {
107 return numberOfStatecoderFail; 101 return numberOfStatecoderFail;
108 } 102 }
@@ -121,9 +115,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
121 matchers.add(matcher); 115 matchers.add(matcher);
122 } 116 }
123 117
124 this.solutionStoreWithCopy = new SolutionStoreWithCopy();
125 this.solutionStoreWithDiversityDescriptor = new SolutionStoreWithDiversityDescriptor(configuration.diversityRequirement);
126
127 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 118 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
128 this.comparator = new Comparator<TrajectoryWithFitness>() { 119 this.comparator = new Comparator<TrajectoryWithFitness>() {
129 @Override 120 @Override
@@ -146,13 +137,13 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
146 return; 137 return;
147 } 138 }
148 139
149 final Fitness firstFittness = context.calculateFitness(); 140 final Fitness firstfitness = context.calculateFitness();
150 checkForSolution(firstFittness); 141 solutionStore.newSolution(context);
151 142
152 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 143 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
153 final Object[] firstTrajectory = context.getTrajectory().toArray(new Object[0]); 144 final Object[] firstTrajectory = context.getTrajectory().toArray(new Object[0]);
154 TrajectoryWithFitness currentTrajectoryWithFittness = new TrajectoryWithFitness(firstTrajectory, firstFittness); 145 TrajectoryWithFitness currentTrajectoryWithfitness = new TrajectoryWithFitness(firstTrajectory, firstfitness);
155 trajectoiresToExplore.add(currentTrajectoryWithFittness); 146 trajectoiresToExplore.add(currentTrajectoryWithfitness);
156 147
157 //if(configuration) 148 //if(configuration)
158 visualiseCurrentState(); 149 visualiseCurrentState();
@@ -167,22 +158,22 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
167 158
168 mainLoop: while (!isInterrupted && !configuration.progressMonitor.isCancelled()) { 159 mainLoop: while (!isInterrupted && !configuration.progressMonitor.isCancelled()) {
169 160
170 if (currentTrajectoryWithFittness == null) { 161 if (currentTrajectoryWithfitness == null) {
171 if (trajectoiresToExplore.isEmpty()) { 162 if (trajectoiresToExplore.isEmpty()) {
172 logger.debug("State space is fully traversed."); 163 logger.debug("State space is fully traversed.");
173 return; 164 return;
174 } else { 165 } else {
175 currentTrajectoryWithFittness = selectState(); 166 currentTrajectoryWithfitness = selectState();
176 if (logger.isDebugEnabled()) { 167 if (logger.isDebugEnabled()) {
177 logger.debug("Current trajectory: " + Arrays.toString(context.getTrajectory().toArray())); 168 logger.debug("Current trajectory: " + Arrays.toString(context.getTrajectory().toArray()));
178 logger.debug("New trajectory is chosen: " + currentTrajectoryWithFittness); 169 logger.debug("New trajectory is chosen: " + currentTrajectoryWithfitness);
179 } 170 }
180 context.getDesignSpaceManager().executeTrajectoryWithMinimalBacktrackWithoutStateCoding(currentTrajectoryWithFittness.trajectory); 171 context.getDesignSpaceManager().executeTrajectoryWithMinimalBacktrackWithoutStateCoding(currentTrajectoryWithfitness.trajectory);
181 } 172 }
182 } 173 }
183 174
184// visualiseCurrentState(); 175// visualiseCurrentState();
185// boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); 176// boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithfitness);
186// if(consistencyCheckResult == true) { 177// if(consistencyCheckResult == true) {
187// continue mainLoop; 178// continue mainLoop;
188// } 179// }
@@ -194,7 +185,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
194 final Object nextActivation = iterator.next(); 185 final Object nextActivation = iterator.next();
195// if (!iterator.hasNext()) { 186// if (!iterator.hasNext()) {
196// logger.debug("Last untraversed activation of the state."); 187// logger.debug("Last untraversed activation of the state.");
197// trajectoiresToExplore.remove(currentTrajectoryWithFittness); 188// trajectoiresToExplore.remove(currentTrajectoryWithfitness);
198// } 189// }
199 logger.debug("Executing new activation: " + nextActivation); 190 logger.debug("Executing new activation: " + nextActivation);
200 context.executeAcitvationId(nextActivation); 191 context.executeAcitvationId(nextActivation);
@@ -209,7 +200,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
209// System.out.println("---------"); 200// System.out.println("---------");
210// } 201// }
211 202
212 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); 203 boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithfitness);
213 if(consistencyCheckResult == true) { continue mainLoop; } 204 if(consistencyCheckResult == true) { continue mainLoop; }
214 205
215 if (context.isCurrentStateAlreadyTraversed()) { 206 if (context.isCurrentStateAlreadyTraversed()) {
@@ -220,38 +211,38 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
220 context.backtrack(); 211 context.backtrack();
221 } else { 212 } else {
222 final Fitness nextFitness = context.calculateFitness(); 213 final Fitness nextFitness = context.calculateFitness();
223 checkForSolution(nextFitness); 214 solutionStore.newSolution(context);
224 if (context.getDepth() > configuration.searchSpaceConstraints.maxDepth) { 215 if (context.getDepth() > configuration.searchSpaceConstraints.maxDepth) {
225 logger.debug("Reached max depth."); 216 logger.debug("Reached max depth.");
226 context.backtrack(); 217 context.backtrack();
227 continue; 218 continue;
228 } 219 }
229 220
230 TrajectoryWithFitness nextTrajectoryWithFittness = new TrajectoryWithFitness( 221 TrajectoryWithFitness nextTrajectoryWithfitness = new TrajectoryWithFitness(
231 context.getTrajectory().toArray(), nextFitness); 222 context.getTrajectory().toArray(), nextFitness);
232 trajectoiresToExplore.add(nextTrajectoryWithFittness); 223 trajectoiresToExplore.add(nextTrajectoryWithfitness);
233 224
234 int compare = objectiveComparatorHelper.compare(currentTrajectoryWithFittness.fitness, 225 int compare = objectiveComparatorHelper.compare(currentTrajectoryWithfitness.fitness,
235 nextTrajectoryWithFittness.fitness); 226 nextTrajectoryWithfitness.fitness);
236 if (compare < 0) { 227 if (compare < 0) {
237 logger.debug("Better fitness, moving on: " + nextFitness); 228 logger.debug("Better fitness, moving on: " + nextFitness);
238 currentTrajectoryWithFittness = nextTrajectoryWithFittness; 229 currentTrajectoryWithfitness = nextTrajectoryWithfitness;
239 continue mainLoop; 230 continue mainLoop;
240 } else if (compare == 0) { 231 } else if (compare == 0) {
241 logger.debug("Equally good fitness, moving on: " + nextFitness); 232 logger.debug("Equally good fitness, moving on: " + nextFitness);
242 currentTrajectoryWithFittness = nextTrajectoryWithFittness; 233 currentTrajectoryWithfitness = nextTrajectoryWithfitness;
243 continue mainLoop; 234 continue mainLoop;
244 } else { 235 } else {
245 logger.debug("Worse fitness."); 236 logger.debug("Worse fitness.");
246 currentTrajectoryWithFittness = null; 237 currentTrajectoryWithfitness = null;
247 continue mainLoop; 238 continue mainLoop;
248 } 239 }
249 } 240 }
250 } 241 }
251 242
252 logger.debug("State is fully traversed."); 243 logger.debug("State is fully traversed.");
253 trajectoiresToExplore.remove(currentTrajectoryWithFittness); 244 trajectoiresToExplore.remove(currentTrajectoryWithfitness);
254 currentTrajectoryWithFittness = null; 245 currentTrajectoryWithfitness = null;
255 246
256 } 247 }
257 logger.info("Interrupted."); 248 logger.info("Interrupted.");
@@ -269,19 +260,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
269 return activationIds; 260 return activationIds;
270 } 261 }
271 262
272 private void checkForSolution(final Fitness fittness) {
273 if (fittness.isSatisifiesHardObjectives()) {
274 if (solutionStoreWithDiversityDescriptor.isDifferent(context)) {
275 solutionStoreWithCopy.newSolution(context);
276 solutionStoreWithDiversityDescriptor.newSolution(context);
277 solutionStore.newSolution(context);
278 configuration.progressMonitor.workedModelFound(configuration.solutionScope.numberOfRequiredSolution);
279
280 logger.debug("Found a solution.");
281 }
282 }
283 }
284
285 @Override 263 @Override
286 public void interruptStrategy() { 264 public void interruptStrategy() {
287 isInterrupted = true; 265 isInterrupted = true;
@@ -311,11 +289,11 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
311 } 289 }
312 290
313 public void visualiseCurrentState() { 291 public void visualiseCurrentState() {
314 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; 292 PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugConfiguration.partialInterpretatioVisualiser;
315 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) { 293 if(partialInterpretatioVisualiser != null && this.configuration.documentationLevel == DocumentationLevel.FULL && workspace != null) {
316 PartialInterpretation p = (PartialInterpretation) (context.getModel()); 294 PartialInterpretation p = (PartialInterpretation) (context.getModel());
317 int id = ++numberOfPrintedModel; 295 int id = ++numberOfPrintedModel;
318 if (id % configuration.debugCongiguration.partalInterpretationVisualisationFrequency == 0) { 296 if (id % configuration.debugConfiguration.partalInterpretationVisualisationFrequency == 0) {
319 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p); 297 PartialInterpretationVisualisation visualisation = partialInterpretatioVisualiser.visualiseConcretization(p);
320 visualisation.writeToFile(workspace, String.format("state%09d.png", id)); 298 visualisation.writeToFile(workspace, String.format("state%09d.png", id));
321 } 299 }