From 8ac747b1b84513c70f8445a7c84c6a3644a1f6fa Mon Sep 17 00:00:00 2001 From: Aren Babikian Date: Fri, 22 Jan 2021 00:50:08 +0100 Subject: implement ignored attribute values as a config option --- .../execution/GenerationTaskExecutor.xtend | 24 +++++++++++----- .../application/execution/SolverLoader.xtend | 33 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 7 deletions(-) (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend index d718bb91..3563163e 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend @@ -17,11 +17,13 @@ import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml +import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvizVisualiser import hu.bme.mit.inf.dslreasoner.workspace.URIBasedWorkspace import java.io.File import java.util.LinkedHashMap import java.util.LinkedList +import java.util.Map import java.util.Optional import org.eclipse.core.runtime.IProgressMonitor import org.eclipse.emf.common.util.URI @@ -101,6 +103,13 @@ class GenerationTaskExecutor { } monitor.worked(50) + // 5. create a solver and a configuration + // 5.1 initialize + val solver = solverLoader.loadSolver(task.solver,configurationMap) + val objectiveSpecification = scriptExecutor.getObjectiveSpecification(task.objectives) + val objectiveEntries = objectiveSpecification?.entries ?: emptyList + val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap,objectiveEntries,console) + // 4. translate all description to a logic problem monitor.subTask('''Translating all resources to logic''') var domain2LogicTransformationTime = System.nanoTime @@ -112,9 +121,15 @@ class GenerationTaskExecutor { var modelGeneration = ecore2Logic.transformMetamodel(metamodelDescriptor,new Ecore2LogicConfiguration()) var problem = modelGeneration.output if(partialModelDescriptor !== null) { + //get ignored attributes + var Map>ignoredAttributes = null + if (solverConfig instanceof ViatraReasonerConfiguration) + ignoredAttributes = (solverConfig as ViatraReasonerConfiguration).ignoredAttributesMap + problem = instanceModel2Logic.transform( modelGeneration, - partialModelDescriptor + partialModelDescriptor, + ignoredAttributes ).output } if(queryDescriptor !== null){ @@ -128,13 +143,8 @@ class GenerationTaskExecutor { if(documentationLevel.atLeastNormal) { reasonerWorkspace.writeModel(problem,"generation.logicproblem") } + // END 4 - // 5. create a solver and a configuration - // 5.1 initialize - val solver = solverLoader.loadSolver(task.solver,configurationMap) - val objectiveSpecification = scriptExecutor.getObjectiveSpecification(task.objectives) - val objectiveEntries = objectiveSpecification?.entries ?: emptyList - val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap,objectiveEntries,console) // 5.2 set values that defined directly solverConfig.solutionScope = new SolutionScope => [ it.numberOfRequiredSolutions = if(task.numberSpecified) { diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend index 94b84bc3..da8ca0eb 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend @@ -30,6 +30,7 @@ import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.xbase.lib.Functions.Function1 import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloyBackendSolver import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.NumericSolverSelection +import java.util.HashMap class SolverLoader { def loadSolver(Solver solver, Map config) { @@ -166,6 +167,10 @@ class SolverLoader { default: throw new IllegalArgumentException("Unknown scope propagator: " + stringValue) } } + if (config.containsKey("ignored-attributes")) { + val stringValue = config.get("ignored-attributes") + c.ignoredAttributesMap = parseIgnoredAttributes(stringValue) + } for (objectiveEntry : objectiveEntries) { val costObjectiveConfig = new CostObjectiveConfiguration switch (objectiveEntry) { @@ -232,6 +237,34 @@ class SolverLoader { throw new UnsupportedOperationException('''Unknown solver: «solver»''') } } + + def Map> parseIgnoredAttributes(String input) { + val Map> clAttVal = newHashMap + val List entries = input.split(",") + //TODO add some validation here + for (entry : entries) { + val List components = entry.split("=") + if (components.size != 2) + throw new IllegalArgumentException("Invalid ignoredAttributes Specification: \"" + entry + "\"") + + val clAtt = components.get(0) + val List clAttArray = clAtt.split("\\.") + if (clAttArray.size != 2) + throw new IllegalArgumentException("Invalid attribute specification : \"" + clAtt + "\"") + + val c = clAttArray.get(0).strip + val a = clAttArray.get(1).strip + val v = components.get(1).strip + + val clInMap = clAttVal.get(c) + if (clInMap === null) { + clAttVal.put(c, newHashMap(a -> v)) + } else { + clInMap.put(a, v) + } + } + return clAttVal + } def dispatch void setRunIndex(AlloySolverConfiguration config, Map parameters, int runIndex, ScriptConsole console) { -- cgit v1.2.3-70-g09d2