From fc84d3fe670331bc89fb1e4c44104bc1fc811438 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 14 Aug 2019 18:26:33 +0200 Subject: Measurements WIP --- .../domains/satellite/mdeo/CostObjective.xtend | 13 ------ .../satellite/mdeo/LocalSearchEngineManager.xtend | 31 ------------- .../mdeo/MetricBasedGuidanceFunction.xtend | 47 -------------------- .../satellite/mdeo/PatternMatchConstraint.xtend | 29 ------------ .../satellite/mdeo/SatelliteMdeOptimiserMain.xtend | 51 ---------------------- .../domains/satellite/mdeo/satellite.mopt | 36 --------------- .../domains/satellite/queries/SatelliteQueries.vql | 11 +++-- 7 files changed, 7 insertions(+), 211 deletions(-) delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/CostObjective.xtend delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/LocalSearchEngineManager.xtend delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/MetricBasedGuidanceFunction.xtend delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/PatternMatchConstraint.xtend delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/SatelliteMdeOptimiserMain.xtend delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/satellite.mopt (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src') diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/CostObjective.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/CostObjective.xtend deleted file mode 100644 index 43b2902f..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/CostObjective.xtend +++ /dev/null @@ -1,13 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -//import hu.bme.mit.inf.dslreasoner.domains.satellite.queries.CostMetric -// -//class CostObjective extends MetricBasedGuidanceFunction { -// new() { -// super(CostMetric.instance) -// } -// -// override getName() { -// "Cost" -// } -//} diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/LocalSearchEngineManager.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/LocalSearchEngineManager.xtend deleted file mode 100644 index ee7f0060..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/LocalSearchEngineManager.xtend +++ /dev/null @@ -1,31 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -import hu.bme.mit.inf.dslreasoner.domains.satellite.queries.SatelliteQueries -import java.util.WeakHashMap -import org.eclipse.emf.ecore.EObject -import org.eclipse.viatra.query.runtime.api.AdvancedViatraQueryEngine -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions -import org.eclipse.viatra.query.runtime.emf.EMFScope -import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchHints - -class LocalSearchEngineManager { - public static val INSTANCE = new LocalSearchEngineManager - - val WeakHashMap engineMap = new WeakHashMap - - private new() { - } - - def getEngine(EObject eObject) { - engineMap.computeIfAbsent(eObject) [ - val scope = new EMFScope(it) - val localSearchHints = LocalSearchHints.^default.build - val options = ViatraQueryEngineOptions.defineOptions.withDefaultHint(localSearchHints).withDefaultBackend( - localSearchHints.queryBackendFactory).build - val engine = AdvancedViatraQueryEngine.on(scope, options) - SatelliteQueries.instance.prepare(engine) - engine - ] - } -} diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/MetricBasedGuidanceFunction.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/MetricBasedGuidanceFunction.xtend deleted file mode 100644 index 1529794f..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/MetricBasedGuidanceFunction.xtend +++ /dev/null @@ -1,47 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -import org.eclipse.viatra.query.runtime.api.IPatternMatch -import org.eclipse.viatra.query.runtime.api.IQuerySpecification -import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.IGuidanceFunction -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.interpreter.guidance.Solution - -abstract class MetricBasedGuidanceFunction implements IGuidanceFunction { - val IQuerySpecification> querySpecification - - protected new(IQuerySpecification> querySpecification) { - this.querySpecification = querySpecification - if (querySpecification.parameters.size != 1) { - throw new IllegalArgumentException("Metric must have a single parameter") - } - } - - override computeFitness(Solution model) { - val value = getMetricValue(model) - computeFitness(value) - } - - protected def double computeFitness(double metricValue) { - metricValue - } - - private def getMetricValue(Solution solution) { - val model = solution.model - val queryEngine = LocalSearchEngineManager.INSTANCE.getEngine(model) - val matcher = querySpecification.getMatcher(queryEngine) - val iterator = matcher.allMatches.iterator - if (!iterator.hasNext) { - throw new IllegalStateException("Too few matches") - } - val objectValue = iterator.next.get(0) - if (objectValue instanceof Number) { - val doubleValue = objectValue.doubleValue - if (iterator.hasNext) { - throw new IllegalStateException("Too many matches") - } - doubleValue - } else { - throw new IllegalStateException("Metric value must be a number") - } - } -} diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/PatternMatchConstraint.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/PatternMatchConstraint.xtend deleted file mode 100644 index b238e64f..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/PatternMatchConstraint.xtend +++ /dev/null @@ -1,29 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -import com.google.common.collect.ImmutableList -import hu.bme.mit.inf.dslreasoner.domains.satellite.queries.SatelliteQueries -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.IGuidanceFunction -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.interpreter.guidance.Solution - -class PatternMatchConstraint implements IGuidanceFunction { - static val CONSTRAINT_ANNOTATION_NAME = "Constraint" - - val queries = ImmutableList.copyOf(SatelliteQueries.instance.specifications.filter [ - allAnnotations.exists[name == CONSTRAINT_ANNOTATION_NAME] - ]) - - override getName() { - "PatternMatch" - } - - override computeFitness(Solution solution) { - val model = solution.model - val queryEngine = LocalSearchEngineManager.INSTANCE.getEngine(model) - var int matchCount = 0 - for (query : queries) { - val matcher = query.getMatcher(queryEngine) - matchCount += matcher.countMatches - } - matchCount - } -} diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/SatelliteMdeOptimiserMain.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/SatelliteMdeOptimiserMain.xtend deleted file mode 100644 index 58034c43..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/SatelliteMdeOptimiserMain.xtend +++ /dev/null @@ -1,51 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -import java.io.BufferedReader -import java.io.BufferedWriter -import java.io.FileReader -import java.io.FileWriter -import java.util.Map -import org.eclipse.emf.ecore.EPackage -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl -import satellite.SatellitePackage -import uk.ac.kcl.inf.mdeoptimiser.interfaces.cli.Run - -class SatelliteMdeOptimiserMain { - static val PROJECT_PATH = "." - static val MOPT_PATH = "src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/satellite.mopt" - - private new() { - new IllegalStateException("This is a static utility class and should not be instantiated directly.") - } - - public static def void main(String[] args) { - Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, - new XMIResourceFactoryImpl) - EPackage.Registry.INSTANCE.put(SatellitePackage.eNS_URI, SatellitePackage.eINSTANCE) - fixupHenshinModel("model/satellite.henshin", "model/satellite_fixup.henshin", - #{"satellite.ecore" -> SatellitePackage.eNS_URI}) - Run.main(#["-p", PROJECT_PATH, "-m", MOPT_PATH]) - } - - private def static void fixupHenshinModel(String originalPath, String outputPath, Map remapMap) { - val reader = new BufferedReader(new FileReader(originalPath)) - try { - val writer = new BufferedWriter(new FileWriter(outputPath)) - try { - var String line - while ((line = reader.readLine) !== null) { - for (entry : remapMap.entrySet) { - line = line.replace(entry.key, entry.value) - } - writer.write(line) - writer.write("\n") - } - } finally { - writer.close - } - } finally { - reader.close - } - } -} diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/satellite.mopt b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/satellite.mopt deleted file mode 100644 index e9bd1a64..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/satellite.mopt +++ /dev/null @@ -1,36 +0,0 @@ -problem { - basepath - metamodel - model <../inputs/SatelliteInstance.xmi> -} - -goal { - objective Cost minimise java { "hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo.CostObjective" } - constraint PatternMatch java { "hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo.PatternMatchConstraint" } -} - -search { -// mutate using unit "addCubeSat3U" - mutate { "CubeSat3U" } - mutate { "CubeSat6U" } - mutate { "SmallSat" } - mutate { "InterferometryPayload" } - mutate { "UHFCommSubsystem" } - mutate { "XCommSubsystem" } - mutate { "KaCommSubsystem" } -} - -solver { - optimisation provider moea algorithm NSGAII { - variation: mutation - population: 25 - mutation.step: 3 - mutation.strategy: random - } - - termination { - time: 120 - } - - batches 1 -} \ No newline at end of file diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/queries/SatelliteQueries.vql b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/queries/SatelliteQueries.vql index c1d3f7d3..1f83a3b0 100644 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/queries/SatelliteQueries.vql +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/queries/SatelliteQueries.vql @@ -21,6 +21,13 @@ pattern transmittingGroundStationNetwork(Station : GroundStationNetwork) { find transmittingCommSubsystem(Station, _); } +@Constraint(severity = "error", key = {Station}, + message = "The ground station network may not have UHF communication subsystems.") +pattern roundStationNetworkUHF(Station : GroundStationNetwork) { + CommunicatingElement.commSubsystem(Station, Comm); + UHFCommSubsystem(Comm); +} + // At least two spacecraft must have the interferometry payload configured @Constraint(severity = "error", key = {Mission}, @@ -97,10 +104,6 @@ private pattern cubeSat3U(Sat : CubeSat3U) { CubeSat3U(Sat); } -private pattern cubeSat6U(Sat : CubeSat6U) { - CubeSat6U(Sat); -} - // No communication loops may exist // No spacecraft may directly communicate with itself -- cgit v1.2.3-54-g00ecf