From c05d5d65970b7d55f296bf7d3ec7bc3c134a7efc Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Wed, 28 Feb 2018 18:13:31 -0500 Subject: fixed default model number overriding custom value + added visualisation --- .../execution/GenerationTaskExecutor.xtend | 61 ++++++++++++++++++---- .../application/execution/ModelLoader.xtend | 7 ++- 2 files changed, 53 insertions(+), 15 deletions(-) (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf') 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 44d9fab0..33f59413 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 @@ -14,6 +14,9 @@ import hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic 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.visualisation.pi2graphviz.GraphvizVisualisation; import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace import java.util.Optional import org.eclipse.emf.common.util.URI @@ -51,6 +54,19 @@ class GenerationTaskExecutor { val memoryLimit = scriptExecutor.getMemoryLimit(configSpecification) // 2. create console + val reasonerWorkspace = if(debugFolder!== null) { + new ProjectWorkspace(debugFolder.path,"") + } else { + new NullWorkspace + } + reasonerWorkspace.initAndClear + val outputWorkspace = if(outputFolder !== null) { + new ProjectWorkspace(outputFolder.path,"") + } else { + new NullWorkspace + } + outputWorkspace.initAndClear + val console = new ScriptConsole(true,true, if(messageFile!==null) URI.createURI(messageFile.path) else null, if(debugFolder!==null) URI.createURI('''«debugFolder.path»/errors.txt''') else null, @@ -96,27 +112,22 @@ class GenerationTaskExecutor { new Viatra2LogicConfiguration ).output } + if(documentationLevel.atLeastNormal) { + reasonerWorkspace.writeModel(problem,"generation.logicproblem") + } // 5. create a solver and a configuration // 5.1 initialize val solver = solverLoader.loadSolver(task.solver,configurationMap) val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap,console) - val reasonerWorkspace = if(debugFolder!== null) { - new ProjectWorkspace(debugFolder.path,"") - } else { - new NullWorkspace - } - reasonerWorkspace.initAndClear - if(documentationLevel.atLeastNormal) { - reasonerWorkspace.writeModel(problem,"generation.logicproblem") - } + // 5.2 set values that defined directly solverConfig.solutionScope = new SolutionScope => [ it.numberOfRequiredSolution = if(task.numberSpecified) { - 1 - } else { task.number + } else { + 1 } ] solverConfig.typeScopes = scopeLoader.loadScope( @@ -146,6 +157,7 @@ class GenerationTaskExecutor { reasonerWorkspace } + // 7. Solver call val solution = solver.solve(problem,solverConfig,reasonerWorkspaceForRun) @@ -156,6 +168,33 @@ class GenerationTaskExecutor { if(solution instanceof ModelResult) { // val interpretations = solver.getInterpretations(solution) + val outputWorkspaceForRun = if(runs > 1) { + outputWorkspace.subWorkspace('''run«run»''',"") => [initAndClear] + } else { + outputWorkspace + } + + for(interpretationIndex : 0..1»_«run»«ENDIF»_«interpretationIndex».xmi''') + + val representation = solution.representation.get(interpretationIndex) + if(representation instanceof PartialInterpretation) { + val vis1 = new PartialInterpretation2Gml + val gml = vis1.transform(representation) + outputWorkspaceForRun.writeText('''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex».gml''',gml) + if(representation.newElements.size + representation.problem.elements.size < 150) { + val vis2 = new GraphvizVisualisation + val dot = vis2.visualiseConcretization(representation) + dot.writeToFile(outputWorkspaceForRun,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex»''') + } + } + } + + for(representation : solution.representation) { + + } } } diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend index ca674280..350901ea 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend @@ -1,10 +1,9 @@ package hu.bme.mit.inf.dslreasoner.application.execution -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl -import org.eclipse.emf.common.util.URI import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PartialModelSpecification -import org.eclipse.emf.ecore.EObject import java.util.List +import org.eclipse.emf.common.util.URI +import org.eclipse.emf.ecore.EObject class ModelLoader { @@ -20,7 +19,7 @@ class ModelLoader { return null } - val resourceSet = new ResourceSetImpl + val resourceSet = specification.eResource.resourceSet val resource = resourceSet.getResource(uri, true) if (resource === null) { } else { -- cgit v1.2.3-54-g00ecf