aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend32
1 files changed, 26 insertions, 6 deletions
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 9ffd33c5..05d4e0c0 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
@@ -16,12 +16,14 @@ import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml 18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretation2Gml
19import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvizVisualisation; 19import hu.bme.mit.inf.dslreasoner.visualisation.pi2graphviz.GraphvizVisualisation
20import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace 20import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace
21import java.util.Optional 21import java.util.Optional
22import org.eclipse.emf.common.util.URI
23import org.eclipse.core.runtime.IProgressMonitor 22import org.eclipse.core.runtime.IProgressMonitor
24import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolverProgressMonitor 23import org.eclipse.emf.common.util.URI
24import java.util.LinkedHashMap
25import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
26import hu.bme.mit.inf.dslreasoner.logic.model.statistics.StatisticSections2CSV
25 27
26class GenerationTaskExecutor { 28class GenerationTaskExecutor {
27 val metamodelLoader = new MetamodelLoader 29 val metamodelLoader = new MetamodelLoader
@@ -29,6 +31,7 @@ class GenerationTaskExecutor {
29 val queryLoader = new QueryLoader 31 val queryLoader = new QueryLoader
30 val solverLoader = new SolverLoader 32 val solverLoader = new SolverLoader
31 val scopeLoader = new ScopeLoader 33 val scopeLoader = new ScopeLoader
34 val statisticsUtil = new StatisticSections2CSV
32 35
33 val metamodelValidator = new MetamodelValidator 36 val metamodelValidator = new MetamodelValidator
34 val queryAndMetamodelValidator = new QueryAndMetamodelValidator 37 val queryAndMetamodelValidator = new QueryAndMetamodelValidator
@@ -57,7 +60,7 @@ class GenerationTaskExecutor {
57 val memoryLimit = scriptExecutor.getMemoryLimit(configSpecification) 60 val memoryLimit = scriptExecutor.getMemoryLimit(configSpecification)
58 61
59 // 2. create console 62 // 2. create console
60 val console = new ScriptConsole(true,true, 63 val console = new ScriptConsole(false,true,false,
61 if(messageFile!==null) URI.createURI(messageFile.path) else null, 64 if(messageFile!==null) URI.createURI(messageFile.path) else null,
62 if(debugFolder!==null) URI.createURI('''«debugFolder.path»/errors.txt''') else null, 65 if(debugFolder!==null) URI.createURI('''«debugFolder.path»/errors.txt''') else null,
63 if(statisticsFile!==null) URI.createURI(statisticsFile.path) else null 66 if(statisticsFile!==null) URI.createURI(statisticsFile.path) else null
@@ -98,6 +101,7 @@ class GenerationTaskExecutor {
98 101
99 // 4. translate all description to a logic problem 102 // 4. translate all description to a logic problem
100 monitor.subTask('''Translating all resources to logic''') 103 monitor.subTask('''Translating all resources to logic''')
104 var domain2LogicTransformationTime = System.nanoTime
101 val Ecore2Logic ecore2Logic = new Ecore2Logic 105 val Ecore2Logic ecore2Logic = new Ecore2Logic
102 val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic) 106 val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic)
103 val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) 107 val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic)
@@ -118,6 +122,7 @@ class GenerationTaskExecutor {
118 new Viatra2LogicConfiguration 122 new Viatra2LogicConfiguration
119 ).output 123 ).output
120 } 124 }
125 domain2LogicTransformationTime = System.nanoTime-domain2LogicTransformationTime
121 if(documentationLevel.atLeastNormal) { 126 if(documentationLevel.atLeastNormal) {
122 reasonerWorkspace.writeModel(problem,"generation.logicproblem") 127 reasonerWorkspace.writeModel(problem,"generation.logicproblem")
123 } 128 }
@@ -161,7 +166,7 @@ class GenerationTaskExecutor {
161 solverLoader.setRunIndex(solverConfig,configurationMap,run,console) 166 solverLoader.setRunIndex(solverConfig,configurationMap,run,console)
162 solverConfig.progressMonitor = new EclipseProgressMonitor(monitor) 167 solverConfig.progressMonitor = new EclipseProgressMonitor(monitor)
163 val reasonerWorkspaceForRun = if(runs > 1) { 168 val reasonerWorkspaceForRun = if(runs > 1) {
164 reasonerWorkspace.subWorkspace('''run«run»''',"") => [init] 169 reasonerWorkspace.subWorkspace('''run«run»''',"") => [initAndClear]
165 } else { 170 } else {
166 reasonerWorkspace 171 reasonerWorkspace
167 } 172 }
@@ -171,6 +176,8 @@ class GenerationTaskExecutor {
171 console.writeMessage(solution.soutionDescription.toString) 176 console.writeMessage(solution.soutionDescription.toString)
172 177
173 // 8. Solution processing 178 // 8. Solution processing
179
180 // 8.1 Visualisation
174 if(solution instanceof ModelResult) { 181 if(solution instanceof ModelResult) {
175 val interpretations = solver.getInterpretations(solution) 182 val interpretations = solver.getInterpretations(solution)
176 val outputWorkspaceForRun = if(runs > 1) { 183 val outputWorkspaceForRun = if(runs > 1) {
@@ -180,7 +187,7 @@ class GenerationTaskExecutor {
180 } 187 }
181 188
182 for(interpretationIndex : 0..<interpretations.size) { 189 for(interpretationIndex : 0..<interpretations.size) {
183 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»: Visualising solution «interpretationIndex»/«interpretations.size»''') 190 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»: Visualising solution «interpretationIndex+1»/«interpretations.size»''')
184 val interpretation = interpretations.get(interpretationIndex) 191 val interpretation = interpretations.get(interpretationIndex)
185 val model = logic2Ecore.transformInterpretation(interpretation,modelGeneration.trace) 192 val model = logic2Ecore.transformInterpretation(interpretation,modelGeneration.trace)
186 outputWorkspaceForRun.writeModel(model,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».xmi''') 193 outputWorkspaceForRun.writeModel(model,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».xmi''')
@@ -202,7 +209,20 @@ class GenerationTaskExecutor {
202 monitor.worked(solverConfig.solutionScope.numberOfRequiredSolution*100) 209 monitor.worked(solverConfig.solutionScope.numberOfRequiredSolution*100)
203 } 210 }
204 211
212 // 8.2 Statistics
213 val statistics = new LinkedHashMap
214 statistics.put("Task",(task.eContainer as ConfigurationScript).commands.indexOf(task)+1)
215 statistics.put("Run",run)
216 statistics.put("Result",solution.class.simpleName)
217 statistics.put("Domain to logic transformation time",domain2LogicTransformationTime/1000000)
218 statistics.put("Logic to solver transformation time",solution.statistics.transformationTime)
219 statistics.put("Solver time",solution.statistics.solverTime)
220 for(entry: solution.statistics.entries) {
221 statistics.put(entry.name,statisticsUtil.readValue(entry))
222 }
223 console.addStatistics(statistics)
205 } 224 }
225 console.flushStatistics
206 console.writeMessage("Model generation finished") 226 console.writeMessage("Model generation finished")
207 } catch(Exception e) { 227 } catch(Exception e) {
208 console.writeError('''Error occured: «e.message»''') 228 console.writeError('''Error occured: «e.message»''')