aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-03 02:01:32 -0500
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-03-03 02:01:32 -0500
commit7b918a10fddfdb356b1e22766bb6b648e7e63aea (patch)
tree1c2cf8dece4be2cf578477a0efe17ca63f1d6919
parentseparated init and clear phases in workspaces (diff)
downloadVIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.tar.gz
VIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.tar.zst
VIATRA-Generator-7b918a10fddfdb356b1e22766bb6b648e7e63aea.zip
+SolverProcessMonitor to (optionally) report process and request cancel
-rw-r--r--Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend61
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 @@
1package hu.bme.mit.inf.dslreasoner.logic.model.builder 1package hu.bme.mit.inf.dslreasoner.logic.model.builder
2 2
3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
3import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 4import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
4import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult 5import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult
5import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult 6import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
6import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace 7import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
7import java.util.List
8import java.util.TreeSet
9import java.util.SortedSet
10import java.math.BigDecimal 8import java.math.BigDecimal
11import java.util.HashMap 9import java.util.HashMap
12import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 10import java.util.List
13import java.util.Map 11import java.util.Map
12import java.util.SortedSet
13import java.util.TreeSet
14import org.eclipse.xtext.xbase.lib.Procedures.Procedure0
14 15
15abstract class LogicReasoner { 16abstract 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 */
142public 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}
180public class NullSolverProgressMonitor extends SolverProgressMonitor {
181 override protected processWorked(double amount) { throw new UnsupportedOperationException("TODO: auto-generated method stub") }
182}