diff options
Diffstat (limited to 'Solvers/VIATRA-Solver')
4 files changed, 84 insertions, 33 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/META-INF/MANIFEST.MF index acaf466f..23e3ad13 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/META-INF/MANIFEST.MF +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/META-INF/MANIFEST.MF | |||
@@ -4,23 +4,23 @@ Bundle-Name: Logic2viatra | |||
4 | Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatraquery;singleton:=true | 4 | Bundle-SymbolicName: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatraquery;singleton:=true |
5 | Bundle-Version: 1.0.0.qualifier | 5 | Bundle-Version: 1.0.0.qualifier |
6 | Export-Package: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra, | 6 | Export-Package: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra, |
7 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns, | 7 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns, |
8 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.queries | 8 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.queries |
9 | Require-Bundle: hu.bme.mit.inf.dslreasoner.logic.model;bundle-version="1.0.0", | 9 | Require-Bundle: hu.bme.mit.inf.dslreasoner.logic.model;bundle-version="1.0.0", |
10 | hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage;bundle-version="1.0.0", | 10 | hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage;bundle-version="1.0.0", |
11 | hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", | 11 | hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", |
12 | hu.bme.mit.inf.dslreasoner.viatra2logic;bundle-version="1.0.0", | 12 | hu.bme.mit.inf.dslreasoner.viatra2logic;bundle-version="1.0.0", |
13 | com.google.guava, | 13 | com.google.guava, |
14 | org.eclipse.xtext.xbase.lib, | 14 | org.eclipse.xtext.xbase.lib, |
15 | org.eclipse.xtend.lib, | 15 | org.eclipse.xtend.lib, |
16 | org.eclipse.xtend.lib.macro, | 16 | org.eclipse.xtend.lib.macro, |
17 | org.eclipse.viatra.query.runtime;bundle-version="1.5.0", | 17 | org.eclipse.viatra.query.runtime;bundle-version="1.5.0", |
18 | org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.5.0", | 18 | org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.5.0", |
19 | org.eclipse.viatra.query.patternlanguage.emf;bundle-version="1.5.0", | 19 | org.eclipse.viatra.query.patternlanguage.emf;bundle-version="1.5.0", |
20 | com.google.inject;bundle-version="3.0.0", | 20 | com.google.inject;bundle-version="3.0.0", |
21 | org.eclipse.xtext;bundle-version="2.10.0", | 21 | org.eclipse.xtext;bundle-version="2.10.0", |
22 | org.eclipse.viatra.transformation.runtime.emf;bundle-version="1.5.0", | 22 | org.eclipse.viatra.transformation.runtime.emf;bundle-version="1.5.0", |
23 | org.eclipse.xtext.xbase;bundle-version="2.10.0" | 23 | org.eclipse.xtext.xbase;bundle-version="2.10.0" |
24 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | 24 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 |
25 | Import-Package: org.apache.log4j | 25 | Import-Package: org.apache.log4j |
26 | Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatraquery | 26 | Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatraquery |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend index f43ab96d..8a26470a 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend | |||
@@ -20,9 +20,16 @@ import org.eclipse.xtend.lib.annotations.Data | |||
20 | 20 | ||
21 | class ModelGenerationStatistics { | 21 | class ModelGenerationStatistics { |
22 | public var long transformationExecutionTime = 0 | 22 | public var long transformationExecutionTime = 0 |
23 | public var long metricCalculationTime = 0 | ||
24 | |||
23 | synchronized def addExecutionTime(long amount) { | 25 | synchronized def addExecutionTime(long amount) { |
24 | transformationExecutionTime+=amount | 26 | transformationExecutionTime+=amount |
25 | } | 27 | } |
28 | |||
29 | synchronized def addMetricCalculationTime(long amount) { | ||
30 | metricCalculationTime+=amount | ||
31 | } | ||
32 | |||
26 | public var long PreliminaryTypeAnalisisTime = 0 | 33 | public var long PreliminaryTypeAnalisisTime = 0 |
27 | } | 34 | } |
28 | @Data class ModelGenerationMethod { | 35 | @Data class ModelGenerationMethod { |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend index 482fcc1c..4331420d 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend | |||
@@ -17,7 +17,7 @@ import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.par | |||
17 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage | 17 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage |
18 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.IdentifierBasedStateCoderFactory | 18 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.IdentifierBasedStateCoderFactory |
19 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedStateCoderFactory | 19 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.statecoder.NeighbourhoodBasedStateCoderFactory |
20 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.BestFirstStrategyForModelGeneration | 20 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.HillClimbingOnRealisticMetricStrategyForModelGeneration |
21 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective | 21 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ModelGenerationCompositeObjective |
22 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PartialModelAsLogicInterpretation | 22 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PartialModelAsLogicInterpretation |
23 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective | 23 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.ScopeObjective |
@@ -33,7 +33,6 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer | |||
33 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel | 33 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel |
34 | import org.eclipse.viatra.dse.solutionstore.SolutionStore | 34 | import org.eclipse.viatra.dse.solutionstore.SolutionStore |
35 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory | 35 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory |
36 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.HillClimbingOnRealisticMetricStrategyForModelGeneration | ||
37 | 36 | ||
38 | class ViatraReasoner extends LogicReasoner{ | 37 | class ViatraReasoner extends LogicReasoner{ |
39 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() | 38 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() |
@@ -155,6 +154,9 @@ class ViatraReasoner extends LogicReasoner{ | |||
155 | it.entries += createIntStatisticEntry => [ | 154 | it.entries += createIntStatisticEntry => [ |
156 | it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int | 155 | it.name = "TypeAnalysisTime" it.value = (method.statistics.PreliminaryTypeAnalisisTime/1000000) as int |
157 | ] | 156 | ] |
157 | it.entries += createIntStatisticEntry =>[ | ||
158 | it.name = "MetricCalculationTime" it.value = (method.statistics.metricCalculationTime/1000000) as int | ||
159 | ] | ||
158 | it.entries += createIntStatisticEntry => [ | 160 | it.entries += createIntStatisticEntry => [ |
159 | it.name = "StateCoderTime" it.value = (statecoder.runtime/1000000) as int | 161 | it.name = "StateCoderTime" it.value = (statecoder.runtime/1000000) as int |
160 | ] | 162 | ] |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java index c817d20b..eb7df089 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/HillClimbingOnRealisticMetricStrategyForModelGeneration.java | |||
@@ -190,8 +190,8 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
190 | 190 | ||
191 | List<Object> activationIds = selectActivation(); | 191 | List<Object> activationIds = selectActivation(); |
192 | PartialInterpretation model = (PartialInterpretation) context.getModel(); | 192 | PartialInterpretation model = (PartialInterpretation) context.getModel(); |
193 | System.out.println(model.getNewElements().size()); | 193 | // System.out.println(model.getNewElements().size()); |
194 | System.out.println("# violations: " + getNumberOfViolations(mayMatchers)); | 194 | // System.out.println("# violations: " + getNumberOfViolations(mayMatchers)); |
195 | 195 | ||
196 | Map<Object, Double> valueMap = new HashMap<Object,Double>(); | 196 | Map<Object, Double> valueMap = new HashMap<Object,Double>(); |
197 | 197 | ||
@@ -208,15 +208,13 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
208 | count++; | 208 | count++; |
209 | this.currentNodeTypeDistance = heuristics.getNodeTypeDistance(); | 209 | this.currentNodeTypeDistance = heuristics.getNodeTypeDistance(); |
210 | numNodesToGenerate = model.getMaxNewElements(); | 210 | numNodesToGenerate = model.getMaxNewElements(); |
211 | System.out.println("NA distance: " + heuristics.getNADistance()); | 211 | // System.out.println("NA distance: " + heuristics.getNADistance()); |
212 | System.out.println("MPC distance: " + heuristics.getMPCDistance()); | 212 | // System.out.println("MPC distance: " + heuristics.getMPCDistance()); |
213 | System.out.println("Out degree distance:" + heuristics.getOutDegreeDistance()); | 213 | // System.out.println("Out degree distance:" + heuristics.getOutDegreeDistance()); |
214 | System.out.println("NodeType :" + currentNodeTypeDistance); | 214 | // System.out.println("NodeType :" + currentNodeTypeDistance); |
215 | 215 | ||
216 | // System.out.println("FinalState :" + heuristics.getNodeTypePercentage("FinalState")); | ||
217 | 216 | ||
218 | //TODO: the number of activations to be checked should be configurasble | 217 | //TODO: the number of activations to be checked should be configurasble |
219 | System.out.println(activationIds.size()); | ||
220 | if(activationIds.size() > 50) { | 218 | if(activationIds.size() > 50) { |
221 | activationIds = activationIds.subList(0, 50); | 219 | activationIds = activationIds.subList(0, 50); |
222 | } | 220 | } |
@@ -301,23 +299,27 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
301 | } | 299 | } |
302 | 300 | ||
303 | //remove all the elements having large distance | 301 | //remove all the elements having large distance |
304 | activationIds.removeIf(li -> valueMap.get(li) >= 10000); | ||
305 | Collections.sort(activationIds, Comparator.comparing(li -> valueMap.get(li))); | 302 | Collections.sort(activationIds, Comparator.comparing(li -> valueMap.get(li))); |
306 | return valueMap; | 303 | return valueMap; |
307 | } | 304 | } |
308 | 305 | ||
309 | private double calculateFutureStateValue(int violation) { | 306 | private double calculateFutureStateValue(int violation) { |
307 | long start = System.nanoTime(); | ||
310 | int nodeSize = ((PartialInterpretation) context.getModel()).getNewElements().size(); | 308 | int nodeSize = ((PartialInterpretation) context.getModel()).getNewElements().size(); |
311 | double currentValue = calculateCurrentStateValue(nodeSize,violation); | 309 | double currentValue = calculateCurrentStateValue(nodeSize,violation); |
312 | double[] toPredict = metricDistance.calculateFeature(100, violation); | 310 | double[] toPredict = metricDistance.calculateFeature(100, violation); |
313 | if(Math.abs(currentValue - currentStateValue) < 0.001) { | 311 | if(Math.abs(currentValue - currentStateValue) < 0.001) { |
312 | this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start); | ||
314 | return Double.MAX_VALUE; | 313 | return Double.MAX_VALUE; |
315 | } | 314 | } |
316 | try { | 315 | try { |
316 | this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start); | ||
317 | return metricDistance.getLinearModel().getPredictionForNextDataSample(metricDistance.calculateFeature(nodeSize, violation), currentValue, toPredict); | 317 | return metricDistance.getLinearModel().getPredictionForNextDataSample(metricDistance.calculateFeature(nodeSize, violation), currentValue, toPredict); |
318 | }catch(IllegalArgumentException e) { | 318 | }catch(IllegalArgumentException e) { |
319 | this.method.getStatistics().addMetricCalculationTime(System.nanoTime() - start); | ||
319 | return currentValue; | 320 | return currentValue; |
320 | } | 321 | } |
322 | |||
321 | } | 323 | } |
322 | private double calculateCurrentStateValue(int factor, int violation) { | 324 | private double calculateCurrentStateValue(int factor, int violation) { |
323 | PartialInterpretation model = (PartialInterpretation) context.getModel(); | 325 | PartialInterpretation model = (PartialInterpretation) context.getModel(); |
@@ -343,7 +345,7 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
343 | } | 345 | } |
344 | 346 | ||
345 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; | 347 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; |
346 | }else { | 348 | }else if (domain == Domain.Ecore) { |
347 | double unfinishFactor = 100 * (1 - (double)factor / targetSize); | 349 | double unfinishFactor = 100 * (1 - (double)factor / targetSize); |
348 | double nodeTypeFactor = g.getNodeTypeDistance(); | 350 | double nodeTypeFactor = g.getNodeTypeDistance(); |
349 | double normalFactor = 5; | 351 | double normalFactor = 5; |
@@ -354,13 +356,53 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
354 | } | 356 | } |
355 | 357 | ||
356 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; | 358 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; |
359 | }else { | ||
360 | double unfinishFactor = context.calculateFitness().get("CompositeUnfinishednessObjective"); | ||
361 | double nodeTypeFactor = g.getNodeTypeDistance(); | ||
362 | double normalFactor = 5; | ||
363 | if(currentNodeTypeDistance <= 0.05 || numNodesToGenerate == 1) { | ||
364 | nodeTypeFactor = 0; | ||
365 | normalFactor = 100; | ||
366 | //unfinishFactor *= 0.5; | ||
367 | } | ||
368 | |||
369 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + 2*g.getMPCDistance() + 2*g.getOutDegreeDistance()) + normalFactor / 5*consistenceWeights + unfinishFactor; | ||
357 | } | 370 | } |
358 | 371 | ||
359 | }else if(configuration.realisticGuidance == RealisticGuidance.Composite_Without_Violations) { | 372 | }else if(configuration.realisticGuidance == RealisticGuidance.Composite_Without_Violations) { |
360 | if(domain == Domain.Yakindumm) { | 373 | if(domain == Domain.Yakindumm) { |
361 | return 100.0 *(g.getNodeTypeDistance()) + 5*(g.getNADistance() + g.getMPCDistance() +g.getOutDegreeDistance()); | 374 | double unfinishFactor = 50 * (1 - (double)factor / targetSize); |
362 | }else { | 375 | double nodeTypeFactor = g.getNodeTypeDistance(); |
363 | return 15*(g.getNodeTypeDistance()) + 5*(g.getNADistance() + g.getMPCDistance() + 4*g.getOutDegreeDistance()); | 376 | double normalFactor = 5; |
377 | if(currentNodeTypeDistance <= 0.05 || numNodesToGenerate == 1) { | ||
378 | nodeTypeFactor = 0; | ||
379 | normalFactor = 100; | ||
380 | unfinishFactor = 0; | ||
381 | } | ||
382 | |||
383 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor; | ||
384 | }else if (domain == Domain.Github) { | ||
385 | double unfinishFactor = 100 * (1 - (double)factor / targetSize); | ||
386 | double nodeTypeFactor = g.getNodeTypeDistance(); | ||
387 | double normalFactor = 5; | ||
388 | if(currentNodeTypeDistance <= 0.12 || numNodesToGenerate == 1) { | ||
389 | nodeTypeFactor = 0; | ||
390 | normalFactor = 100; | ||
391 | unfinishFactor *= 0.5; | ||
392 | } | ||
393 | |||
394 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor; | ||
395 | } else { | ||
396 | double unfinishFactor = 100 * (1 - (double)factor / targetSize); | ||
397 | double nodeTypeFactor = g.getNodeTypeDistance(); | ||
398 | double normalFactor = 5; | ||
399 | if(currentNodeTypeDistance <= 0.20 || numNodesToGenerate == 1) { | ||
400 | nodeTypeFactor = 0; | ||
401 | normalFactor = 100; | ||
402 | unfinishFactor *= 0.5; | ||
403 | } | ||
404 | |||
405 | return 100*(nodeTypeFactor) + normalFactor*(2*g.getNADistance() + g.getMPCDistance() + 2*g.getOutDegreeDistance()) + unfinishFactor; | ||
364 | } | 406 | } |
365 | }else { | 407 | }else { |
366 | return violation; | 408 | return violation; |
@@ -426,8 +468,8 @@ public class HillClimbingOnRealisticMetricStrategyForModelGeneration implements | |||
426 | 468 | ||
427 | private void checkForSolution(final Fitness fittness) { | 469 | private void checkForSolution(final Fitness fittness) { |
428 | if (fittness.isSatisifiesHardObjectives()) { | 470 | if (fittness.isSatisifiesHardObjectives()) { |
429 | System.out.println("Solution Found!!"); | 471 | logger.debug("Solution Found!!"); |
430 | System.out.println("# violations: " + (getNumberOfViolations(mustMatchers))); | 472 | logger.debug("# violations: " + (getNumberOfViolations(mustMatchers))); |
431 | if (solutionStoreWithDiversityDescriptor.isDifferent(context)) { | 473 | if (solutionStoreWithDiversityDescriptor.isDifferent(context)) { |
432 | solutionStoreWithCopy.newSolution(context); | 474 | solutionStoreWithCopy.newSolution(context); |
433 | solutionStoreWithDiversityDescriptor.newSolution(context); | 475 | solutionStoreWithDiversityDescriptor.newSolution(context); |