diff options
author | OszkarSemerath <oszka@152.66.252.189> | 2017-06-16 01:52:22 +0200 |
---|---|---|
committer | OszkarSemerath <oszka@152.66.252.189> | 2017-06-16 01:52:22 +0200 |
commit | ea3b5cfc3e7dc8b472cd7448f2c43477a4c33553 (patch) | |
tree | d00e8844ad43b1e1f6996306d325f14ac9d7b27c /Tests | |
parent | Instruction to install alloy added (diff) | |
download | VIATRA-Generator-ea3b5cfc3e7dc8b472cd7448f2c43477a4c33553.tar.gz VIATRA-Generator-ea3b5cfc3e7dc8b472cd7448f2c43477a4c33553.tar.zst VIATRA-Generator-ea3b5cfc3e7dc8b472cd7448f2c43477a4c33553.zip |
Divers Generation times are added to statisticsexample scenario
Diffstat (limited to 'Tests')
2 files changed, 209 insertions, 3 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend new file mode 100644 index 00000000..f2a70552 --- /dev/null +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/DiverseMeasurementRunner.xtend | |||
@@ -0,0 +1,206 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.run | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace | ||
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage | ||
6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage | ||
7 | import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.Ecore2logicannotationsPackage | ||
8 | import org.eclipse.emf.ecore.resource.Resource | ||
9 | import hu.bme.mit.inf.dslreasoner.viatra2logic.viatra2logicannotations.Viatra2LogicAnnotationsPackage | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage | ||
11 | import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl | ||
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration | ||
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.StateCoderStrategy | ||
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeInferenceMethod | ||
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor | ||
16 | import org.eclipse.xtend.lib.annotations.Data | ||
17 | import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor | ||
18 | import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor | ||
19 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic | ||
20 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic | ||
21 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic | ||
22 | import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration | ||
23 | import org.eclipse.emf.ecore.EObject | ||
24 | import java.util.List | ||
25 | import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration | ||
26 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult | ||
27 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
28 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.ModelResult | ||
29 | import hu.bme.mit.inf.dslreasoner.logic.model.statistics.StatisticSections2Print | ||
30 | |||
31 | enum Metamodel { | ||
32 | FAM, YakinduWOSynch, Yakindu | ||
33 | } | ||
34 | enum Constraints { | ||
35 | None, PlusOne, MinusOne | ||
36 | } | ||
37 | enum StateCoder { | ||
38 | ID, R1, R2, R3; | ||
39 | } | ||
40 | |||
41 | @Data | ||
42 | class Scenario { | ||
43 | int number | ||
44 | int size | ||
45 | public Metamodel metamodel | ||
46 | Constraints constraints | ||
47 | StateCoder statecoder | ||
48 | int runs | ||
49 | } | ||
50 | |||
51 | class ScenarioRunner { | ||
52 | |||
53 | // Workspace | ||
54 | private val FileSystemWorkspace inputs = new FileSystemWorkspace('''initialModels/''',"") | ||
55 | private val ViatraReasoner viatraSolver = new ViatraReasoner | ||
56 | private var MetamodelLoader loader | ||
57 | |||
58 | val Ecore2Logic ecore2Logic = new Ecore2Logic | ||
59 | val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic) | ||
60 | val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic | ||
61 | |||
62 | |||
63 | public def runScenario(Scenario scenario) { | ||
64 | init() | ||
65 | initLoader(scenario.metamodel) | ||
66 | val mm = loader.loadMetamodel() | ||
67 | val vq = loader.loadQueries(mm) | ||
68 | val ps = loader.loadPartialModel() | ||
69 | |||
70 | // printHeader(scenario) | ||
71 | |||
72 | if(scenario.constraints == Constraints.None) { | ||
73 | |||
74 | mm.attributes.forEach[it.lowerBound = 0] | ||
75 | mm.references.forEach[it.lowerBound = 0] | ||
76 | mm.references.removeAll(vq.derivedFeatures.values) | ||
77 | mm.attributes.removeAll(vq.derivedFeatures.values) | ||
78 | for(run : 1..scenario.runs) { | ||
79 | runCase(run==1,"noConstraints"+run,scenario,mm,new ViatraQuerySetDescriptor(vq.patterns,emptySet,emptyMap),ps) | ||
80 | } | ||
81 | } else { | ||
82 | |||
83 | } | ||
84 | |||
85 | |||
86 | } | ||
87 | |||
88 | // private def printHeader(Scenario scenario) { | ||
89 | // print("id;Solution type (ms);Transformation time (ms);Solver time (ms);") | ||
90 | // (1..scenario.number).forEach[print("sol"+it+" (nano);")] | ||
91 | // print("TransformationExecutionTime (ms);TypeAnalysisTime (ms);StateCoderTime (ms);SolutionCopyTime (ms);") | ||
92 | // print("SolutionDiversityCheckTime (ms);SolutionDiversitySuccessRate (%);") | ||
93 | // println("save") | ||
94 | // } | ||
95 | |||
96 | private def runCase(boolean first, String id, Scenario scenario, EcoreMetamodelDescriptor mm, ViatraQuerySetDescriptor vq, List<EObject> partialModel) { | ||
97 | // Transform | ||
98 | val metamodelProblem = ecore2Logic.transformMetamodel(mm,new Ecore2LogicConfiguration()) | ||
99 | instanceModel2Logic.transform(metamodelProblem,partialModel) | ||
100 | if(vq!=null) { | ||
101 | viatra2Logic.transformQueries(vq,metamodelProblem,new Viatra2LogicConfiguration) | ||
102 | } | ||
103 | val problem = metamodelProblem.output | ||
104 | |||
105 | var FileSystemWorkspace workspace = new FileSystemWorkspace('''output_«id»/''',"") | ||
106 | workspace.initAndClear | ||
107 | val config = getSolverConfiguration(scenario,vq) | ||
108 | |||
109 | // Execute | ||
110 | val solution = viatraSolver.solve(problem,config,workspace) | ||
111 | printStatistics(solution,scenario,workspace,id,first) | ||
112 | |||
113 | } | ||
114 | |||
115 | private def init() { | ||
116 | LogiclanguagePackage.eINSTANCE.class | ||
117 | LogicproblemPackage.eINSTANCE.class | ||
118 | PartialinterpretationPackage.eINSTANCE.class | ||
119 | Ecore2logicannotationsPackage.eINSTANCE.class | ||
120 | Viatra2LogicAnnotationsPackage.eINSTANCE.class | ||
121 | Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("ecore",new XMIResourceFactoryImpl) | ||
122 | Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi",new XMIResourceFactoryImpl) | ||
123 | Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("logicproblem",new XMIResourceFactoryImpl) | ||
124 | Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("partialinterpretation",new XMIResourceFactoryImpl) | ||
125 | } | ||
126 | |||
127 | private def initLoader(Metamodel metamodel) { | ||
128 | loader = if(metamodel == Metamodel::FAM) { | ||
129 | new FAMLoader(inputs) | ||
130 | } else if(metamodel == Metamodel::Yakindu || metamodel == Metamodel::YakinduWOSynch) { | ||
131 | new YakinduLoader(inputs) | ||
132 | } else throw new IllegalArgumentException('''Unknown domain: «metamodel»''') | ||
133 | } | ||
134 | |||
135 | def private getSolverConfiguration(Scenario scenario, ViatraQuerySetDescriptor vq) { | ||
136 | val viatraConfig = new ViatraReasonerConfiguration => [ | ||
137 | it.runtimeLimit = 300 | ||
138 | it.typeScopes.maxNewElements = scenario.size | ||
139 | it.typeScopes.minNewElements = scenario.size | ||
140 | it.solutionScope.numberOfRequiredSolution = scenario.number | ||
141 | it.existingQueries = vq.patterns.map[it.internalQueryRepresentation] | ||
142 | it.nameNewElements = false | ||
143 | it.typeInferenceMethod = TypeInferenceMethod.PreliminaryAnalysis | ||
144 | it.additionalGlobalConstraints += loader.additionalConstraints | ||
145 | it.stateCoderStrategy = StateCoderStrategy::Neighbourhood | ||
146 | if(scenario.statecoder != StateCoder::ID) { | ||
147 | val range = if(scenario.statecoder != StateCoder::R1) { | ||
148 | 1 | ||
149 | } else if(scenario.statecoder != StateCoder::R2) { | ||
150 | 2 | ||
151 | } else if(scenario.statecoder != StateCoder::R3) { | ||
152 | 3 | ||
153 | } | ||
154 | |||
155 | it.diversityRequirement = new DiversityDescriptor => [ | ||
156 | it.relevantTypes = null | ||
157 | it.relevantRelations = null | ||
158 | it.maxNumber = 1 | ||
159 | it.range = range | ||
160 | it.parallels = 1 | ||
161 | ] | ||
162 | } | ||
163 | ] | ||
164 | return viatraConfig | ||
165 | } | ||
166 | |||
167 | def printStatistics(LogicResult solution, Scenario scenario, FileSystemWorkspace workspace, String id, boolean printHeader) { | ||
168 | if(printHeader) { | ||
169 | print("id;Solution type (ms);Transformation time (ms);Solver time (ms);") | ||
170 | solution.statistics.entries.map[name].forEach[print(it+";")] | ||
171 | println("save") | ||
172 | } | ||
173 | |||
174 | |||
175 | print(id+";") | ||
176 | print(solution.class.simpleName+";"); | ||
177 | print(solution.statistics.transformationTime+";") | ||
178 | print(solution.statistics.solverTime+";") | ||
179 | |||
180 | print((new StatisticSections2Print).transformStatisticDatas2CSV(solution.statistics.entries)) | ||
181 | |||
182 | if(solution instanceof ModelResult) { | ||
183 | val representations = solution.representation | ||
184 | for(representationIndex : 0..<representations.size) { | ||
185 | val representation = representations.get(representationIndex) | ||
186 | val representationNumber = representationIndex + 1 | ||
187 | if(representation instanceof PartialInterpretation) { | ||
188 | workspace.writeModel(representation, '''solution«representationNumber».partialinterpretation''') | ||
189 | } else { | ||
190 | workspace.writeText('''solution«representationNumber».txt''',representation.toString) | ||
191 | } | ||
192 | } | ||
193 | println('''saved''') | ||
194 | } else { | ||
195 | println('''notsaved''') | ||
196 | } | ||
197 | } | ||
198 | } | ||
199 | |||
200 | class DiverseMeasurementRunner { | ||
201 | def static void main(String[] args) { | ||
202 | val scenario = new Scenario(50,50,Metamodel::Yakindu,Constraints.None,StateCoder.ID,12) | ||
203 | val scenarioRunner = new ScenarioRunner | ||
204 | scenarioRunner.runScenario(scenario) | ||
205 | } | ||
206 | } \ No newline at end of file | ||
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/RunMeasurements.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/RunMeasurements.xtend index 7ba38ede..b4ae9293 100644 --- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/RunMeasurements.xtend +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/RunMeasurements.xtend | |||
@@ -189,10 +189,10 @@ class RunMeasurements { | |||
189 | static val clean = false | 189 | static val clean = false |
190 | static val domain = Domain::Yakindu | 190 | static val domain = Domain::Yakindu |
191 | static val solver = UseSolver::Viatra | 191 | static val solver = UseSolver::Viatra |
192 | static val diverse = false | 192 | static val diverse = true |
193 | static val wf = true | 193 | static val wf = false |
194 | public static var sizes = #[50] | 194 | public static var sizes = #[50] |
195 | static var int number = 10 | 195 | static var int number = 3 |
196 | 196 | ||
197 | def static void waitForEnter() { | 197 | def static void waitForEnter() { |
198 | if(monitoring) { | 198 | if(monitoring) { |