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 OszkarSemerath <oszka@152.66.252.189>2017-07-05 16:31:32 +0200
committerLibravatar OszkarSemerath <oszka@152.66.252.189>2017-07-05 16:31:32 +0200
commitadce403870ea34f79cf2c59b88cdb5b2dcb438a8 (patch)
tree64a4aeedb53d642c1a60c498be26213b41547497 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
parentAdding multiple model generation support for the alloy solver. (diff)
downloadVIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.tar.gz
VIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.tar.zst
VIATRA-Generator-adce403870ea34f79cf2c59b88cdb5b2dcb438a8.zip
Support for generationg multiple difference models by VIATRA-Solver
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.java41
1 files changed, 38 insertions, 3 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 5a6fee2c..862ba245 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
@@ -11,12 +11,17 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse;
11 11
12import java.util.ArrayList; 12import java.util.ArrayList;
13import java.util.Arrays; 13import java.util.Arrays;
14import java.util.Collection;
14import java.util.Collections; 15import java.util.Collections;
15import java.util.Comparator; 16import java.util.Comparator;
16import java.util.Iterator; 17import java.util.Iterator;
18import java.util.LinkedList;
17import java.util.List; 19import java.util.List;
18import java.util.PriorityQueue; 20import java.util.PriorityQueue;
19import java.util.Random; 21import java.util.Random;
22import java.util.SortedMap;
23import java.util.TreeMap;
24import java.util.TreeSet;
20 25
21import org.apache.log4j.Logger; 26import org.apache.log4j.Logger;
22import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy; 27import org.eclipse.viatra.dse.api.strategy.interfaces.IStrategy;
@@ -24,6 +29,10 @@ import org.eclipse.viatra.dse.base.ThreadContext;
24import org.eclipse.viatra.dse.objectives.Fitness; 29import org.eclipse.viatra.dse.objectives.Fitness;
25import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper; 30import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper;
26import org.eclipse.viatra.dse.solutionstore.SolutionStore; 31import org.eclipse.viatra.dse.solutionstore.SolutionStore;
32import org.eclipse.viatra.query.runtime.api.IPatternMatch;
33import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
34import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
35import org.eclipse.viatra.query.runtime.exception.ViatraQueryException;
27 36
28import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; 37import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner;
29import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration; 38import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration;
@@ -57,12 +66,15 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
57 private SolutionStoreWithCopy solutionStoreWithCopy; 66 private SolutionStoreWithCopy solutionStoreWithCopy;
58 private SolutionStoreWithDiversityDescriptor solutionStoreWithDiversityDescriptor; 67 private SolutionStoreWithDiversityDescriptor solutionStoreWithDiversityDescriptor;
59 private int numberOfStatecoderFail=0; 68 private int numberOfStatecoderFail=0;
69 //Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> additionalPatterns = null;
70 //List<ViatraQueryMatcher<? extends IPatternMatch>> additionalMatchers = new LinkedList<ViatraQueryMatcher<? extends IPatternMatch>>();
60 71
61 private int maxDepth = Integer.MAX_VALUE; 72 private int maxDepth = Integer.MAX_VALUE;
62 private boolean isInterrupted = false; 73 private boolean isInterrupted = false;
63 //private boolean backTrackIfSolution = true; 74 //private boolean backTrackIfSolution = true;
64 private boolean onlyBetterFirst = false; 75 private boolean onlyBetterFirst = false;
65 76
77
66 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore; 78 private PriorityQueue<TrajectoryWithFitness> trajectoiresToExplore;
67 private Logger logger = Logger.getLogger(IStrategy.class); 79 private Logger logger = Logger.getLogger(IStrategy.class);
68 80
@@ -84,12 +96,15 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
84 96
85 } 97 }
86 98
87 public BestFirstStrategyForModelGeneration(ReasonerWorkspace workspace, LogicReasoner reasoner, LogicSolverConfiguration configuration, DiversityDescriptor descriptor) { 99 public BestFirstStrategyForModelGeneration(
88 this.maxDepth = Integer.MAX_VALUE; 100 ReasonerWorkspace workspace, LogicReasoner reasoner, LogicSolverConfiguration configuration, DiversityDescriptor descriptor/*,
101 Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> additionalPatterns*/) {
102 this.maxDepth = Integer.MAX_VALUE;
89 this.workspace = workspace; 103 this.workspace = workspace;
90 this.reasoner = reasoner; 104 this.reasoner = reasoner;
91 this.configuration = configuration; 105 this.configuration = configuration;
92 this.solutionStoreWithDiversityDescriptor = new SolutionStoreWithDiversityDescriptor(descriptor); 106 this.solutionStoreWithDiversityDescriptor = new SolutionStoreWithDiversityDescriptor(descriptor);
107 //this.additionalPatterns = additionalPatterns;
93 } 108 }
94 109
95 @Override 110 @Override
@@ -108,6 +123,8 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
108 return objectiveComparatorHelper.compare(o2.fitness, o1.fitness); 123 return objectiveComparatorHelper.compare(o2.fitness, o1.fitness);
109 } 124 }
110 }; 125 };
126
127
111 128
112 trajectoiresToExplore = new PriorityQueue<TrajectoryWithFitness>(11, comparator); 129 trajectoiresToExplore = new PriorityQueue<TrajectoryWithFitness>(11, comparator);
113 130
@@ -127,6 +144,18 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
127 144
128 @Override 145 @Override
129 public void explore() { 146 public void explore() {
147
148 /*if(this.additionalPatterns!=null) {
149 for (IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> additionalPattern : additionalPatterns) {
150 try {
151 this.additionalMatchers.add(additionalPattern.getMatcher(context.getQueryEngine()));
152 } catch (ViatraQueryException e) {
153 // TODO Auto-generated catch block
154 e.printStackTrace();
155 }
156 }
157 }*/
158
130 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 159 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
131 160
132 boolean globalConstraintsAreSatisfied = context.checkGlobalConstraints(); 161 boolean globalConstraintsAreSatisfied = context.checkGlobalConstraints();
@@ -210,9 +239,15 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
210 final Fitness nextFitness = context.calculateFitness(); 239 final Fitness nextFitness = context.calculateFitness();
211 if (nextFitness.isSatisifiesHardObjectives()) { 240 if (nextFitness.isSatisifiesHardObjectives()) {
212 if(solutionStoreWithDiversityDescriptor.isDifferent(context)) { 241 if(solutionStoreWithDiversityDescriptor.isDifferent(context)) {
213 solutionStoreWithCopy.newSolution(context); 242 /*SortedMap<String, Integer> x = new TreeMap<String, Integer>();
243 for(ViatraQueryMatcher<? extends IPatternMatch> additioanMatcher : this.additionalMatchers) {
244 x.put(additioanMatcher.getPatternName(),additioanMatcher.countMatches());
245 }*/
246
247 solutionStoreWithCopy.newSolution(context/*,x*/);
214 solutionStoreWithDiversityDescriptor.newSolution(context); 248 solutionStoreWithDiversityDescriptor.newSolution(context);
215 solutionStore.newSolution(context); 249 solutionStore.newSolution(context);
250
216 logger.debug("Found a solution."); 251 logger.debug("Found a solution.");
217 } 252 }
218 } 253 }