diff options
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.xtend | 70 |
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 | |||
5 | import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator | 5 | import hu.bme.mit.inf.dslreasoner.application.validation.QueryAndMetamodelValidator |
6 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | 6 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic |
7 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration | 7 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration |
8 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope | 9 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.SolutionScope |
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult | 10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.InconsistencyResult |
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | 11 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult |
@@ -14,6 +15,7 @@ import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic | |||
14 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration | 15 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration |
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic | 16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic |
16 | import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace | 17 | import hu.bme.mit.inf.dslreasoner.workspace.ProjectWorkspace |
18 | import java.util.Optional | ||
17 | import org.eclipse.emf.common.util.URI | 19 | import org.eclipse.emf.common.util.URI |
18 | 20 | ||
19 | class GenerationTaskExecutor { | 21 | class 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 |