From acb8dedc9d03e1d17f570e07c9f75a571bd66cf8 Mon Sep 17 00:00:00 2001 From: Aren Babikian Date: Tue, 16 Feb 2021 01:11:15 +0100 Subject: Ready for strategies case study --- .../viatrasolver/reasoner/ViatraReasoner.xtend | 2 +- .../viatrasolver/reasoner/dse/NumericSolver.xtend | 15 +++++++++++++-- .../viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend | 6 ++++++ 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu') 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 5ad78506..a692e1e5 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 @@ -110,7 +110,7 @@ class ViatraReasoner extends LogicReasoner { new SolutionStore(numberOfRequiredSolutions) } solutionStore.registerSolutionFoundHandler(new LoggerSolutionFoundHandler(viatraConfig)) - val numericSolver = new NumericSolver(method, viatraConfig, true)//was formerly hard-coded to false for caching + val numericSolver = new NumericSolver(method, viatraConfig, false)//was formerly hard-coded to false for caching val solutionSaver = method.solutionSaver solutionSaver.numericSolver = numericSolver val solutionCopier = solutionSaver.solutionCopier diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend index 44964079..28edff41 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/NumericSolver.xtend @@ -24,10 +24,12 @@ import java.util.List import java.util.Map import org.eclipse.emf.ecore.EObject import org.eclipse.viatra.dse.base.ThreadContext +import org.eclipse.viatra.dse.objectives.Fitness import org.eclipse.viatra.query.runtime.api.IPatternMatch import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExpressionEvaluation +import org.eclipse.viatra.dse.objectives.IObjective class NumericSolver { val ModelGenerationMethod method @@ -206,7 +208,6 @@ class NumericSolver { } } else { if (needsFilling){ - //TODO ASSUME Always True //GET LIST OF VARS TO FILL val fillMap = t.delegateGetSolution(dataObjects, propagatedConstraints, selectSolver(phase)) if (fillMap === null) finalResult = false @@ -225,7 +226,9 @@ class NumericSolver { //STRATEGY if (phase == 2) { if (!finalResult) return finalResult - else finalResult = isSatisfiable(matches, 3) + else { + finalResult = isSatisfiable(matches, 3) + } } return finalResult } @@ -243,6 +246,14 @@ class NumericSolver { // -1 : take all numeric constraints // -2 : SKIP (take no numeric constraints) if (strategy == ExplorationStrategy.CrossingScenario) { +// //if has structural (non-WF) fitness issues, skip numeric handling +// val IObjective ob = threadContext.objectives.filter[it instanceof ModelGenerationCompositeObjective].get(0) +// val compo = ob as ModelGenerationCompositeObjective +// if (compo.getNonWFFitness(threadContext) > 0) { +// println("bootleg numeric-skip") +// return -2; +// } + //assumikng standard input, w/ visinBlocked and CollisionExists between pre-included actors val PartialInterpretation head = threadContext.getModel() as PartialInterpretation; val List relations = head.getPartialrelationinterpretation(); diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend index 1b61ffa5..b5b44254 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend @@ -37,6 +37,12 @@ class UnfinishedWFObjective implements IObjective { override getComparator() { Comparators.LOWER_IS_BETTER } override getFitness(ThreadContext context) { +// //MEGA ASSUMPTION Below TODO +// //if has no unfilled variables, return 0 +// val model = context.getModel as PartialInterpretation +// val unfilledDataObjects = model.newElements.filter(PrimitiveElement).filter[!model.openWorldElements.contains(it)].filter[!it.isValueSet].toList +// if (unfilledDataObjects.isEmpty) return 0.0 + var sumOfMatches = 0 for (matcher : matchers) { val number = matcher.countMatches -- cgit v1.2.3-70-g09d2