diff options
author | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-03-03 02:01:32 -0500 |
---|---|---|
committer | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-03-03 02:01:32 -0500 |
commit | 7b918a10fddfdb356b1e22766bb6b648e7e63aea (patch) | |
tree | 1c2cf8dece4be2cf578477a0efe17ca63f1d6919 /Framework | |
parent | separated init and clear phases in workspaces (diff) | |
download | VIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.tar.gz VIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.tar.zst VIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.zip |
+SolverProcessMonitor to (optionally) report process and request cancel
Diffstat (limited to 'Framework')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend | 61 |
1 files changed, 57 insertions, 4 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend index 06307e2e..b2a98570 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend | |||
@@ -1,16 +1,17 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.logic.model.builder | 1 | package hu.bme.mit.inf.dslreasoner.logic.model.builder |
2 | 2 | ||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 4 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | 6 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult |
6 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | 7 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace |
7 | import java.util.List | ||
8 | import java.util.TreeSet | ||
9 | import java.util.SortedSet | ||
10 | import java.math.BigDecimal | 8 | import java.math.BigDecimal |
11 | import java.util.HashMap | 9 | import java.util.HashMap |
12 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | 10 | import java.util.List |
13 | import java.util.Map | 11 | import java.util.Map |
12 | import java.util.SortedSet | ||
13 | import java.util.TreeSet | ||
14 | import org.eclipse.xtext.xbase.lib.Procedures.Procedure0 | ||
14 | 15 | ||
15 | abstract class LogicReasoner { | 16 | abstract class LogicReasoner { |
16 | def abstract LogicResult solve(LogicProblem problem, LogicSolverConfiguration configuration, | 17 | def abstract LogicResult solve(LogicProblem problem, LogicSolverConfiguration configuration, |
@@ -45,6 +46,12 @@ abstract class LogicSolverConfiguration { | |||
45 | public int memoryLimit = Unlimited | 46 | public int memoryLimit = Unlimited |
46 | /** Documentation level of the solver. */ | 47 | /** Documentation level of the solver. */ |
47 | public DocumentationLevel documentationLevel = DocumentationLevel::NONE | 48 | public DocumentationLevel documentationLevel = DocumentationLevel::NONE |
49 | /** Progress monitor for the solver to | ||
50 | * <li>(optionally) report progress via {@link progressMonitor.worked}</li> | ||
51 | * <li>(optionally) inform about cancellation request via {@link progressMonitor.isCancelled} | ||
52 | * or via a listener registered by {@link progressMonitor.addCancelListener}</li> | ||
53 | */ | ||
54 | public SolverProgressMonitor progressMonitor = new NullSolverProgressMonitor | ||
48 | 55 | ||
49 | public var TypeScopes typeScopes = new TypeScopes; | 56 | public var TypeScopes typeScopes = new TypeScopes; |
50 | public var SolutionScope solutionScope = new SolutionScope | 57 | public var SolutionScope solutionScope = new SolutionScope |
@@ -127,3 +134,49 @@ public class SolutionScope { | |||
127 | public static val All = -1; | 134 | public static val All = -1; |
128 | public var numberOfRequiredSolution = 1 | 135 | public var numberOfRequiredSolution = 1 |
129 | } | 136 | } |
137 | /** Progress monitor class for a solver to | ||
138 | * <li>(optionally) report progress via {@link worked}</li> | ||
139 | * <li>(optionally) inform about cancellation request via {@link isCancelled} | ||
140 | * or via a listener registered by {@link addCancelListener}</li> | ||
141 | */ | ||
142 | public abstract class SolverProgressMonitor { | ||
143 | protected var volatile cancelled = false | ||
144 | protected var progress = 0.0 | ||
145 | |||
146 | /** | ||
147 | * Method to report progress, e.g. finishing translation or founding one of the model. | ||
148 | * The sum of all {@link amount} should be 1.0, which is reached when all model is generated. | ||
149 | * By default, | ||
150 | * forward transformation should take 0.1 work unit (implemented in {@link#workedForwardTransformation}), | ||
151 | * founding all solution 0.8 (implemented in {@link#workedModelFound}) | ||
152 | * and backward transformation 0.1 again (implemented in {@link#workedBackwardTransformation}). | ||
153 | */ | ||
154 | def public void worked(double amount) { | ||
155 | progress+=amount | ||
156 | processWorked(amount) | ||
157 | } | ||
158 | def public void workedForwardTransformation() {worked(0.1)} | ||
159 | def public void workedModelFound(int numberOfRequestedModels) { | ||
160 | if(numberOfRequestedModels > 0) { | ||
161 | worked(0.8/numberOfRequestedModels) | ||
162 | } | ||
163 | } | ||
164 | def public void workedSearchFinished() { worked(0.1+0.8-progress) } | ||
165 | def public void workedBackwardTransformation(int numberOfFoundModels) {worked(0.1/numberOfFoundModels)} | ||
166 | def public void workedBackwardTransformationFinished() { worked(1.0-progress) } | ||
167 | protected def void processWorked(double amount) | ||
168 | |||
169 | /** | ||
170 | * Requesting the solver to stop with the solutions already found. | ||
171 | * It is not guaranteed however that the solver finishes. | ||
172 | */ | ||
173 | def public void cancel() { | ||
174 | cancelled = true | ||
175 | } | ||
176 | def public boolean isCancelled() { | ||
177 | cancelled | ||
178 | } | ||
179 | } | ||
180 | public class NullSolverProgressMonitor extends SolverProgressMonitor { | ||
181 | override protected processWorked(double amount) { throw new UnsupportedOperationException("TODO: auto-generated method stub") } | ||
182 | } | ||