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.xtend153
1 files changed, 89 insertions, 64 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 40ffaf28..9a8ac8a3 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
@@ -143,89 +143,114 @@ class GenerationTaskExecutor {
143 1 143 1
144 } 144 }
145 ] 145 ]
146 solverConfig.typeScopes = scopeLoader.loadScope( 146
147 val typeScopes = scopeLoader.loadScope(
147 scopeSpecification, 148 scopeSpecification,
148 problem, 149 problem,
149 ecore2Logic, 150 ecore2Logic,
150 modelGeneration.trace 151 modelGeneration.trace
151 ) 152 )
152 153 // If the type scope contains errors, then the problem is inconsistent
153 // 5.3 set resource limits 154 if(!typeScopes.value.empty) {
154 documentationLevel.ifPresent[solverConfig.documentationLevel = it] 155 monitor.worked(50)
155 runtieLimit.ifPresent[solverConfig.runtimeLimit = it] 156 console.writeMessage("Model generation started")
156 memoryLimit.ifPresent[solverConfig.memoryLimit = it] 157 typeScopes.value.forEach[console.writeMessage(it)]
157
158 // 6. execute the solver on the problem with the configuration
159 // 6.1 calculating the runs
160 val runs = if(task.runSpecified) { task.runs } else { 1 }
161 monitor.worked(50)
162
163 console.writeMessage("Model generation started")
164 for(run : 1..runs) {
165 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»''')
166 158
167 // 6.2 For each run, the configuration and the workspace is adjusted 159 val runs = if(task.runSpecified) { task.runs } else { 1 }
168 solverLoader.setRunIndex(solverConfig,configurationMap,run,console) 160 for(run : 1..runs) {
169 solverConfig.progressMonitor = new EclipseBasedProgressMonitor(monitor) 161 console.writeMessage('''Problem is inconsistent, no model is created!''')
170 val reasonerWorkspaceForRun = if(runs > 1) { 162 val statistics = new LinkedHashMap
171 reasonerWorkspace.subWorkspace('''run«run»''',"") => [initAndClear] 163 statistics.put("Task",(task.eContainer as ConfigurationScript).commands.indexOf(task)+1)
172 } else { 164 statistics.put("Run",run)
173 reasonerWorkspace 165 statistics.put("Result","InconsistencyResult")
166 statistics.put("Domain to logic transformation time",domain2LogicTransformationTime/1000000)
167 statistics.put("Logic to solver transformation time",0)
168 statistics.put("Solver time",0)
169 statistics.put("Postprocessing time",0)
170 console.addStatistics(statistics)
174 } 171 }
175 172
176 // 7. Solver call 173 } else {
177 val solution = solver.solve(problem,solverConfig,reasonerWorkspaceForRun) 174 solverConfig.typeScopes = typeScopes.key
178 console.writeMessage(solution.soutionDescription.toString) 175
176 // 5.3 set resource limits
177 documentationLevel.ifPresent[solverConfig.documentationLevel = it]
178 runtieLimit.ifPresent[solverConfig.runtimeLimit = it]
179 memoryLimit.ifPresent[solverConfig.memoryLimit = it]
179 180
180 // 8. Solution processing 181 // 6. execute the solver on the problem with the configuration
182 // 6.1 calculating the runs
183 val runs = if(task.runSpecified) { task.runs } else { 1 }
184 monitor.worked(50)
181 185
182 // 8.1 Visualisation 186 console.writeMessage("Model generation started")
183 var solutionVisualisationTime = System.nanoTime 187 for(run : 1..runs) {
184 if(solution instanceof ModelResult) { 188 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»''')
185 val interpretations = solver.getInterpretations(solution) 189
186 val outputWorkspaceForRun = if(runs > 1) { 190 // 6.2 For each run, the configuration and the workspace is adjusted
187 outputWorkspace.subWorkspace('''run«run»''',"") => [initAndClear] 191 solverLoader.setRunIndex(solverConfig,configurationMap,run,console)
192 solverConfig.progressMonitor = new EclipseBasedProgressMonitor(monitor)
193 val reasonerWorkspaceForRun = if(runs > 1) {
194 reasonerWorkspace.subWorkspace('''run«run»''',"") => [initAndClear]
188 } else { 195 } else {
189 outputWorkspace 196 reasonerWorkspace
190 } 197 }
191 198
192 for(interpretationIndex : 0..<interpretations.size) { 199 // 7. Solver call
193 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»: Visualising solution «interpretationIndex+1»/«interpretations.size»''') 200 val solution = solver.solve(problem,solverConfig,reasonerWorkspaceForRun)
194 val interpretation = interpretations.get(interpretationIndex) 201 console.writeMessage(solution.soutionDescription.toString)
195 val model = logic2Ecore.transformInterpretation(interpretation,modelGeneration.trace) 202
196 outputWorkspaceForRun.writeModel(model,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».xmi''') 203 // 8. Solution processing
204
205 // 8.1 Visualisation
206 var solutionVisualisationTime = System.nanoTime
207 if(solution instanceof ModelResult) {
208 val interpretations = solver.getInterpretations(solution)
209 val outputWorkspaceForRun = if(runs > 1) {
210 outputWorkspace.subWorkspace('''run«run»''',"") => [initAndClear]
211 } else {
212 outputWorkspace
213 }
197 214
198 val representation = solution.representation.get(interpretationIndex) 215 for(interpretationIndex : 0..<interpretations.size) {
199 if(representation instanceof PartialInterpretation) { 216 monitor.subTask('''Solving problem«IF runs>0» «run»/«runs»«ENDIF»: Visualising solution «interpretationIndex+1»/«interpretations.size»''')
200 val vis1 = new PartialInterpretation2Gml 217 val interpretation = interpretations.get(interpretationIndex)
201 val gml = vis1.transform(representation) 218 val model = logic2Ecore.transformInterpretation(interpretation,modelGeneration.trace)
202 outputWorkspaceForRun.writeText('''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».gml''',gml) 219 outputWorkspaceForRun.writeModel(model,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».xmi''')
203 if(representation.newElements.size + representation.problem.elements.size < 150) { 220
204 val vis2 = new GraphvizVisualiser 221 val representation = solution.representation.get(interpretationIndex)
205 val dot = vis2.visualiseConcretization(representation) 222 if(representation instanceof PartialInterpretation) {
206 dot.writeToFile(outputWorkspaceForRun,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».png''') 223 val vis1 = new PartialInterpretation2Gml
224 val gml = vis1.transform(representation)
225 outputWorkspaceForRun.writeText('''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».gml''',gml)
226 if(representation.newElements.size + representation.problem.elements.size < 150) {
227 val vis2 = new GraphvizVisualiser
228 val dot = vis2.visualiseConcretization(representation)
229 dot.writeToFile(outputWorkspaceForRun,'''model«IF runs>1»_«run»«ENDIF»_«interpretationIndex+1».png''')
230 }
207 } 231 }
232 monitor.worked(100)
208 } 233 }
209 monitor.worked(100) 234 } else {
235 monitor.worked(solverConfig.solutionScope.numberOfRequiredSolution*100)
210 } 236 }
211 } else { 237 solutionVisualisationTime = System.nanoTime - solutionVisualisationTime
212 monitor.worked(solverConfig.solutionScope.numberOfRequiredSolution*100) 238
239 // 8.2 Statistics
240 val statistics = new LinkedHashMap
241 statistics.put("Task",(task.eContainer as ConfigurationScript).commands.indexOf(task)+1)
242 statistics.put("Run",run)
243 statistics.put("Result",solution.class.simpleName)
244 statistics.put("Domain to logic transformation time",domain2LogicTransformationTime/1000000)
245 statistics.put("Logic to solver transformation time",solution.statistics.transformationTime)
246 statistics.put("Solver time",solution.statistics.solverTime)
247 statistics.put("Postprocessing time",solutionVisualisationTime)
248 for(entry: solution.statistics.entries) {
249 statistics.put(entry.name,statisticsUtil.readValue(entry))
250 }
251 console.addStatistics(statistics)
213 } 252 }
214 solutionVisualisationTime = System.nanoTime - solutionVisualisationTime
215 253
216 // 8.2 Statistics
217 val statistics = new LinkedHashMap
218 statistics.put("Task",(task.eContainer as ConfigurationScript).commands.indexOf(task)+1)
219 statistics.put("Run",run)
220 statistics.put("Result",solution.class.simpleName)
221 statistics.put("Domain to logic transformation time",domain2LogicTransformationTime/1000000)
222 statistics.put("Logic to solver transformation time",solution.statistics.transformationTime)
223 statistics.put("Solver time",solution.statistics.solverTime)
224 statistics.put("Postprocessing time",solutionVisualisationTime)
225 for(entry: solution.statistics.entries) {
226 statistics.put(entry.name,statisticsUtil.readValue(entry))
227 }
228 console.addStatistics(statistics)
229 } 254 }
230 console.flushStatistics 255 console.flushStatistics
231 console.writeMessage("Model generation finished") 256 console.writeMessage("Model generation finished")