aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend')
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend182
1 files changed, 182 insertions, 0 deletions
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend
new file mode 100644
index 00000000..dbc90e97
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/src/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTestViatra.xtend
@@ -0,0 +1,182 @@
1package ca.mcgill.ecse.dslreasoner.vampire.icse
2
3import ca.mcgill.ecse.dslreasoner.vampire.queries.Patterns
4import ca.mcgill.ecse.dslreasoner.vampire.yakindumm.YakindummPackage
5import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver
6import hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolverConfiguration
7import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic
8import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration
9import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel
10import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.IntStatisticEntry
11import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult
12import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.StringStatisticEntry
13import hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore
14import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic
15import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2LogicConfiguration
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic
17import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace
18import java.io.PrintWriter
19import java.text.SimpleDateFormat
20import java.util.Date
21import org.eclipse.emf.ecore.resource.Resource
22import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
23import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.impl.ModelResultImpl
24import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner
25import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration
26
27class YakinduTestViatra {
28 def static void main(String[] args) {
29 val Ecore2Logic ecore2Logic = new Ecore2Logic
30 val Logic2Ecore logic2Ecore = new Logic2Ecore(ecore2Logic)
31 val Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic)
32 val InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic
33
34 // Workspace setup
35 val Date date = new Date(System.currentTimeMillis)
36 val SimpleDateFormat format = new SimpleDateFormat("dd-HHmm");
37 val formattedDate = format.format(date)
38
39 val inputs = new FileSystemWorkspace('''initialModels/''', "")
40 val dataWorkspace = new FileSystemWorkspace('''output/YakinduTest/''', "")
41 val workspace = new FileSystemWorkspace('''output/YakinduTest/''' + formattedDate + '''/''', "")
42 workspace.initAndClear
43
44 // Logicproblem writing setup
45 val reg = Resource.Factory.Registry.INSTANCE
46 val map = reg.extensionToFactoryMap
47 map.put("logicproblem", new XMIResourceFactoryImpl)
48
49 println("Input and output workspaces are created")
50
51 val metamodel = GeneralTest.loadMetamodel(YakindummPackage.eINSTANCE)
52 val partialModel = GeneralTest.loadPartialModel(inputs, "yakindu/Yakindu.xmi")
53 val queries = GeneralTest.loadQueries(metamodel, Patterns.instance)
54// val metamodel = GeneralTest.loadMetamodel(FunctionalarchitecturePackage.eINSTANCE)
55// val partialModel = GeneralTest.loadPartialModel(inputs, "FAM/FaModel.xmi")
56// val queries = GeneralTest.loadQueries(metamodel, FamPatterns.instance)
57// val queries = null
58 println("DSL loaded")
59
60 var SZ_TOP = 20
61 var SZ_BOT = 20
62 var INC = 20
63 var REPS = 5
64
65 val RUNTIME = 300
66
67 var solverTimes = newArrayList
68 var transformationTimes = newArrayList
69 var LogicResult solution = null
70 var solver = "Viatra"
71 var index = 2
72
73 for (var i = SZ_BOT; i <= SZ_TOP; i += INC*index) {
74 index*=2
75 var writer = new PrintWriter(
76 dataWorkspace.workspaceURI + "//_viatra" + i + "x" + REPS + "-" + formattedDate + ".csv")
77 writer.append("solver,size,TransformatonTime,sat?,kodkodTime,model?,modelTime\n")
78
79 val num = (i - SZ_BOT) / INC
80 println()
81 println("SOLVER: " + solver + ", SIZE=" + i)
82 println()
83
84 solverTimes.clear
85 transformationTimes.clear
86 for (var j = 0; j < REPS; j++) {
87
88 println("<<Run number " + j + ">> :")
89
90 val modelGenerationProblem = ecore2Logic.transformMetamodel(metamodel, new Ecore2LogicConfiguration())
91 var modelExtensionProblem = instanceModel2Logic.transform(modelGenerationProblem, partialModel)
92 var validModelExtensionProblem = viatra2Logic.transformQueries(queries, modelExtensionProblem,
93 new Viatra2LogicConfiguration)
94
95 var problem = modelGenerationProblem.output
96 workspace.writeModel(problem, "Yakindu.logicproblem")
97// println("Problem created")
98// Start Time
99 var startTime = System.currentTimeMillis
100
101 var ViatraReasoner reasoner
102 // *
103 reasoner = new ViatraReasoner
104
105 // /////////////////////////////////////////////////////
106 // Define Config File
107 val size = i
108 val inc = INC
109 val iter = j
110 val solverConfig = new ViatraReasonerConfiguration => [
111 // add configuration things, in config file first
112// it.documentationLevel = DocumentationLevel::FULL
113// it.iteration = iter
114 it.runtimeLimit = RUNTIME
115 it.typeScopes.maxNewElements = size
116 it.typeScopes.minNewElements = size
117 ]
118
119 solution = reasoner.solve(problem, solverConfig, workspace)
120// print((solution as ModelResult).representation.get(0))
121// val soln = ((solution as ModelResult).representation.get(0) as VampireModel)
122// println(soln.confirmations)
123// println((solution as ModelResult).representation)
124// modelFound = !soln.confirmations.filter [
125// class == VLSFiniteModelImpl
126// ].isEmpty
127// ADD TO CSV
128 writer.append(solver + ",")
129 writer.append(size + ",")
130 writer.append(solution.statistics.transformationTime / 1000.0 + ",")
131
132// val satOut = (solution.statistics.entries.filter[name == "satOut"].get(0) as StringStatisticEntry).
133// value
134 val modOut = if(solution.class == ModelResultImpl) "FiniteModel" else "no"
135// val modTime = (solution.statistics.entries.filter[name.contains("Answer")].
136// get(0) as StringStatisticEntry).value
137 val modTime = solution.statistics.solverTime / 1000.0
138
139 writer.append("-,")
140 writer.append("-,")
141 writer.append(modOut + ",")
142 writer.append(modTime.toString + "")
143 writer.append("\n")
144
145 println("->" + modOut + " ... " + modTime)
146
147 // Run Garbage Collector
148 val Runtime r = Runtime.getRuntime();
149 r.gc();
150 r.gc();
151 r.gc();
152 Thread.sleep(3000)
153
154// print("(" + tTime + "/" + sTime + "s)..")
155// solverTimes.add(sTime)
156// transformationTimes.add(tTime)
157// } else {
158// writer.append("MNF" + ",")
159//// print("MNF")
160// }
161 // println("Problem solved")
162 // visualisation, see
163// var interpretations = reasoner.getInterpretations(solution as ModelResult)
164// for (interpretation : interpretations) {
165// val model = logic2Ecore.transformInterpretation(interpretation, modelGenerationProblem.trace)
166// workspace.writeModel(model, "model.xmi")
167// }
168// var totalTimeMin = (System.currentTimeMillis - startTime) / 60000
169// var totalTimeSec = ((System.currentTimeMillis - startTime) / 1000) % 60
170// println("Problem solved")
171// println("Time was: " + totalTimeMin + ":" + totalTimeSec)
172 }
173// println()
174// var solverMed = solverTimes.sort.get(REPS / 2)
175// var transformationMed = transformationTimes.sort.get(REPS / 2)
176// writer.append(solverMed.toString + "," + transformationMed.toString)
177 writer.close
178 }
179
180 }
181
182}