aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu
diff options
context:
space:
mode:
Diffstat (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu')
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbinbin0 -> 5693 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbinbin0 -> 11104 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.gitignore2
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java77
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CpsToLpTranslator.java505
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbinbin0 -> 7626 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbinbin0 -> 5189 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsSolver.xtendbinbin0 -> 7336 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.gitignore3
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/CpsStateCoder.java316
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsMain.java46
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.java93
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbinbin0 -> 8807 bytes
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java154
14 files changed, 1196 insertions, 0 deletions
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin
new file mode 100644
index 00000000..3f9e895d
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin
new file mode 100644
index 00000000..d8814a3b
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.gitignore b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.gitignore
new file mode 100644
index 00000000..9f908c7a
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.gitignore
@@ -0,0 +1,2 @@
1/.CpsToLpTranslator.java._trace
2/.CbcCpsMain.java._trace
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java
new file mode 100644
index 00000000..d36cdccd
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java
@@ -0,0 +1,77 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.cplex;
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage;
4import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
5import hu.bme.mit.inf.dslreasoner.domains.cps.cplex.CpsToLpTranslator;
6import hu.bme.mit.inf.dslreasoner.domains.cps.generator.CpsGenerator;
7import java.io.BufferedReader;
8import java.io.BufferedWriter;
9import java.io.FileReader;
10import java.io.FileWriter;
11import java.util.Map;
12import java.util.concurrent.TimeUnit;
13import java.util.function.Consumer;
14import org.eclipse.emf.ecore.EPackage;
15import org.eclipse.emf.ecore.resource.Resource;
16import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
17import org.eclipse.xtext.xbase.lib.Exceptions;
18import org.eclipse.xtext.xbase.lib.InputOutput;
19
20@SuppressWarnings("all")
21public class CbcCpsMain {
22 private static final String PROBLEM_FILE = "problem.lp";
23
24 private static final String SOLUTION_FILE = "solution.txt";
25
26 private CbcCpsMain() {
27 new IllegalStateException("This is a static utility class and should not be instantiated directly.");
28 }
29
30 public static void main(final String[] args) {
31 try {
32 Map<String, Object> _extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap();
33 XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl();
34 _extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, _xMIResourceFactoryImpl);
35 EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE);
36 final CpsGenerator generator = new CpsGenerator(1, 4, 1);
37 final CyberPhysicalSystem problem = generator.generateCpsProblem();
38 final CpsToLpTranslator toLp = new CpsToLpTranslator(problem, 10, true);
39 final CharSequence lp = toLp.getLpProblem();
40 FileWriter _fileWriter = new FileWriter(CbcCpsMain.PROBLEM_FILE);
41 final BufferedWriter writer = new BufferedWriter(_fileWriter);
42 try {
43 writer.append(lp);
44 } finally {
45 writer.close();
46 }
47 final Process process = new ProcessBuilder().inheritIO().command("cbc", CbcCpsMain.PROBLEM_FILE, "solve", "solu", CbcCpsMain.SOLUTION_FILE).start();
48 boolean _waitFor = process.waitFor(120, TimeUnit.SECONDS);
49 boolean _not = (!_waitFor);
50 if (_not) {
51 System.err.println("Timeout reached");
52 process.destroyForcibly();
53 System.exit((-1));
54 }
55 int _exitValue = process.exitValue();
56 boolean _notEquals = (_exitValue != 0);
57 if (_notEquals) {
58 int _exitValue_1 = process.exitValue();
59 String _plus = ("Unexpected exit value " + Integer.valueOf(_exitValue_1));
60 System.err.println(_plus);
61 System.exit((-1));
62 }
63 FileReader _fileReader = new FileReader(CbcCpsMain.SOLUTION_FILE);
64 final BufferedReader reader = new BufferedReader(_fileReader);
65 try {
66 final Consumer<String> _function = (String it) -> {
67 InputOutput.<String>println(it);
68 };
69 reader.lines().forEach(_function);
70 } finally {
71 reader.close();
72 }
73 } catch (Throwable _e) {
74 throw Exceptions.sneakyThrow(_e);
75 }
76 }
77}
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CpsToLpTranslator.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CpsToLpTranslator.java
new file mode 100644
index 00000000..20afeee6
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CpsToLpTranslator.java
@@ -0,0 +1,505 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.cplex;
2
3import com.google.common.base.Objects;
4import com.google.common.collect.ImmutableList;
5import com.google.common.collect.ImmutableMap;
6import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationType;
7import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
8import hu.bme.mit.inf.dslreasoner.domains.cps.HostType;
9import hu.bme.mit.inf.dslreasoner.domains.cps.Request;
10import hu.bme.mit.inf.dslreasoner.domains.cps.Requirement;
11import hu.bme.mit.inf.dslreasoner.domains.cps.ResourceRequirement;
12import java.util.Collection;
13import java.util.List;
14import java.util.Map;
15import org.eclipse.emf.common.util.EList;
16import org.eclipse.xtend2.lib.StringConcatenation;
17import org.eclipse.xtext.xbase.lib.CollectionLiterals;
18import org.eclipse.xtext.xbase.lib.ExclusiveRange;
19import org.eclipse.xtext.xbase.lib.Functions.Function1;
20import org.eclipse.xtext.xbase.lib.IterableExtensions;
21import org.eclipse.xtext.xbase.lib.ListExtensions;
22import org.eclipse.xtext.xbase.lib.Pair;
23
24@SuppressWarnings("all")
25public class CpsToLpTranslator {
26 private static final double MINIMUM_MEMORY_USAGE = 0.25;
27
28 private static final double MINIMUM_HDD_USAGE = 0.25;
29
30 private final CyberPhysicalSystem cps;
31
32 private final Map<Requirement, ? extends List<String>> appInstances;
33
34 private final Map<HostType, ? extends List<String>> hostInstances;
35
36 private final boolean breakSymmetry;
37
38 public CpsToLpTranslator(final CyberPhysicalSystem cps, final int hostInstanceCount, final boolean breakSymmetry) {
39 this.cps = cps;
40 this.appInstances = this.createAppInstances();
41 this.hostInstances = this.createHostInstances(hostInstanceCount);
42 this.breakSymmetry = breakSymmetry;
43 }
44
45 private ImmutableMap<Requirement, ImmutableList<String>> createAppInstances() {
46 ImmutableMap<Requirement, ImmutableList<String>> _xblockexpression = null;
47 {
48 final ImmutableMap.Builder<Requirement, ImmutableList<String>> builder = ImmutableMap.<Requirement, ImmutableList<String>>builder();
49 int i = 0;
50 Iterable<Requirement> _requirements = this.getRequirements();
51 for (final Requirement req : _requirements) {
52 {
53 final ImmutableList.Builder<String> listBuilder = ImmutableList.<String>builder();
54 for (int j = 0; (j < req.getCount()); j++) {
55 StringConcatenation _builder = new StringConcatenation();
56 _builder.append("r");
57 _builder.append(i);
58 _builder.append("a");
59 _builder.append(j);
60 listBuilder.add(_builder.toString());
61 }
62 builder.put(req, listBuilder.build());
63 i++;
64 }
65 }
66 _xblockexpression = builder.build();
67 }
68 return _xblockexpression;
69 }
70
71 private ImmutableMap<HostType, ImmutableList<String>> createHostInstances(final int hostInstanceCount) {
72 ImmutableMap<HostType, ImmutableList<String>> _xblockexpression = null;
73 {
74 final ImmutableMap.Builder<HostType, ImmutableList<String>> builder = ImmutableMap.<HostType, ImmutableList<String>>builder();
75 int i = 0;
76 EList<HostType> _hostTypes = this.cps.getHostTypes();
77 for (final HostType hostType : _hostTypes) {
78 {
79 final ImmutableList.Builder<String> listBuilder = ImmutableList.<String>builder();
80 for (int j = 0; (j < hostInstanceCount); j++) {
81 StringConcatenation _builder = new StringConcatenation();
82 _builder.append("h");
83 _builder.append(i);
84 _builder.append("i");
85 _builder.append(j);
86 listBuilder.add(_builder.toString());
87 }
88 builder.put(hostType, listBuilder.build());
89 i++;
90 }
91 }
92 _xblockexpression = builder.build();
93 }
94 return _xblockexpression;
95 }
96
97 public CharSequence getLpProblem() {
98 StringConcatenation _builder = new StringConcatenation();
99 _builder.append("Minimize");
100 _builder.newLine();
101 _builder.append("\t");
102 _builder.append("total_cost: ");
103 CharSequence _objective = this.getObjective();
104 _builder.append(_objective, "\t");
105 _builder.newLineIfNotEmpty();
106 _builder.append("Subject To");
107 _builder.newLine();
108 _builder.append("\t");
109 CharSequence _constraints = this.getConstraints();
110 _builder.append(_constraints, "\t");
111 _builder.newLineIfNotEmpty();
112 _builder.append("Bounds");
113 _builder.newLine();
114 _builder.append("\t");
115 CharSequence _bounds = this.getBounds();
116 _builder.append(_bounds, "\t");
117 _builder.newLineIfNotEmpty();
118 _builder.append("Binary");
119 _builder.newLine();
120 _builder.append("\t");
121 CharSequence _binaryVariables = this.getBinaryVariables();
122 _builder.append(_binaryVariables, "\t");
123 _builder.newLineIfNotEmpty();
124 _builder.append("End");
125 _builder.newLine();
126 return _builder;
127 }
128
129 private CharSequence getObjective() {
130 StringConcatenation _builder = new StringConcatenation();
131 {
132 Iterable<Pair<HostType, String>> _hostInstancesWithType = this.getHostInstancesWithType();
133 boolean _hasElements = false;
134 for(final Pair<HostType, String> pair : _hostInstancesWithType) {
135 if (!_hasElements) {
136 _hasElements = true;
137 } else {
138 _builder.appendImmediate(" + ", "");
139 }
140 int _cost = pair.getKey().getCost();
141 _builder.append(_cost);
142 _builder.append(" ");
143 CharSequence _existsVariable = this.getExistsVariable(pair.getValue());
144 _builder.append(_existsVariable);
145 }
146 }
147 return _builder;
148 }
149
150 private CharSequence getConstraints() {
151 StringConcatenation _builder = new StringConcatenation();
152 {
153 Iterable<Pair<ApplicationType, String>> _appInstancesWithType = this.getAppInstancesWithType();
154 for(final Pair<ApplicationType, String> appPair : _appInstancesWithType) {
155 String _value = appPair.getValue();
156 _builder.append(_value);
157 _builder.append("_allocated: ");
158 {
159 Iterable<String> _possibleHostInstances = this.getPossibleHostInstances(appPair.getKey());
160 boolean _hasElements = false;
161 for(final String host : _possibleHostInstances) {
162 if (!_hasElements) {
163 _hasElements = true;
164 } else {
165 _builder.appendImmediate(" + ", "");
166 }
167 CharSequence _allocatedToVariable = this.getAllocatedToVariable(appPair.getValue(), host);
168 _builder.append(_allocatedToVariable);
169 }
170 }
171 _builder.append(" = 1");
172 _builder.newLineIfNotEmpty();
173 {
174 Iterable<String> _possibleHostInstances_1 = this.getPossibleHostInstances(appPair.getKey());
175 for(final String host_1 : _possibleHostInstances_1) {
176 String _value_1 = appPair.getValue();
177 _builder.append(_value_1);
178 _builder.append("_to_");
179 _builder.append(host_1);
180 _builder.append("_exists: ");
181 CharSequence _existsVariable = this.getExistsVariable(host_1);
182 _builder.append(_existsVariable);
183 _builder.append(" - ");
184 CharSequence _allocatedToVariable_1 = this.getAllocatedToVariable(appPair.getValue(), host_1);
185 _builder.append(_allocatedToVariable_1);
186 _builder.append(" >= 0");
187 _builder.newLineIfNotEmpty();
188 }
189 }
190 }
191 }
192 {
193 Iterable<Pair<HostType, String>> _hostInstancesWithType = this.getHostInstancesWithType();
194 for(final Pair<HostType, String> hostPair : _hostInstancesWithType) {
195 String _value_2 = hostPair.getValue();
196 _builder.append(_value_2);
197 _builder.append("_mem_use: ");
198 {
199 Iterable<Pair<ResourceRequirement, String>> _possibleAppInstancesWithRequirements = this.getPossibleAppInstancesWithRequirements(hostPair.getKey());
200 boolean _hasElements_1 = false;
201 for(final Pair<ResourceRequirement, String> appPair_1 : _possibleAppInstancesWithRequirements) {
202 if (!_hasElements_1) {
203 _hasElements_1 = true;
204 } else {
205 _builder.appendImmediate(" + ", "");
206 }
207 int _requiredMemory = appPair_1.getKey().getRequiredMemory();
208 _builder.append(_requiredMemory);
209 _builder.append(" ");
210 CharSequence _allocatedToVariable_2 = this.getAllocatedToVariable(appPair_1.getValue(), hostPair.getValue());
211 _builder.append(_allocatedToVariable_2);
212 }
213 }
214 _builder.append(" - ");
215 int _defaultMemory = hostPair.getKey().getDefaultMemory();
216 _builder.append(_defaultMemory);
217 _builder.append(" ");
218 CharSequence _memoryUsageVariable = this.getMemoryUsageVariable(hostPair.getValue());
219 _builder.append(_memoryUsageVariable);
220 _builder.append(" = 0");
221 _builder.newLineIfNotEmpty();
222 String _value_3 = hostPair.getValue();
223 _builder.append(_value_3);
224 _builder.append("_hdd_use: ");
225 {
226 Iterable<Pair<ResourceRequirement, String>> _possibleAppInstancesWithRequirements_1 = this.getPossibleAppInstancesWithRequirements(hostPair.getKey());
227 boolean _hasElements_2 = false;
228 for(final Pair<ResourceRequirement, String> appPair_2 : _possibleAppInstancesWithRequirements_1) {
229 if (!_hasElements_2) {
230 _hasElements_2 = true;
231 } else {
232 _builder.appendImmediate(" + ", "");
233 }
234 int _requiredHdd = appPair_2.getKey().getRequiredHdd();
235 _builder.append(_requiredHdd);
236 _builder.append(" ");
237 CharSequence _allocatedToVariable_3 = this.getAllocatedToVariable(appPair_2.getValue(), hostPair.getValue());
238 _builder.append(_allocatedToVariable_3);
239 }
240 }
241 _builder.append(" - ");
242 int _defaultHdd = hostPair.getKey().getDefaultHdd();
243 _builder.append(_defaultHdd);
244 _builder.append(" ");
245 CharSequence _hddUsageVariable = this.getHddUsageVariable(hostPair.getValue());
246 _builder.append(_hddUsageVariable);
247 _builder.append(" = 0");
248 _builder.newLineIfNotEmpty();
249 }
250 }
251 _builder.append("average_mem: ");
252 {
253 Iterable<String> _allHostInstances = this.getAllHostInstances();
254 boolean _hasElements_3 = false;
255 for(final String host_2 : _allHostInstances) {
256 if (!_hasElements_3) {
257 _hasElements_3 = true;
258 } else {
259 _builder.appendImmediate(" + ", "");
260 }
261 CharSequence _memoryUsageVariable_1 = this.getMemoryUsageVariable(host_2);
262 _builder.append(_memoryUsageVariable_1);
263 _builder.append(" - ");
264 _builder.append(CpsToLpTranslator.MINIMUM_MEMORY_USAGE);
265 _builder.append(" ");
266 CharSequence _existsVariable_1 = this.getExistsVariable(host_2);
267 _builder.append(_existsVariable_1);
268 }
269 }
270 _builder.append(" >= 0");
271 _builder.newLineIfNotEmpty();
272 _builder.append("average_hdd: ");
273 {
274 Iterable<String> _allHostInstances_1 = this.getAllHostInstances();
275 boolean _hasElements_4 = false;
276 for(final String host_3 : _allHostInstances_1) {
277 if (!_hasElements_4) {
278 _hasElements_4 = true;
279 } else {
280 _builder.appendImmediate(" + ", "");
281 }
282 CharSequence _memoryUsageVariable_2 = this.getMemoryUsageVariable(host_3);
283 _builder.append(_memoryUsageVariable_2);
284 _builder.append(" - ");
285 _builder.append(CpsToLpTranslator.MINIMUM_HDD_USAGE);
286 _builder.append(" ");
287 CharSequence _existsVariable_2 = this.getExistsVariable(host_3);
288 _builder.append(_existsVariable_2);
289 }
290 }
291 _builder.append(" >= 0");
292 _builder.newLineIfNotEmpty();
293 {
294 final Function1<Requirement, Boolean> _function = (Requirement it) -> {
295 int _count = it.getCount();
296 return Boolean.valueOf((_count > 1));
297 };
298 Iterable<Pair<Integer, Requirement>> _indexed = IterableExtensions.<Requirement>indexed(IterableExtensions.<Requirement>filter(this.getRequirements(), _function));
299 for(final Pair<Integer, Requirement> reqPair : _indexed) {
300 {
301 final Function1<ResourceRequirement, List<String>> _function_1 = (ResourceRequirement it) -> {
302 return this.hostInstances.get(it.getHostType());
303 };
304 Iterable<String> _flatMap = IterableExtensions.<ResourceRequirement, String>flatMap(reqPair.getValue().getType().getRequirements(), _function_1);
305 for(final String host_4 : _flatMap) {
306 _builder.append("r");
307 Integer _key = reqPair.getKey();
308 _builder.append(_key);
309 _builder.append("_");
310 _builder.append(host_4);
311 _builder.append("_redundant: ");
312 {
313 List<String> _get = this.appInstances.get(reqPair.getValue());
314 boolean _hasElements_5 = false;
315 for(final String app : _get) {
316 if (!_hasElements_5) {
317 _hasElements_5 = true;
318 } else {
319 _builder.appendImmediate(" + ", "");
320 }
321 CharSequence _allocatedToVariable_4 = this.getAllocatedToVariable(app, host_4);
322 _builder.append(_allocatedToVariable_4);
323 }
324 }
325 _builder.append(" <= 1");
326 _builder.newLineIfNotEmpty();
327 }
328 }
329 }
330 }
331 {
332 if (this.breakSymmetry) {
333 {
334 Collection<? extends List<String>> _values = this.hostInstances.values();
335 for(final List<String> hosts : _values) {
336 {
337 int _size = hosts.size();
338 int _minus = (_size - 1);
339 ExclusiveRange _doubleDotLessThan = new ExclusiveRange(0, _minus, true);
340 for(final Integer i : _doubleDotLessThan) {
341 String _get_1 = hosts.get(((i).intValue() + 1));
342 _builder.append(_get_1);
343 _builder.append("_after_");
344 String _get_2 = hosts.get((i).intValue());
345 _builder.append(_get_2);
346 _builder.append(": ");
347 CharSequence _existsVariable_3 = this.getExistsVariable(hosts.get((i).intValue()));
348 _builder.append(_existsVariable_3);
349 _builder.append(" - ");
350 CharSequence _existsVariable_4 = this.getExistsVariable(hosts.get(((i).intValue() + 1)));
351 _builder.append(_existsVariable_4);
352 _builder.append(" >= 0");
353 _builder.newLineIfNotEmpty();
354 }
355 }
356 }
357 }
358 }
359 }
360 return _builder;
361 }
362
363 private CharSequence getBounds() {
364 StringConcatenation _builder = new StringConcatenation();
365 {
366 Iterable<String> _allHostInstances = this.getAllHostInstances();
367 for(final String host : _allHostInstances) {
368 _builder.append("0 <= ");
369 CharSequence _memoryUsageVariable = this.getMemoryUsageVariable(host);
370 _builder.append(_memoryUsageVariable);
371 _builder.append(" <= 1");
372 _builder.newLineIfNotEmpty();
373 _builder.append("0 <= ");
374 CharSequence _hddUsageVariable = this.getHddUsageVariable(host);
375 _builder.append(_hddUsageVariable);
376 _builder.append(" <= 1");
377 _builder.newLineIfNotEmpty();
378 }
379 }
380 return _builder;
381 }
382
383 private CharSequence getBinaryVariables() {
384 StringConcatenation _builder = new StringConcatenation();
385 {
386 Iterable<String> _allHostInstances = this.getAllHostInstances();
387 for(final String host : _allHostInstances) {
388 CharSequence _existsVariable = this.getExistsVariable(host);
389 _builder.append(_existsVariable);
390 _builder.newLineIfNotEmpty();
391 }
392 }
393 {
394 Iterable<Pair<ApplicationType, String>> _appInstancesWithType = this.getAppInstancesWithType();
395 for(final Pair<ApplicationType, String> appPair : _appInstancesWithType) {
396 {
397 Iterable<String> _possibleHostInstances = this.getPossibleHostInstances(appPair.getKey());
398 for(final String host_1 : _possibleHostInstances) {
399 CharSequence _allocatedToVariable = this.getAllocatedToVariable(appPair.getValue(), host_1);
400 _builder.append(_allocatedToVariable);
401 _builder.newLineIfNotEmpty();
402 }
403 }
404 }
405 }
406 return _builder;
407 }
408
409 private Iterable<Requirement> getRequirements() {
410 final Function1<Request, EList<Requirement>> _function = (Request it) -> {
411 return it.getRequirements();
412 };
413 return IterableExtensions.<Request, Requirement>flatMap(this.cps.getRequests(), _function);
414 }
415
416 private Iterable<String> getAllHostInstances() {
417 final Function1<List<String>, List<String>> _function = (List<String> it) -> {
418 return it;
419 };
420 return IterableExtensions.flatMap(this.hostInstances.values(), _function);
421 }
422
423 private Iterable<Pair<HostType, String>> getHostInstancesWithType() {
424 final Function1<Map.Entry<HostType, ? extends List<String>>, List<Pair<HostType, String>>> _function = (Map.Entry<HostType, ? extends List<String>> pair) -> {
425 final Function1<String, Pair<HostType, String>> _function_1 = (String it) -> {
426 HostType _key = pair.getKey();
427 return Pair.<HostType, String>of(_key, it);
428 };
429 return ListExtensions.<String, Pair<HostType, String>>map(pair.getValue(), _function_1);
430 };
431 return IterableExtensions.flatMap(this.hostInstances.entrySet(), _function);
432 }
433
434 private Iterable<Pair<ApplicationType, String>> getAppInstancesWithType() {
435 final Function1<Map.Entry<Requirement, ? extends List<String>>, List<Pair<ApplicationType, String>>> _function = (Map.Entry<Requirement, ? extends List<String>> pair) -> {
436 final Function1<String, Pair<ApplicationType, String>> _function_1 = (String it) -> {
437 ApplicationType _type = pair.getKey().getType();
438 return Pair.<ApplicationType, String>of(_type, it);
439 };
440 return ListExtensions.<String, Pair<ApplicationType, String>>map(pair.getValue(), _function_1);
441 };
442 return IterableExtensions.flatMap(this.appInstances.entrySet(), _function);
443 }
444
445 private Iterable<String> getPossibleHostInstances(final ApplicationType appType) {
446 final Function1<ResourceRequirement, List<String>> _function = (ResourceRequirement req) -> {
447 return this.hostInstances.get(req.getHostType());
448 };
449 return IterableExtensions.<ResourceRequirement, String>flatMap(appType.getRequirements(), _function);
450 }
451
452 private Iterable<Pair<ResourceRequirement, String>> getPossibleAppInstancesWithRequirements(final HostType hostType) {
453 final Function1<Map.Entry<Requirement, ? extends List<String>>, List<Pair<ResourceRequirement, String>>> _function = (Map.Entry<Requirement, ? extends List<String>> pair) -> {
454 List<Pair<ResourceRequirement, String>> _xblockexpression = null;
455 {
456 final Function1<ResourceRequirement, Boolean> _function_1 = (ResourceRequirement it) -> {
457 HostType _hostType = it.getHostType();
458 return Boolean.valueOf(Objects.equal(_hostType, hostType));
459 };
460 final ResourceRequirement resourceReq = IterableExtensions.<ResourceRequirement>findFirst(pair.getKey().getType().getRequirements(), _function_1);
461 List<Pair<ResourceRequirement, String>> _xifexpression = null;
462 if ((resourceReq == null)) {
463 _xifexpression = CollectionLiterals.<Pair<ResourceRequirement, String>>emptyList();
464 } else {
465 final Function1<String, Pair<ResourceRequirement, String>> _function_2 = (String it) -> {
466 return Pair.<ResourceRequirement, String>of(resourceReq, it);
467 };
468 _xifexpression = ListExtensions.<String, Pair<ResourceRequirement, String>>map(pair.getValue(), _function_2);
469 }
470 _xblockexpression = _xifexpression;
471 }
472 return _xblockexpression;
473 };
474 return IterableExtensions.flatMap(this.appInstances.entrySet(), _function);
475 }
476
477 private CharSequence getExistsVariable(final String hostInstance) {
478 StringConcatenation _builder = new StringConcatenation();
479 _builder.append(hostInstance);
480 _builder.append("_exists");
481 return _builder;
482 }
483
484 private CharSequence getMemoryUsageVariable(final String hostInstance) {
485 StringConcatenation _builder = new StringConcatenation();
486 _builder.append(hostInstance);
487 _builder.append("_mem");
488 return _builder;
489 }
490
491 private CharSequence getHddUsageVariable(final String hostInstance) {
492 StringConcatenation _builder = new StringConcatenation();
493 _builder.append(hostInstance);
494 _builder.append("_hdd");
495 return _builder;
496 }
497
498 private CharSequence getAllocatedToVariable(final String appInstance, final String hostInstance) {
499 StringConcatenation _builder = new StringConcatenation();
500 _builder.append(appInstance);
501 _builder.append("_to_");
502 _builder.append(hostInstance);
503 return _builder;
504 }
505}
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin
new file mode 100644
index 00000000..cdfe3921
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin
new file mode 100644
index 00000000..9be64b30
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsSolver.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsSolver.xtendbin
new file mode 100644
index 00000000..02fb74ef
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsSolver.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.gitignore b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.gitignore
new file mode 100644
index 00000000..e24f10f4
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.gitignore
@@ -0,0 +1,3 @@
1/.RuleBasedCpsSolver.java._trace
2/.RuleBasedCpsMain.java._trace
3/.CpsStateCoder.java._trace
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/CpsStateCoder.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/CpsStateCoder.java
new file mode 100644
index 00000000..3ae8e828
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/CpsStateCoder.java
@@ -0,0 +1,316 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.dse;
2
3import com.google.common.base.Objects;
4import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationInstance;
5import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
6import hu.bme.mit.inf.dslreasoner.domains.cps.HostInstance;
7import hu.bme.mit.inf.dslreasoner.domains.cps.HostType;
8import hu.bme.mit.inf.dslreasoner.domains.cps.Request;
9import hu.bme.mit.inf.dslreasoner.domains.cps.Requirement;
10import java.util.Arrays;
11import org.eclipse.emf.common.notify.Notifier;
12import org.eclipse.emf.common.util.EList;
13import org.eclipse.emf.ecore.EObject;
14import org.eclipse.emf.ecore.resource.Resource;
15import org.eclipse.emf.ecore.resource.ResourceSet;
16import org.eclipse.viatra.dse.statecode.IStateCoder;
17import org.eclipse.viatra.dse.statecode.IStateCoderFactory;
18import org.eclipse.viatra.query.runtime.api.IPatternMatch;
19import org.eclipse.xtend2.lib.StringConcatenation;
20import org.eclipse.xtend2.lib.StringConcatenationClient;
21import org.eclipse.xtext.xbase.lib.IterableExtensions;
22
23@SuppressWarnings("all")
24public class CpsStateCoder implements IStateCoder {
25 public static class Factory implements IStateCoderFactory {
26 @Override
27 public IStateCoder createStateCoder() {
28 return new CpsStateCoder();
29 }
30 }
31
32 private CyberPhysicalSystem cps;
33
34 protected CpsStateCoder() {
35 }
36
37 @Override
38 public void init(final Notifier notifier) {
39 CyberPhysicalSystem _switchResult = null;
40 boolean _matched = false;
41 if (notifier instanceof ResourceSet) {
42 _matched=true;
43 _switchResult = this.getCpsFromResourceSet(((ResourceSet)notifier));
44 }
45 if (!_matched) {
46 if (notifier instanceof Resource) {
47 _matched=true;
48 _switchResult = this.getCpsFromResource(((Resource)notifier));
49 }
50 }
51 if (!_matched) {
52 if (notifier instanceof CyberPhysicalSystem) {
53 _matched=true;
54 _switchResult = ((CyberPhysicalSystem)notifier);
55 }
56 }
57 if (!_matched) {
58 throw new IllegalArgumentException("notifier is not a CyberPhysicalSystem");
59 }
60 this.cps = _switchResult;
61 }
62
63 private CyberPhysicalSystem getCpsFromResourceSet(final ResourceSet resourceSet) {
64 CyberPhysicalSystem _xblockexpression = null;
65 {
66 boolean _isEmpty = resourceSet.getResources().isEmpty();
67 if (_isEmpty) {
68 throw new IllegalArgumentException("No Resource in ResourceSet");
69 }
70 final Resource resource = IterableExtensions.<Resource>head(resourceSet.getResources());
71 _xblockexpression = this.getCpsFromResource(resource);
72 }
73 return _xblockexpression;
74 }
75
76 private CyberPhysicalSystem getCpsFromResource(final Resource resource) {
77 CyberPhysicalSystem _xblockexpression = null;
78 {
79 boolean _isEmpty = resource.getContents().isEmpty();
80 if (_isEmpty) {
81 throw new IllegalArgumentException("No EObject in Resource");
82 }
83 final EObject cps = IterableExtensions.<EObject>head(resource.getContents());
84 CyberPhysicalSystem _xifexpression = null;
85 if ((cps instanceof CyberPhysicalSystem)) {
86 _xifexpression = ((CyberPhysicalSystem)cps);
87 } else {
88 throw new IllegalArgumentException("EObject in Resource is not a CyberPhysicalSystem");
89 }
90 _xblockexpression = _xifexpression;
91 }
92 return _xblockexpression;
93 }
94
95 @Override
96 public String createStateCode() {
97 StringConcatenation _builder = new StringConcatenation();
98 StringConcatenationClient _createRequestsCode = this.createRequestsCode();
99 _builder.append(_createRequestsCode);
100 CharSequence _createHostTypesCode = this.createHostTypesCode();
101 _builder.append(_createHostTypesCode);
102 return _builder.toString();
103 }
104
105 private StringConcatenationClient createRequestsCode() {
106 StringConcatenationClient _client = new StringConcatenationClient() {
107 @Override
108 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
109 {
110 EList<Request> _requests = CpsStateCoder.this.cps.getRequests();
111 for(final Request request : _requests) {
112 StringConcatenationClient _createRequestCode = CpsStateCoder.this.createRequestCode(request);
113 _builder.append(_createRequestCode);
114 }
115 }
116 }
117 };
118 return _client;
119 }
120
121 private StringConcatenationClient createRequestCode(final Request request) {
122 StringConcatenationClient _client = new StringConcatenationClient() {
123 @Override
124 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
125 _builder.append("[");
126 {
127 EList<Requirement> _requirements = request.getRequirements();
128 for(final Requirement requirement : _requirements) {
129 StringConcatenationClient _createRequirementCode = CpsStateCoder.this.createRequirementCode(requirement);
130 _builder.append(_createRequirementCode);
131 }
132 }
133 _builder.append("]");
134 }
135 };
136 return _client;
137 }
138
139 private StringConcatenationClient createRequirementCode(final Requirement requirement) {
140 StringConcatenationClient _client = new StringConcatenationClient() {
141 @Override
142 protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
143 _builder.append("[");
144 {
145 EList<ApplicationInstance> _instances = requirement.getInstances();
146 boolean _hasElements = false;
147 for(final ApplicationInstance app : _instances) {
148 if (!_hasElements) {
149 _hasElements = true;
150 } else {
151 _builder.appendImmediate(",", "");
152 }
153 String _createAppCode = CpsStateCoder.this.createAppCode(app);
154 _builder.append(_createAppCode);
155 }
156 }
157 _builder.append("]");
158 }
159 };
160 return _client;
161 }
162
163 private String createAppCode(final ApplicationInstance app) {
164 String _xifexpression = null;
165 HostInstance _allocatedTo = app.getAllocatedTo();
166 boolean _tripleEquals = (_allocatedTo == null);
167 if (_tripleEquals) {
168 _xifexpression = "-";
169 } else {
170 _xifexpression = this.createMatchArgumentCode(app.getAllocatedTo());
171 }
172 return _xifexpression;
173 }
174
175 private CharSequence createHostTypesCode() {
176 StringConcatenation _builder = new StringConcatenation();
177 _builder.append("(");
178 {
179 EList<HostType> _hostTypes = this.cps.getHostTypes();
180 boolean _hasElements = false;
181 for(final HostType hostType : _hostTypes) {
182 if (!_hasElements) {
183 _hasElements = true;
184 } else {
185 _builder.appendImmediate(",", "");
186 }
187 int _size = hostType.getInstances().size();
188 _builder.append(_size);
189 }
190 }
191 _builder.append(")");
192 return _builder;
193 }
194
195 @Override
196 public String createActivationCode(final IPatternMatch match) {
197 StringConcatenation _builder = new StringConcatenation();
198 String _simpleName = match.specification().getSimpleName();
199 _builder.append(_simpleName);
200 _builder.append("(");
201 {
202 Object[] _array = match.toArray();
203 boolean _hasElements = false;
204 for(final Object arg : _array) {
205 if (!_hasElements) {
206 _hasElements = true;
207 } else {
208 _builder.appendImmediate(",", "");
209 }
210 String _createMatchArgumentCode = this.createMatchArgumentCode(arg);
211 _builder.append(_createMatchArgumentCode);
212 }
213 }
214 _builder.append(")");
215 return _builder.toString();
216 }
217
218 protected String _createMatchArgumentCode(final Requirement requirement) {
219 String _xblockexpression = null;
220 {
221 final EObject request = requirement.eContainer();
222 String _xifexpression = null;
223 if ((request instanceof Request)) {
224 String _xblockexpression_1 = null;
225 {
226 EObject _eContainer = ((Request)request).eContainer();
227 boolean _notEquals = (!Objects.equal(_eContainer, this.cps));
228 if (_notEquals) {
229 throw new IllegalArgumentException("Request is not contained in the CPS");
230 }
231 final int requestIndex = this.cps.getRequests().indexOf(request);
232 final int requirementIndex = ((Request)request).getRequirements().indexOf(requirement);
233 String _plus = (Integer.valueOf(requestIndex) + ".");
234 _xblockexpression_1 = (_plus + Integer.valueOf(requirementIndex));
235 }
236 _xifexpression = _xblockexpression_1;
237 } else {
238 throw new IllegalArgumentException("Requirement is not contained in a request");
239 }
240 _xblockexpression = _xifexpression;
241 }
242 return _xblockexpression;
243 }
244
245 protected String _createMatchArgumentCode(final ApplicationInstance app) {
246 String _xblockexpression = null;
247 {
248 final Requirement requirement = app.getRequirement();
249 if ((requirement == null)) {
250 throw new IllegalArgumentException("Application instance is not associated with a requirement");
251 }
252 final int instanceIndex = requirement.getInstances().indexOf(app);
253 String _createMatchArgumentCode = this.createMatchArgumentCode(requirement);
254 String _plus = (_createMatchArgumentCode + ".");
255 _xblockexpression = (_plus + Integer.valueOf(instanceIndex));
256 }
257 return _xblockexpression;
258 }
259
260 protected String _createMatchArgumentCode(final HostInstance host) {
261 String _xblockexpression = null;
262 {
263 final EObject hostType = host.eContainer();
264 String _xifexpression = null;
265 if ((hostType instanceof HostType)) {
266 String _xblockexpression_1 = null;
267 {
268 final int hostIndex = ((HostType)hostType).getInstances().indexOf(host);
269 String _createMatchArgumentCode = this.createMatchArgumentCode(hostType);
270 String _plus = (_createMatchArgumentCode + ".");
271 _xblockexpression_1 = (_plus + Integer.valueOf(hostIndex));
272 }
273 _xifexpression = _xblockexpression_1;
274 } else {
275 throw new IllegalArgumentException("Host is not contained in a host type");
276 }
277 _xblockexpression = _xifexpression;
278 }
279 return _xblockexpression;
280 }
281
282 protected String _createMatchArgumentCode(final HostType hostType) {
283 String _xblockexpression = null;
284 {
285 EObject _eContainer = hostType.eContainer();
286 boolean _notEquals = (!Objects.equal(_eContainer, this.cps));
287 if (_notEquals) {
288 throw new IllegalArgumentException("Host type is not contained in the CPS");
289 }
290 final int hostTypeIndex = this.cps.getHostTypes().indexOf(hostType);
291 _xblockexpression = Integer.valueOf(hostTypeIndex).toString();
292 }
293 return _xblockexpression;
294 }
295
296 protected String _createMatchArgumentCode(final Object object) {
297 throw new IllegalArgumentException("Unknown match argument: ");
298 }
299
300 protected String createMatchArgumentCode(final Object app) {
301 if (app instanceof ApplicationInstance) {
302 return _createMatchArgumentCode((ApplicationInstance)app);
303 } else if (app instanceof HostInstance) {
304 return _createMatchArgumentCode((HostInstance)app);
305 } else if (app instanceof HostType) {
306 return _createMatchArgumentCode((HostType)app);
307 } else if (app instanceof Requirement) {
308 return _createMatchArgumentCode((Requirement)app);
309 } else if (app != null) {
310 return _createMatchArgumentCode(app);
311 } else {
312 throw new IllegalArgumentException("Unhandled parameter types: " +
313 Arrays.<Object>asList(app).toString());
314 }
315 }
316}
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsMain.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsMain.java
new file mode 100644
index 00000000..7d81f84b
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsMain.java
@@ -0,0 +1,46 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.dse;
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage;
4import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
5import hu.bme.mit.inf.dslreasoner.domains.cps.dse.RuleBasedCpsSolver;
6import hu.bme.mit.inf.dslreasoner.domains.cps.generator.CpsGenerator;
7import hu.bme.mit.inf.dslreasoner.domains.cps.queries.CpsQueries;
8import java.util.Map;
9import org.eclipse.emf.ecore.EPackage;
10import org.eclipse.emf.ecore.EStructuralFeature;
11import org.eclipse.emf.ecore.resource.Resource;
12import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
13import org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory;
14import org.eclipse.viatra.addon.querybasedfeatures.runtime.handler.QueryBasedFeatures;
15import org.eclipse.viatra.dse.api.DesignSpaceExplorer;
16import org.eclipse.viatra.query.runtime.extensibility.SingletonQueryGroupProvider;
17import org.eclipse.viatra.query.runtime.registry.IQuerySpecificationRegistry;
18import org.eclipse.viatra.query.runtime.registry.QuerySpecificationRegistry;
19import org.eclipse.viatra.query.runtime.registry.connector.QueryGroupProviderSourceConnector;
20
21@SuppressWarnings("all")
22public class RuleBasedCpsMain {
23 private RuleBasedCpsMain() {
24 new IllegalStateException("This is a static utility class and should not be instantiated directly.");
25 }
26
27 public static void main(final String[] args) {
28 DesignSpaceExplorer.turnOnLogging(DesignSpaceExplorer.DseLoggingLevel.VERBOSE_FULL);
29 Map<String, Object> _extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap();
30 XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl();
31 _extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, _xMIResourceFactoryImpl);
32 QueryBasedFeatureSettingDelegateFactory _queryBasedFeatureSettingDelegateFactory = new QueryBasedFeatureSettingDelegateFactory();
33 EStructuralFeature.Internal.SettingDelegate.Factory.Registry.INSTANCE.put(QueryBasedFeatures.ANNOTATION_SOURCE, _queryBasedFeatureSettingDelegateFactory);
34 EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE);
35 IQuerySpecificationRegistry _instance = QuerySpecificationRegistry.getInstance();
36 CpsQueries _instance_1 = CpsQueries.instance();
37 SingletonQueryGroupProvider _singletonQueryGroupProvider = new SingletonQueryGroupProvider(_instance_1);
38 QueryGroupProviderSourceConnector _queryGroupProviderSourceConnector = new QueryGroupProviderSourceConnector("CpsQueries", _singletonQueryGroupProvider,
39 true);
40 _instance.addSource(_queryGroupProviderSourceConnector);
41 final CpsGenerator generator = new CpsGenerator(1, 4, 1);
42 final CyberPhysicalSystem problem = generator.generateCpsProblem();
43 final RuleBasedCpsSolver solver = new RuleBasedCpsSolver();
44 solver.solve(problem);
45 }
46}
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.java
new file mode 100644
index 00000000..fd348752
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.java
@@ -0,0 +1,93 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.dse;
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationInstance;
4import hu.bme.mit.inf.dslreasoner.domains.cps.CpsFactory;
5import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage;
6import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
7import hu.bme.mit.inf.dslreasoner.domains.cps.HostInstance;
8import hu.bme.mit.inf.dslreasoner.domains.cps.dse.CpsStateCoder;
9import hu.bme.mit.inf.dslreasoner.domains.cps.queries.Allocate;
10import hu.bme.mit.inf.dslreasoner.domains.cps.queries.AverageFreeHddMetric;
11import hu.bme.mit.inf.dslreasoner.domains.cps.queries.AverageFreeMemoryMetric;
12import hu.bme.mit.inf.dslreasoner.domains.cps.queries.CostMetric;
13import hu.bme.mit.inf.dslreasoner.domains.cps.queries.CreateHostInstance;
14import hu.bme.mit.inf.dslreasoner.domains.cps.queries.GuidanceObjective;
15import hu.bme.mit.inf.dslreasoner.domains.cps.queries.RequirementNotSatisfied;
16import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.CompositeDirectionalThresholdObjective;
17import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind;
18import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveThreshold;
19import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.QueryBasedObjective;
20import java.util.Collection;
21import java.util.function.Consumer;
22import org.eclipse.emf.common.util.EList;
23import org.eclipse.viatra.dse.api.DesignSpaceExplorer;
24import org.eclipse.viatra.dse.api.Solution;
25import org.eclipse.viatra.dse.evolutionary.EvolutionaryStrategy;
26import org.eclipse.viatra.dse.evolutionary.EvolutionaryStrategyBuilder;
27import org.eclipse.viatra.dse.objectives.Fitness;
28import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRuleFactory;
29import org.eclipse.xtext.xbase.lib.Extension;
30import org.eclipse.xtext.xbase.lib.InputOutput;
31
32@SuppressWarnings("all")
33public class RuleBasedCpsSolver {
34 @Extension
35 private final BatchTransformationRuleFactory _batchTransformationRuleFactory = new BatchTransformationRuleFactory();
36
37 @Extension
38 private final CpsFactory _cpsFactory = CpsFactory.eINSTANCE;
39
40 public void solve(final CyberPhysicalSystem problem) {
41 final DesignSpaceExplorer dse = new DesignSpaceExplorer();
42 dse.addMetaModelPackage(CpsPackage.eINSTANCE);
43 dse.setInitialModel(problem.eResource().getResourceSet());
44 final Consumer<RequirementNotSatisfied.Match> _function = (RequirementNotSatisfied.Match it) -> {
45 final ApplicationInstance app = this._cpsFactory.createApplicationInstance();
46 EList<ApplicationInstance> _instances = it.getReq().getType().getInstances();
47 _instances.add(app);
48 EList<ApplicationInstance> _instances_1 = it.getReq().getInstances();
49 _instances_1.add(app);
50 };
51 dse.addTransformationRule(this._batchTransformationRuleFactory.<RequirementNotSatisfied.Match, RequirementNotSatisfied.Matcher>createRule(RequirementNotSatisfied.instance()).action(_function).build());
52 final Consumer<Allocate.Match> _function_1 = (Allocate.Match it) -> {
53 ApplicationInstance _app = it.getApp();
54 _app.setAllocatedTo(it.getHost());
55 };
56 dse.addTransformationRule(this._batchTransformationRuleFactory.<Allocate.Match, Allocate.Matcher>createRule(Allocate.instance()).action(_function_1).build());
57 final Consumer<CreateHostInstance.Match> _function_2 = (CreateHostInstance.Match it) -> {
58 EList<HostInstance> _instances = it.getHostType().getInstances();
59 HostInstance _createHostInstance = this._cpsFactory.createHostInstance();
60 _instances.add(_createHostInstance);
61 };
62 dse.addTransformationRule(this._batchTransformationRuleFactory.<CreateHostInstance.Match, CreateHostInstance.Matcher>createRule(CreateHostInstance.instance()).action(_function_2).build());
63 GuidanceObjective _instance = GuidanceObjective.instance();
64 ObjectiveThreshold.Inclusive _inclusive = new ObjectiveThreshold.Inclusive(0);
65 QueryBasedObjective _queryBasedObjective = new QueryBasedObjective(_instance, ObjectiveKind.LOWER_IS_BETTER, _inclusive, 0);
66 AverageFreeMemoryMetric _instance_1 = AverageFreeMemoryMetric.instance();
67 ObjectiveThreshold.Inclusive _inclusive_1 = new ObjectiveThreshold.Inclusive(0.75);
68 QueryBasedObjective _queryBasedObjective_1 = new QueryBasedObjective(_instance_1, ObjectiveKind.LOWER_IS_BETTER, _inclusive_1, 0);
69 AverageFreeHddMetric _instance_2 = AverageFreeHddMetric.instance();
70 ObjectiveThreshold.Inclusive _inclusive_2 = new ObjectiveThreshold.Inclusive(0.75);
71 QueryBasedObjective _queryBasedObjective_2 = new QueryBasedObjective(_instance_2, ObjectiveKind.LOWER_IS_BETTER, _inclusive_2, 0);
72 CompositeDirectionalThresholdObjective _compositeDirectionalThresholdObjective = new CompositeDirectionalThresholdObjective("Composite", _queryBasedObjective, _queryBasedObjective_1, _queryBasedObjective_2);
73 dse.addObjective(_compositeDirectionalThresholdObjective);
74 CostMetric _instance_3 = CostMetric.instance();
75 QueryBasedObjective _queryBasedObjective_3 = new QueryBasedObjective(_instance_3, ObjectiveKind.LOWER_IS_BETTER,
76 ObjectiveThreshold.NO_THRESHOLD, 0);
77 dse.addObjective(_queryBasedObjective_3);
78 dse.setMaxNumberOfThreads(1);
79 CpsStateCoder.Factory _factory = new CpsStateCoder.Factory();
80 dse.setStateCoderFactory(_factory);
81 final EvolutionaryStrategy strategy = EvolutionaryStrategyBuilder.createNsga2Strategy(25);
82 dse.startExplorationWithTimeout(strategy, ((2 * 60) * 1000));
83 Collection<Solution> _solutions = dse.getSolutions();
84 for (final Solution solution : _solutions) {
85 Object _stateCode = solution.getStateCode();
86 String _plus = ("Found solution: " + _stateCode);
87 String _plus_1 = (_plus + " ");
88 Fitness _fitness = solution.getArbitraryTrajectory().getFitness();
89 String _plus_2 = (_plus_1 + _fitness);
90 InputOutput.<String>println(_plus_2);
91 }
92 }
93}
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin
new file mode 100644
index 00000000..d975ffab
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin
Binary files differ
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java
new file mode 100644
index 00000000..e59ef004
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java
@@ -0,0 +1,154 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.generator;
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationType;
4import hu.bme.mit.inf.dslreasoner.domains.cps.CpsFactory;
5import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem;
6import hu.bme.mit.inf.dslreasoner.domains.cps.HostType;
7import hu.bme.mit.inf.dslreasoner.domains.cps.Request;
8import hu.bme.mit.inf.dslreasoner.domains.cps.Requirement;
9import hu.bme.mit.inf.dslreasoner.domains.cps.ResourceRequirement;
10import java.util.Collection;
11import java.util.Collections;
12import java.util.List;
13import java.util.Random;
14import org.eclipse.emf.common.util.EList;
15import org.eclipse.emf.common.util.URI;
16import org.eclipse.emf.ecore.EObject;
17import org.eclipse.emf.ecore.resource.Resource;
18import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
19import org.eclipse.xtext.xbase.lib.CollectionLiterals;
20import org.eclipse.xtext.xbase.lib.Extension;
21import org.eclipse.xtext.xbase.lib.ObjectExtensions;
22import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
23
24@SuppressWarnings("all")
25public class CpsGenerator {
26 @Extension
27 private final CpsFactory _cpsFactory = CpsFactory.eINSTANCE;
28
29 private static final int MIN_MEMORY = 1;
30
31 private static final int MAX_MEMORY = 6;
32
33 private static final int MIN_HDD = 1;
34
35 private static final int MAX_HDD = 30;
36
37 private static final int HIGH_CPU_FRACTION = 4;
38
39 private static final int MIN_REPLICAS = 1;
40
41 private static final int MAX_REPLICAS = 4;
42
43 private final Random random;
44
45 private final int applicationTypeCount;
46
47 private final int demandFactor;
48
49 public CpsGenerator(final long randomSeed, final int applicationTypeCount, final int demandFactor) {
50 Random _random = new Random(randomSeed);
51 this.random = _random;
52 this.applicationTypeCount = applicationTypeCount;
53 this.demandFactor = demandFactor;
54 }
55
56 public CyberPhysicalSystem generateCpsProblem() {
57 CyberPhysicalSystem _xblockexpression = null;
58 {
59 final ResourceSetImpl resourceSet = new ResourceSetImpl();
60 final Resource resource = resourceSet.createResource(URI.createFileURI("dummy.dummyext"));
61 CyberPhysicalSystem _createCyberPhysicalSystem = this._cpsFactory.createCyberPhysicalSystem();
62 final Procedure1<CyberPhysicalSystem> _function = (CyberPhysicalSystem it) -> {
63 final CyberPhysicalSystem cps = it;
64 EList<EObject> _contents = resource.getContents();
65 _contents.add(cps);
66 this.createLowCpuHostTypes(it);
67 final List<HostType> highCpuHostTypes = this.createHighCpuHostTypes(it);
68 for (int i = 0; (i < this.applicationTypeCount); i++) {
69 if (((i % CpsGenerator.HIGH_CPU_FRACTION) == 0)) {
70 this.createRandomApplicationType(it, highCpuHostTypes);
71 } else {
72 this.createRandomApplicationType(it, it.getHostTypes());
73 }
74 }
75 for (int i = 0; (i < this.demandFactor); i++) {
76 EList<Request> _requests = it.getRequests();
77 Request _createRequest = this._cpsFactory.createRequest();
78 final Procedure1<Request> _function_1 = (Request it_1) -> {
79 EList<ApplicationType> _applicationTypes = cps.getApplicationTypes();
80 for (final ApplicationType appType : _applicationTypes) {
81 EList<Requirement> _requirements = it_1.getRequirements();
82 Requirement _createRequirement = this._cpsFactory.createRequirement();
83 final Procedure1<Requirement> _function_2 = (Requirement it_2) -> {
84 it_2.setCount(this.nextInt(CpsGenerator.MIN_REPLICAS, CpsGenerator.MAX_REPLICAS));
85 it_2.setType(appType);
86 };
87 Requirement _doubleArrow = ObjectExtensions.<Requirement>operator_doubleArrow(_createRequirement, _function_2);
88 _requirements.add(_doubleArrow);
89 }
90 };
91 Request _doubleArrow = ObjectExtensions.<Request>operator_doubleArrow(_createRequest, _function_1);
92 _requests.add(_doubleArrow);
93 }
94 };
95 _xblockexpression = ObjectExtensions.<CyberPhysicalSystem>operator_doubleArrow(_createCyberPhysicalSystem, _function);
96 }
97 return _xblockexpression;
98 }
99
100 private void createRandomApplicationType(final CyberPhysicalSystem it, final Collection<HostType> allowedHostTypes) {
101 final ApplicationType appType = this._cpsFactory.createApplicationType();
102 final int memory = this.nextInt(CpsGenerator.MIN_MEMORY, CpsGenerator.MAX_MEMORY);
103 final int hdd = this.nextInt(CpsGenerator.MIN_HDD, CpsGenerator.MAX_HDD);
104 for (final HostType hostType : allowedHostTypes) {
105 EList<ResourceRequirement> _requirements = appType.getRequirements();
106 ResourceRequirement _createResourceRequirement = this._cpsFactory.createResourceRequirement();
107 final Procedure1<ResourceRequirement> _function = (ResourceRequirement it_1) -> {
108 it_1.setHostType(hostType);
109 it_1.setRequiredMemory(memory);
110 it_1.setRequiredHdd(hdd);
111 };
112 ResourceRequirement _doubleArrow = ObjectExtensions.<ResourceRequirement>operator_doubleArrow(_createResourceRequirement, _function);
113 _requirements.add(_doubleArrow);
114 }
115 EList<ApplicationType> _applicationTypes = it.getApplicationTypes();
116 _applicationTypes.add(appType);
117 }
118
119 private List<HostType> createLowCpuHostTypes(final CyberPhysicalSystem it) {
120 HostType _createHostType = this.createHostType(it, 2, 8, 75);
121 HostType _createHostType_1 = this.createHostType(it, 4, 16, 150);
122 HostType _createHostType_2 = this.createHostType(it, 3, 16, 75);
123 HostType _createHostType_3 = this.createHostType(it, 6, 32, 150);
124 return Collections.<HostType>unmodifiableList(CollectionLiterals.<HostType>newArrayList(_createHostType, _createHostType_1, _createHostType_2, _createHostType_3));
125 }
126
127 private List<HostType> createHighCpuHostTypes(final CyberPhysicalSystem it) {
128 HostType _createHostType = this.createHostType(it, 2, 4, 50);
129 HostType _createHostType_1 = this.createHostType(it, 4, 8, 100);
130 return Collections.<HostType>unmodifiableList(CollectionLiterals.<HostType>newArrayList(_createHostType, _createHostType_1));
131 }
132
133 private HostType createHostType(final CyberPhysicalSystem it, final int cost, final int memory, final int hdd) {
134 HostType _xblockexpression = null;
135 {
136 HostType _createHostType = this._cpsFactory.createHostType();
137 final Procedure1<HostType> _function = (HostType it_1) -> {
138 it_1.setCost(cost);
139 it_1.setDefaultMemory(memory);
140 it_1.setDefaultHdd(hdd);
141 };
142 final HostType hostType = ObjectExtensions.<HostType>operator_doubleArrow(_createHostType, _function);
143 EList<HostType> _hostTypes = it.getHostTypes();
144 _hostTypes.add(hostType);
145 _xblockexpression = hostType;
146 }
147 return _xblockexpression;
148 }
149
150 private int nextInt(final int lower, final int upper) {
151 int _nextInt = this.random.nextInt(((upper - lower) + 1));
152 return (lower + _nextInt);
153 }
154}