aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-10-29 17:33:59 +0100
committerLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-10-29 17:33:59 +0100
commit78b145df05795a71bef18c73526b0c8ff6a53e7e (patch)
treea721e49904f752b7252657237e559c7691dc60bc
parentPolyhedron solver SAT fix and initial scope filtering (diff)
downloadVIATRA-Generator-78b145df05795a71bef18c73526b0c8ff6a53e7e.tar.gz
VIATRA-Generator-78b145df05795a71bef18c73526b0c8ff6a53e7e.tar.zst
VIATRA-Generator-78b145df05795a71bef18c73526b0c8ff6a53e7e.zip
MeasurementScriptRunner fix
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/.classpath7
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/build.properties3
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/configs/ecore_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json7
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/configs/satellite_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json6
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/script/MeasurementScriptRunner.xtend47
5 files changed, 48 insertions, 22 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/.classpath b/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/.classpath
index 4a3597ed..e7847821 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/.classpath
+++ b/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/.classpath
@@ -1,9 +1,12 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<classpath> 2<classpath>
3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> 3 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
4 <attributes>
5 <attribute name="module" value="true"/>
6 </attributes>
7 </classpathentry>
4 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 8 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
5 <classpathentry kind="src" path="src"/> 9 <classpathentry kind="src" path="src"/>
6 <classpathentry kind="src" path="xtend-gen"/> 10 <classpathentry kind="src" path="xtend-gen"/>
7 <classpathentry kind="src" path="src-gen"/>
8 <classpathentry kind="output" path="bin"/> 11 <classpathentry kind="output" path="bin"/>
9</classpath> 12</classpath>
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/build.properties b/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/build.properties
index ce900fd9..e1651110 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/build.properties
+++ b/Tests/hu.bme.mit.inf.dslreasoner.application.FAMTest/build.properties
@@ -3,6 +3,5 @@ bin.includes = META-INF/,\
3additional.bundles = org.apache.log4j,\ 3additional.bundles = org.apache.log4j,\
4 org.junit 4 org.junit
5source.. = src/,\ 5source.. = src/,\
6 xtend-gen/,\ 6 xtend-gen/
7 src-gen/
8output.. = bin/ 7output.. = bin/
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/configs/ecore_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json b/Tests/hu.bme.mit.inf.dslreasoner.run/configs/ecore_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
index 42073422..72e97957 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/configs/ecore_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/configs/ecore_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
@@ -7,9 +7,10 @@
7 "iterations": 5, 7 "iterations": 5,
8 "domain": "ecore", 8 "domain": "ecore",
9 "scope": "quantiles", 9 "scope": "quantiles",
10 "sizes": [100], 10 "sizes": [50],
11 "solver": "ViatraSolver", 11 "solver": "ViatraSolver",
12 "scopePropagator": "polyhedral", 12 "scopePropagator": "polyhedral",
13 "propagatedConstraints": "relations", 13 "propagatedConstraints": "hints",
14 "polyhedronSolver": "Clp" 14 "polyhedronSolver": "Clp",
15 "scopeHeuristic": "polyhedral"
15} 16}
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/configs/satellite_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json b/Tests/hu.bme.mit.inf.dslreasoner.run/configs/satellite_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
index 474962e7..d5469948 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/configs/satellite_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/configs/satellite_useful_ViatraSolver_polyhedral_typeHierarchy_Clp.json
@@ -1,14 +1,14 @@
1{ 1{
2 "inputPath": "initialModels", 2 "inputPath": "initialModels",
3 "outputPath": "outputModels", 3 "outputPath": "outputModels",
4 "timeout": 1200, 4 "timeout": 120,
5 "saveModels": true, 5 "saveModels": true,
6 "saveTemporaryFiles": true, 6 "saveTemporaryFiles": true,
7 "warmupIterations": 0, 7 "warmupIterations": 0,
8 "iterations": 1, 8 "iterations": 1,
9 "domain": "satellite", 9 "domain": "Yakindu",
10 "scope": "quantiles", 10 "scope": "quantiles",
11 "sizes": [50], 11 "sizes": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
12 "solver": "ViatraSolver", 12 "solver": "ViatraSolver",
13 "scopePropagator": "polyhedral", 13 "scopePropagator": "polyhedral",
14 "propagatedConstraints": "hints", 14 "propagatedConstraints": "hints",
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/script/MeasurementScriptRunner.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/script/MeasurementScriptRunner.xtend
index bfbbf329..1127f01a 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/script/MeasurementScriptRunner.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/script/MeasurementScriptRunner.xtend
@@ -1,11 +1,14 @@
1package hu.bme.mit.inf.dslreasoner.run.script 1package hu.bme.mit.inf.dslreasoner.run.script
2 2
3import com.google.gson.Gson 3import com.google.gson.Gson
4import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver
5import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration
4import hu.bme.mit.inf.dslreasoner.ecore2logic.EClassMapper 6import hu.bme.mit.inf.dslreasoner.ecore2logic.EClassMapper
5import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic 7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
6import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration 8import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace 9import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace
8import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel 10import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
11import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration
9import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes 12import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes
10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement 13import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.IntLiteral 14import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.IntLiteral
@@ -138,12 +141,10 @@ class MeasurementScriptRunner {
138 Thread.sleep(800) 141 Thread.sleep(800)
139 } 142 }
140 143
141 private def runExperiment(int modelSize) { 144 private def createViatraConfig() {
142 if (script.solver != Solver.ViatraSolver) {
143 throw new IllegalArgumentException("Only VIATRA-Generator is supported")
144 }
145 val config = new ViatraReasonerConfiguration 145 val config = new ViatraReasonerConfiguration
146 config.solutionScope.numberOfRequiredSolutions = 1 146 config.debugConfiguration.partialInterpretatioVisualiser = null
147 config.searchSpaceConstraints.additionalGlobalConstraints += metamodelLoader.additionalConstraints
147 config.scopePropagatorStrategy = switch (script.scopePropagator) { 148 config.scopePropagatorStrategy = switch (script.scopePropagator) {
148 case none: 149 case none:
149 ScopePropagatorStrategy.None 150 ScopePropagatorStrategy.None
@@ -187,11 +188,28 @@ class MeasurementScriptRunner {
187 default: 188 default:
188 throw new IllegalArgumentException("Unknown scope propagator: " + script.scopePropagator) 189 throw new IllegalArgumentException("Unknown scope propagator: " + script.scopePropagator)
189 } 190 }
191 config
192 }
193
194 private def createAlloyConfig() {
195 val config = new AlloySolverConfiguration
196 config
197 }
198
199 private def createConfig(int modelSize) {
200 val config = switch (solver : script.solver) {
201 case ViatraSolver: createViatraConfig()
202 case AlloySolver: createAlloyConfig()
203 default: throw new IllegalArgumentException("Unknown solver: " + solver)
204 }
205 config.solutionScope.numberOfRequiredSolutions = 1
190 config.runtimeLimit = script.timeout 206 config.runtimeLimit = script.timeout
191 config.documentationLevel = if(script.saveTemporaryFiles) DocumentationLevel.NORMAL else DocumentationLevel.NONE 207 config.documentationLevel = if(script.saveTemporaryFiles) DocumentationLevel.NORMAL else DocumentationLevel.NONE
192 config.debugConfiguration.partialInterpretatioVisualiser = null 208 config
193 config.searchSpaceConstraints.additionalGlobalConstraints += metamodelLoader.additionalConstraints 209 }
194 210
211 private def runExperiment(int modelSize) {
212 val config = createConfig(modelSize)
195 val modelLoadingStart = System.nanoTime 213 val modelLoadingStart = System.nanoTime
196 val metamodelDescriptor = metamodelLoader.loadMetamodel 214 val metamodelDescriptor = metamodelLoader.loadMetamodel
197 val partialModelDescriptor = metamodelLoader.loadPartialModel 215 val partialModelDescriptor = metamodelLoader.loadPartialModel
@@ -214,8 +232,8 @@ class MeasurementScriptRunner {
214 new Viatra2LogicConfiguration 232 new Viatra2LogicConfiguration
215 ).output 233 ).output
216 initializeScope(config, modelSize, problem, ecore2Logic, modelGeneration.trace) 234 initializeScope(config, modelSize, problem, ecore2Logic, modelGeneration.trace)
217 if (script.propagatedConstraints == ScopeConstraints.hints) { 235 if (config instanceof ViatraReasonerConfiguration && script.propagatedConstraints == ScopeConstraints.hints) {
218 config.hints = metamodelLoader.getHints(ecore2Logic, modelGeneration.trace) 236 (config as ViatraReasonerConfiguration).hints = metamodelLoader.getHints(ecore2Logic, modelGeneration.trace)
219 } 237 }
220 val domain2LogicTransformationTime = System.nanoTime - domain2LogicTransformationStart 238 val domain2LogicTransformationTime = System.nanoTime - domain2LogicTransformationStart
221 239
@@ -223,7 +241,11 @@ class MeasurementScriptRunner {
223 outputWorkspace.writeModel(problem, "initial.logicproblem") 241 outputWorkspace.writeModel(problem, "initial.logicproblem")
224 } 242 }
225 243
226 val solver = new ViatraReasoner 244 val solver = switch (solver : script.solver) {
245 case ViatraSolver: new ViatraReasoner
246 case AlloySolver: new AlloySolver
247 default: throw new IllegalArgumentException("Unknown solver: " + solver)
248 }
227 val result = solver.solve(problem, config, outputWorkspace) 249 val result = solver.solve(problem, config, outputWorkspace)
228 val statistics = result.statistics 250 val statistics = result.statistics
229 statistics.entries += createIntStatisticEntry => [ 251 statistics.entries += createIntStatisticEntry => [
@@ -253,7 +275,7 @@ class MeasurementScriptRunner {
253 new ExperimentResult(result.class.simpleName, statistics, modelResult) 275 new ExperimentResult(result.class.simpleName, statistics, modelResult)
254 } 276 }
255 277
256 private def initializeScope(ViatraReasonerConfiguration config, int modelSize, LogicProblem problem, 278 private def initializeScope(LogicSolverConfiguration config, int modelSize, LogicProblem problem,
257 EClassMapper eClassMapper, Ecore2Logic_Trace trace) { 279 EClassMapper eClassMapper, Ecore2Logic_Trace trace) {
258 val knownElements = initializeKnownElements(problem, config.typeScopes) 280 val knownElements = initializeKnownElements(problem, config.typeScopes)
259 if (modelSize < 0) { 281 if (modelSize < 0) {
@@ -278,7 +300,8 @@ class MeasurementScriptRunner {
278 val currentCount = if(knownInstances === null) 0 else knownInstances.size 300 val currentCount = if(knownInstances === null) 0 else knownInstances.size
279 val lowCount = Math.floor(modelSize * quantile.low) as int 301 val lowCount = Math.floor(modelSize * quantile.low) as int
280 val highCount = Math.ceil((modelSize + MODEL_SIZE_GAP) * quantile.high) as int 302 val highCount = Math.ceil((modelSize + MODEL_SIZE_GAP) * quantile.high) as int
281 config.typeScopes.minNewElementsByType.put(type, lowCount - currentCount) 303// println('''«type.name» «lowCount» «highCount»''')
304 config.typeScopes.minNewElementsByType.put(type, Math.max(lowCount - currentCount, 0))
282 config.typeScopes.maxNewElementsByType.put(type, highCount - currentCount) 305 config.typeScopes.maxNewElementsByType.put(type, highCount - currentCount)
283 } 306 }
284 } 307 }