diff options
author | 2019-04-07 13:46:36 +0200 | |
---|---|---|
committer | 2019-04-07 13:46:36 +0200 | |
commit | 3f9b1c92cc35fa4ed9672a2b8601f4c22af24921 (patch) | |
tree | 927c41492ff3b50b3d998a4fbe87861187d85912 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java | |
parent | Add reliability probability and mtff objectives (diff) | |
download | VIATRA-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.java | 57 |
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 | } |