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:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-24 20:56:42 -0500
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-24 20:56:42 -0500
commit5f1117a84bc3c24ec71d6bcb9d3f2badffca28c2 (patch)
tree8f0b68af71ae18429c134a533b9951ccd21af558 /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/GenerationTaskExecutor.xtend
parentApplication configuration update (diff)
downloadVIATRA-Generator-5f1117a84bc3c24ec71d6bcb9d3f2badffca28c2.tar.gz
VIATRA-Generator-5f1117a84bc3c24ec71d6bcb9d3f2badffca28c2.tar.zst
VIATRA-Generator-5f1117a84bc3c24ec71d6bcb9d3f2badffca28c2.zip
Execution update
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.xtend70
1 files changed, 55 insertions, 15 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 635d9dcc..44d9fab0 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
@@ -5,6 +5,7 @@ import hu.bme.mit.inf.dslreasoner.application.validation.MetamodelValidator
5import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator 5import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator
6import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 6import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration 7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
8import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
8import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope 9import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope
9import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult 10import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult
10import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult 11import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult
@@ -14,6 +15,7 @@ import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic
14import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration 15import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic
16import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace 17import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace
18import java.util.Optional
17import org.eclipse.emf.common.util.URI 19import org.eclipse.emf.common.util.URI
18 20
19class GenerationTaskExecutor { 21class GenerationTaskExecutor {
@@ -36,13 +38,17 @@ class GenerationTaskExecutor {
36 val patternSpecification = scriptExecutor.getPatternSpecification(task.patterns) 38 val patternSpecification = scriptExecutor.getPatternSpecification(task.patterns)
37 val partialmodelSpecification = scriptExecutor.getPartialModelSpecification(task.partialModel) 39 val partialmodelSpecification = scriptExecutor.getPartialModelSpecification(task.partialModel)
38 val scopeSpecification = scriptExecutor.getScopeSpecification(task.scope) 40 val scopeSpecification = scriptExecutor.getScopeSpecification(task.scope)
39 val configurationMap = scriptExecutor.transformToMap( 41
40 scriptExecutor.getConfiguration(task.config))
41 val messageFile = scriptExecutor.getFileSpecification(task.targetLogFile) 42 val messageFile = scriptExecutor.getFileSpecification(task.targetLogFile)
42 val debugFolder = scriptExecutor.getFileSpecification(task.debugFolder) 43 val debugFolder = scriptExecutor.getFileSpecification(task.debugFolder)
43 val outputFolder = scriptExecutor.getFileSpecification(task.getTagetFolder) 44 val outputFolder = scriptExecutor.getFileSpecification(task.getTagetFolder)
44 val statisticsFile = scriptExecutor.getFileSpecification(task.targetStatisticsFile) 45 val statisticsFile = scriptExecutor.getFileSpecification(task.targetStatisticsFile)
45 46
47 val configSpecification = scriptExecutor.getConfiguration(task.config)
48 val configurationMap = scriptExecutor.transformToMap(configSpecification)
49 val documentationLevel = scriptExecutor.getDocumentation(configSpecification)
50 val runtieLimit = scriptExecutor.getRuntimeLimit(configSpecification)
51 val memoryLimit = scriptExecutor.getMemoryLimit(configSpecification)
46 // 2. create console 52 // 2. create console
47 53
48 val console = new ScriptConsole(true,true, 54 val console = new ScriptConsole(true,true,
@@ -94,12 +100,16 @@ class GenerationTaskExecutor {
94 // 5. create a solver and a configuration 100 // 5. create a solver and a configuration
95 // 5.1 initialize 101 // 5.1 initialize
96 val solver = solverLoader.loadSolver(task.solver,configurationMap) 102 val solver = solverLoader.loadSolver(task.solver,configurationMap)
97 val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap) 103 val solverConfig = solverLoader.loadSolverConfig(task.solver,configurationMap,console)
98 val reasonerWorkspace = if(debugFolder!== null) { 104 val reasonerWorkspace = if(debugFolder!== null) {
99 new ProjectWorkspace(debugFolder.path,"") 105 new ProjectWorkspace(debugFolder.path,"")
100 } else { 106 } else {
101 new NullWorkspace 107 new NullWorkspace
102 } 108 }
109 reasonerWorkspace.initAndClear
110 if(documentationLevel.atLeastNormal) {
111 reasonerWorkspace.writeModel(problem,"generation.logicproblem")
112 }
103 113
104 // 5.2 set values that defined directly 114 // 5.2 set values that defined directly
105 solverConfig.solutionScope = new SolutionScope => [ 115 solverConfig.solutionScope = new SolutionScope => [
@@ -116,33 +126,55 @@ class GenerationTaskExecutor {
116 modelGeneration.trace 126 modelGeneration.trace
117 ) 127 )
118 128
129 // 5.3 set resource limits
130 documentationLevel.ifPresent[solverConfig.documentationLevel = it]
131 runtieLimit.ifPresent[solverConfig.runtimeLimit = it]
132 memoryLimit.ifPresent[solverConfig.memoryLimit = it]
133
119 // 6. execute the solver on the problem with the configuration 134 // 6. execute the solver on the problem with the configuration
120 val runs = if(task.runSpecified) { 135 // 6.1 calculating the runs
121 task.runs 136 val runs = if(task.runSpecified) { task.runs } else { 1 }
122 } else { 137 console.writeMessage("Model generation started")
123 1
124 }
125 console.writeMessage("Start model generation")
126 138
127 for(run : 1..runs) { 139 for(run : 1..runs) {
128 val solution = solver.solve(problem,solverConfig,reasonerWorkspace) 140
141 // 6.2 For each run, the configuration and the workspace is adjusted
142 solverLoader.setRunIndex(solverConfig,configurationMap,run,console)
143 val reasonerWorkspaceForRun = if(runs > 1) {
144 reasonerWorkspace.subWorkspace('''run«run»''',"") => [initAndClear]
145 } else {
146 reasonerWorkspace
147 }
148
149 // 7. Solver call
150
151 val solution = solver.solve(problem,solverConfig,reasonerWorkspaceForRun)
152
129 console.writeMessage(solution.soutionDescription.toString) 153 console.writeMessage(solution.soutionDescription.toString)
154
155 // 8. Solution processing
156 if(solution instanceof ModelResult) {
157 //
158 val interpretations = solver.getInterpretations(solution)
159 }
160
130 } 161 }
162 console.writeMessage("Model generation finished")
131 } 163 }
132 164
133 private def dispatch soutionDescription(InconsistencyResult s) { 165 private def dispatch soutionDescription(InconsistencyResult s) {
134 if(s.representation.size == 1) { 166 if(s.representation.size == 0) {
135 '''Problem is inconsistent!''' 167 '''Problem is inconsistent, no model is created!'''
136 } else { 168 } else {
137 '''Problem is inconsistent, only «s.representation.size» model can be created!''' 169 '''Problem is inconsistent, only «s.representation.size» model«IF s.representation.size>1»s«ENDIF» can be created!'''
138 } 170 }
139 } 171 }
140 172
141 private def dispatch soutionDescription(ModelResult s) { 173 private def dispatch soutionDescription(ModelResult s) {
142 if(s.representation.size == 1) { 174 if(s.representation.size == 1) {
143 '''Problem is consistent!''' 175 '''Problem is consistent, a model is generated'''
144 } else { 176 } else {
145 '''Problem is consistent, «s.representation.size» model generated!''' 177 '''Problem is consistent, «s.representation.size» models are generated!'''
146 } 178 }
147 } 179 }
148 180
@@ -153,4 +185,12 @@ class GenerationTaskExecutor {
153 '''Unable to solve problem, but «s.representation.size» model generated!''' 185 '''Unable to solve problem, but «s.representation.size» model generated!'''
154 } 186 }
155 } 187 }
188
189 private def atLeastNormal(Optional<DocumentationLevel> level) {
190 if(level.isPresent) {
191 return (level.get !== DocumentationLevel.NONE)
192 } else {
193 return false
194 }
195 }
156} \ No newline at end of file 196} \ No newline at end of file