aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend')
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend74
1 files changed, 74 insertions, 0 deletions
diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend
new file mode 100644
index 00000000..503c06ea
--- /dev/null
+++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/dse/RuleBasedCpsSolver.xtend
@@ -0,0 +1,74 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.dse
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.CpsFactory
4import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage
5import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem
6import hu.bme.mit.inf.dslreasoner.domains.cps.queries.Allocate
7import hu.bme.mit.inf.dslreasoner.domains.cps.queries.AverageFreeHddMetric
8import hu.bme.mit.inf.dslreasoner.domains.cps.queries.AverageFreeMemoryMetric
9import hu.bme.mit.inf.dslreasoner.domains.cps.queries.CostMetric
10import hu.bme.mit.inf.dslreasoner.domains.cps.queries.CreateHostInstance
11import hu.bme.mit.inf.dslreasoner.domains.cps.queries.GuidanceObjective
12import hu.bme.mit.inf.dslreasoner.domains.cps.queries.RequirementNotSatisfied
13import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.CompositeDirectionalThresholdObjective
14import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveKind
15import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.ObjectiveThreshold
16import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.QueryBasedObjective
17import org.eclipse.viatra.dse.api.DesignSpaceExplorer
18import org.eclipse.viatra.dse.evolutionary.EvolutionaryStrategyBuilder
19import org.eclipse.viatra.transformation.runtime.emf.rules.batch.BatchTransformationRuleFactory
20
21class RuleBasedCpsSolver {
22 extension val BatchTransformationRuleFactory = new BatchTransformationRuleFactory
23 extension val CpsFactory = CpsFactory.eINSTANCE
24
25 def solve(CyberPhysicalSystem problem) {
26// for (request : problem.requests) {
27// for (req : request.requirements) {
28// for (i : 0 ..< req.count) {
29// val app = createApplicationInstance
30// req.type.instances += app
31// req.instances += app
32// }
33// }
34// }
35 val dse = new DesignSpaceExplorer
36 dse.addMetaModelPackage(CpsPackage.eINSTANCE)
37 dse.initialModel = problem.eResource.resourceSet
38 dse.addTransformationRule(createRule.precondition(RequirementNotSatisfied.instance).action [
39 val app = createApplicationInstance
40 req.type.instances += app
41 req.instances += app
42 ].build)
43 dse.addTransformationRule(createRule.precondition(Allocate.instance).action [
44 app.allocatedTo = host
45 ].build)
46// dse.addTransformationRule(createRule(UnallocateAppInstance.instance).action [
47// app.allocatedTo = null
48// ].build)
49 dse.addTransformationRule(createRule.precondition(CreateHostInstance.instance).action [
50 hostType.instances += createHostInstance
51 ].build)
52// dse.addTransformationRule(createRule(RemoveHostInstance.instance).action [
53// hostInstance.type.instances -= hostInstance
54// ].build)
55 dse.addObjective(
56 new CompositeDirectionalThresholdObjective("Composite",
57 new QueryBasedObjective(GuidanceObjective.instance, ObjectiveKind.LOWER_IS_BETTER,
58 new ObjectiveThreshold.Inclusive(0), 0),
59 new QueryBasedObjective(AverageFreeMemoryMetric.instance, ObjectiveKind.LOWER_IS_BETTER,
60 new ObjectiveThreshold.Inclusive(0.75), 0),
61 new QueryBasedObjective(AverageFreeHddMetric.instance, ObjectiveKind.LOWER_IS_BETTER,
62 new ObjectiveThreshold.Inclusive(0.75), 0)))
63 dse.addObjective(
64 new QueryBasedObjective(CostMetric.instance, ObjectiveKind.LOWER_IS_BETTER,
65 ObjectiveThreshold.NO_THRESHOLD, 0))
66 dse.maxNumberOfThreads = 1
67 dse.stateCoderFactory = new CpsStateCoder.Factory
68 val strategy = EvolutionaryStrategyBuilder.createNsga2Strategy(25)
69 dse.startExplorationWithTimeout(strategy, 2 * 60 * 1000)
70 for (solution : dse.solutions) {
71 println("Found solution: " + solution.stateCode + " " + solution.arbitraryTrajectory.fitness)
72 }
73 }
74}