From 2531cfb60d747c261a20201415728beb0e24ab9b Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 15 Apr 2019 16:23:19 +0200 Subject: Satellite constellation case study WIP --- .../reasoner/dse/UnfinishedWFObjective.xtend | 56 ++++++++++++++++++++++ .../reasoner/dse/WF2ObjectiveConverter.xtend | 3 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend new file mode 100644 index 00000000..e0111cf6 --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/UnfinishedWFObjective.xtend @@ -0,0 +1,56 @@ +package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse + +import org.eclipse.viatra.dse.objectives.IObjective +import org.eclipse.viatra.query.runtime.api.IPatternMatch +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher +import org.eclipse.viatra.query.runtime.api.IQuerySpecification +import java.util.Collection +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine +import org.eclipse.viatra.query.runtime.emf.EMFScope +import org.eclipse.viatra.dse.base.ThreadContext +import java.util.List +import org.eclipse.viatra.dse.objectives.Comparators +import java.util.ArrayList +import java.util.Comparator + +class UnfinishedWFObjective implements IObjective { + Collection>> unfinishedWFs + val List> matchers + + public new(Collection>> unfinishedWFs) { + this.unfinishedWFs = unfinishedWFs + matchers = new ArrayList(unfinishedWFs.size) + } + override getName() '''unfinishedWFs''' + override createNew() { + return new UnfinishedWFObjective(unfinishedWFs) + } + override init(ThreadContext context) { + val engine = context.queryEngine//ViatraQueryEngine.on(new EMFScope(context.model)) + for(unfinishedWF : unfinishedWFs) { + matchers += unfinishedWF.getMatcher(engine) + } + } + + override getComparator() { Comparators.LOWER_IS_BETTER } + override getFitness(ThreadContext context) { + var sumOfMatches = 0 + for(matcher : matchers) { + val number = matcher.countMatches + //println('''«matcher.patternName» = «number»''') + sumOfMatches+=number + } + return sumOfMatches.doubleValue + } + + override getLevel() { 2 } + override isHardObjective() { true } + override satisifiesHardObjective(Double fitness) { return fitness <=0.01 } + + override setComparator(Comparator comparator) { + throw new UnsupportedOperationException("TODO: auto-generated method stub") + } + override setLevel(int level) { + throw new UnsupportedOperationException("TODO: auto-generated method stub") + } +} \ No newline at end of file diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/WF2ObjectiveConverter.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/WF2ObjectiveConverter.xtend index c601de40..63d78220 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/WF2ObjectiveConverter.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/WF2ObjectiveConverter.xtend @@ -18,7 +18,8 @@ class WF2ObjectiveConverter { def createCompletenessObjective( Collection>> unfinishedWF) { - createConstraintObjective(UNFINISHED_WFS_NAME, unfinishedWF) + // createConstraintObjective(UNFINISHED_WFS_NAME, unfinishedWF) + new UnfinishedWFObjective(unfinishedWF) } def createInvalidationObjective( -- cgit v1.2.3-54-g00ecf