From cd63ccf6fba2a812a9b115635bbd209c92cebad0 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 9 Jun 2019 15:13:00 -0400 Subject: Bump MDEOptimizer version https://github.com/mde-optimiser/mde_optimiser/issues/49 --- .../domains/satellite/mdeo/CostObjective.xtend | 22 +- .../mdeo/ExcludedOptimisationInterpreter.xtend | 85 ------- .../satellite/mdeo/SatelliteMdeOptimiserMain.xtend | 5 +- .../domains/satellite/mdeo/satellite.mopt | 15 +- .../domains/satellite/queries/SatelliteQueries.vql | 283 ++++++++++----------- 5 files changed, 162 insertions(+), 248 deletions(-) delete mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/ExcludedOptimisationInterpreter.xtend (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner') 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 index 43b2902f..3a8688e9 100644 --- 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 @@ -1,13 +1,13 @@ 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" -// } -//} +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/ExcludedOptimisationInterpreter.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/ExcludedOptimisationInterpreter.xtend deleted file mode 100644 index ddf5748e..00000000 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/mdeo/ExcludedOptimisationInterpreter.xtend +++ /dev/null @@ -1,85 +0,0 @@ -package hu.bme.mit.inf.dslreasoner.domains.satellite.mdeo - -import java.util.Properties -import org.moeaframework.Executor -import org.moeaframework.Instrumenter -import org.moeaframework.algorithm.PeriodicAction -import org.moeaframework.core.TerminationCondition -import org.moeaframework.core.spi.AlgorithmFactory -import uk.ac.kcl.inf.mdeoptimiser.interfaces.cli.Run -import uk.ac.kcl.inf.mdeoptimiser.languages.mopt.Optimisation -import uk.ac.kcl.inf.mdeoptimiser.languages.mopt.SolverSpec -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.OptimisationInterpreter -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.executor.SolutionGenerator -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.moea.MoeaOptimisation -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.moea.algorithms.MoeaOptimisationAlgorithmProvider -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.moea.instrumentation.PopulationCollector -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.moea.problem.MoeaOptimisationProblem -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.operators.adaptation.MutationStepSizeStrategyFactory -import uk.ac.kcl.inf.mdeoptimiser.libraries.core.optimisation.output.MDEOBatch - -class ExcludedMoeaOptimisation extends MoeaOptimisation { - SolutionGenerator solutionGenerator - Instrumenter algorithmStepSizeInstrumenter - - override execute(SolverSpec solverSpec, SolutionGenerator solutionGenerator) { - this.solutionGenerator = solutionGenerator - super.execute(solverSpec, solutionGenerator) - } - - override Instrumenter runOptimisation(SolverSpec solverSpec, Properties optimisationProperties) { - val algorithmFactory = new AlgorithmFactory - algorithmFactory.addProvider(new MoeaOptimisationAlgorithmProvider) - - algorithmStepSizeInstrumenter = new Instrumenter().addExcludedPackage("org.eclipse").withProblemClass( - MoeaOptimisationProblem, solutionGenerator).attachApproximationSetCollector().attachElapsedTimeCollector(). - attachPopulationSizeCollector.attach(new PopulationCollector()).withFrequency(1).withFrequencyType( - PeriodicAction.FrequencyType.STEPS) - - var stepSizeStrategy = new MutationStepSizeStrategyFactory(solverSpec.algorithm, algorithmStepSizeInstrumenter). - strategy - - solutionGenerator.setMutationStepSizeStrategy(stepSizeStrategy) - - // TODO: Place this in a better location. - // Exclude JDK packages from Instrumenter - this.algorithmStepSizeInstrumenter.addExcludedPackage("jdk") - - new Executor().usingAlgorithmFactory(algorithmFactory).withAlgorithm(solverSpec.algorithm.name) // Initialize problem with our solution generator - .withProblemClass(MoeaOptimisationProblem, solutionGenerator).withProperties(optimisationProperties). - withInstrumenter(algorithmStepSizeInstrumenter).withTerminationCondition( - optimisationProperties.get("terminationCondition") as TerminationCondition).run() - - return algorithmStepSizeInstrumenter - } -} - -class ExcludedOptimisationInterpreter extends OptimisationInterpreter { - val Optimisation model - - new(String projectPath, Optimisation model) { - super(projectPath, model) - this.model = model - } - - override start() { - // This model provider loads the model given by the user in the DSL - var solutionGenerator = new SolutionGenerator(model, getBreedingOperators, getMutationOperators, - getModelProvider, getMetamodel); - - return new ExcludedMoeaOptimisation().execute(model.solver, solutionGenerator) - } - -} - -class ExcludedRun extends Run { - override runBatch(String moptProjectPath, Optimisation optimisationModel, Integer batch, boolean singleBatch) { - val optimisationInterpreter = new ExcludedOptimisationInterpreter(moptProjectPath, optimisationModel); - val startTime = System.nanoTime(); - val optimisationOutcome = optimisationInterpreter.start(); - val endTime = System.nanoTime(); - val experimentDuration = ((endTime - startTime) / 1000000); - val generatedRules = optimisationInterpreter.getRulegenOperators(); - return new MDEOBatch(batch, experimentDuration, optimisationOutcome, generatedRules, singleBatch); - } -} 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 index c5a30f94..58034c43 100644 --- 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 @@ -9,7 +9,7 @@ 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.languages.MoptStandaloneSetup +import uk.ac.kcl.inf.mdeoptimiser.interfaces.cli.Run class SatelliteMdeOptimiserMain { static val PROJECT_PATH = "." @@ -25,8 +25,7 @@ class SatelliteMdeOptimiserMain { EPackage.Registry.INSTANCE.put(SatellitePackage.eNS_URI, SatellitePackage.eINSTANCE) fixupHenshinModel("model/satellite.henshin", "model/satellite_fixup.henshin", #{"satellite.ecore" -> SatellitePackage.eNS_URI}) - val injector = new MoptStandaloneSetup().createInjectorAndDoEMFRegistration(); - injector.getInstance(ExcludedRun).run(PROJECT_PATH, MOPT_PATH) + Run.main(#["-p", PROJECT_PATH, "-m", MOPT_PATH]) } private def static void fixupHenshinModel(String originalPath, String outputPath, Map remapMap) { 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 index 138ea309..e9bd1a64 100644 --- 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 @@ -10,13 +10,14 @@ goal { } search { - mutate using unit "addCubeSat3U" -// mutate { "CubeSat3U" } -// mutate { "CubeSat6U" } -// mutate { "SmallSat" } -// mutate { "InterferometryPayload" } -// mutate { "CommSubsystem" } -// mutate { "DirectedCommunicationLink" } +// mutate using unit "addCubeSat3U" + mutate { "CubeSat3U" } + mutate { "CubeSat6U" } + mutate { "SmallSat" } + mutate { "InterferometryPayload" } + mutate { "UHFCommSubsystem" } + mutate { "XCommSubsystem" } + mutate { "KaCommSubsystem" } } solver { 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 bdda6ec7..711c7ce6 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 @@ -158,147 +158,146 @@ pattern smallSat(Sat : SmallSat) { SmallSat(Sat); } -//// -//// Metrics -//// // -//// Coverage +// Metrics // -//pattern coverageMetric(Coverage : java Double) { -// Coverage == sum find missionCoverage(_, #_); -//} -// -//private pattern missionCoverage(Mission : InterferometryMission, Coverage : java Double) { -// InterferometryMission.observationTime(Mission, ObservationTime); -// ObserverCount == count find spacecraftWithInterferometryPayload(Mission, _); -// Coverage == eval(Math.pow(1 - 2.0 / ObserverCount, 1 + 9 * (1.0 / ObservationTime)) + 0.05 * ObservationTime / 3); -//} -// -//// Time -// -//pattern timeMetric(Time : java Double) { -// Time == sum find missionTime(_, #_); -//} -// -//private pattern missionTime(Mission : InterferometryMission, Time : java Double) { -// InterferometryMission.observationTime(Mission, ObservationTime); -// TrasmitTime == sum find transmitTime(Mission, _, #_); -// Time == eval(TrasmitTime + 60.0 * ObservationTime); -//} -// -//private pattern transmitTime(Mission : InterferometryMission, Spacecraft : Spacecraft, TransmitTime : java Double) { -// ConstellationMission.spacecraft(Mission, Spacecraft); -// find scienceData(Spacecraft, ScienceData); -// IncomingData == sum find incomingData(Spacecraft, _, #_); -// find transmitRate(Spacecraft, TransmitRate); -// TransmitTime == eval((ScienceData + IncomingData) / (7.5 * TransmitRate)); -//} -// -//private pattern incomingData(Spacecraft : Spacecraft, Source : Spacecraft, Data : java Double) { -// find indirectCommunicationLink(Source, Spacecraft); -// find scienceData(Source, Data); -//} -// -//private pattern scienceData(Spacecraft : Spacecraft, Data : java Double) { -// ConstellationMission.spacecraft(Mission, Spacecraft); -// InterferometryMission.observationTime(Mission, ObservationTime); -// Data == eval(12.0 * ObservationTime); -//} -// -//private pattern transmitRate(Spacecraft : Spacecraft, TransmitRate : java Double) { -// find spacecraftUplink(Spacecraft, Comm, Target); -// UHFCommSubsystem(Comm); -// Spacecraft(Target); -// TransmitRate == 5.0; -//} or { -// find spacecraftUplink(Spacecraft, Comm, Target); -// XCommSubsystem(Comm); -// Spacecraft(Target); -// TransmitRate == 1.6; -//} or { -// find spacecraftUplink(Spacecraft, Comm, Target); -// XCommSubsystem(Comm); -// GroundStationNetwork(Target); -// TransmitRate == 0.7; -//} or { -// find spacecraftUplink(Spacecraft, Comm, Target); -// KaCommSubsystem(Comm); -// Spacecraft(Target); -// TransmitRate == 220.0; -//} or { -// find spacecraftUplink(Spacecraft, Comm, Target); -// KaCommSubsystem(Comm); -// GroundStationNetwork(Target); -// TransmitRate == 80.0; -//} -// -//private pattern spacecraftUplink(Spacecraft : Spacecraft, TargetSubsystem : CommSubsystem, Target : CommunicatingElement) { -// CommunicatingElement.communicationLink(Spacecraft, Link); -// DirectedCommunicationLink.target(Link, TargetSubsystem); -// CommunicatingElement.commSubsystem(Target, TargetSubsystem); -//} -// -//// Cost -// -//pattern costMetric(Cost : java Double) { -// Cost == sum find missionCost(_, #_); -//} -// -//private pattern missionCost(Mission : InterferometryMission, Cost : java Double) { -// InterferometryMission.observationTime(Mission, ObservationTime); -// SpacecraftCost == sum find spacecraftCost(Mission, _, #_); -// Cost == eval(SpacecraftCost + 100000.0 * ObservationTime); -//} -// -//private pattern spacecraftCost(Mission : InterferometryMission, Spacecraft : Spacecraft, Cost : java Double) { -// ConstellationMission.spacecraft(Mission, Spacecraft); -// find spacecraftOfKindCount(Spacecraft, KindCount); -// find basePrice(Spacecraft, BasePrice); -// find interferometryPayloadCost(Spacecraft, InterferometryPayloadCost); -// find additionalCommSubsystemCost(Spacecraft, AdditionalCommSubsystemCost); -// Cost == eval(BasePrice * Math.pow(KindCount, -0.25) + InterferometryPayloadCost + AdditionalCommSubsystemCost); -//} -// -//private pattern spacecraftOfKindCount(Sat : Spacecraft, Count : java Integer) { -// CubeSat3U(Sat); -// Count == count find cubeSat3U(_); -//} or { -// CubeSat6U(Sat); -// Count == count find cubeSat6U(_); -//} or { -// SmallSat(Sat); -// Count == count find smallSat(_); -//} -// -//private pattern basePrice(Spacecraft : Spacecraft, BasePrice : java Double) { -// CubeSat3U(Spacecraft); -// BasePrice == 250000.0; -//} or { -// CubeSat6U(Spacecraft); -// BasePrice == 750000.0; -//} or { -// SmallSat(Spacecraft); -// BasePrice == 3000000.0; -//} -// -//private pattern interferometryPayloadCost(Spacecraft : Spacecraft, Cost : java Double) { -// find spacecraftWithInterferometryPayload(_, Spacecraft); -// Cost == 50000.0; -//} or { -// neg find spacecraftWithInterferometryPayload(_, Spacecraft); -// Cost == 0.0; -//} -// -//private pattern additionalCommSubsystemCost(Spacecraft : Spacecraft, Cost : java Double) { -// find spacecraftWithTwoCommSubsystems(Spacecraft); -// Cost == 100000.0; -//} or { -// neg find spacecraftWithTwoCommSubsystems(Spacecraft); -// Cost == 0.0; -//} -// -//private pattern spacecraftWithTwoCommSubsystems(Spacecraft : Spacecraft) { -// Spacecraft.commSubsystem(Spacecraft, Subsystem1); -// Spacecraft.commSubsystem(Spacecraft, Subsystem2); -// Subsystem1 != Subsystem2; -//} \ No newline at end of file + +// Coverage + +pattern coverageMetric(Coverage : java Double) { + Coverage == sum find missionCoverage(_, #_); +} + +private pattern missionCoverage(Mission : InterferometryMission, Coverage : java Double) { + InterferometryMission.observationTime(Mission, ObservationTime); + ObserverCount == count find spacecraftWithInterferometryPayload(Mission, _); + Coverage == eval(Math.pow(1 - 2.0 / ObserverCount, 1 + 9 * (1.0 / ObservationTime)) + 0.05 * ObservationTime / 3); +} + +// Time + +pattern timeMetric(Time : java Double) { + Time == sum find missionTime(_, #_); +} + +private pattern missionTime(Mission : InterferometryMission, Time : java Double) { + InterferometryMission.observationTime(Mission, ObservationTime); + TrasmitTime == sum find transmitTime(Mission, _, #_); + Time == eval(TrasmitTime + 60.0 * ObservationTime); +} + +private pattern transmitTime(Mission : InterferometryMission, Spacecraft : Spacecraft, TransmitTime : java Double) { + ConstellationMission.spacecraft(Mission, Spacecraft); + find scienceData(Spacecraft, ScienceData); + IncomingData == sum find incomingData(Spacecraft, _, #_); + find transmitRate(Spacecraft, TransmitRate); + TransmitTime == eval((ScienceData + IncomingData) / (7.5 * TransmitRate)); +} + +private pattern incomingData(Spacecraft : Spacecraft, Source : Spacecraft, Data : java Double) { + find indirectCommunicationLink(Source, Spacecraft); + find scienceData(Source, Data); +} + +private pattern scienceData(Spacecraft : Spacecraft, Data : java Double) { + ConstellationMission.spacecraft(Mission, Spacecraft); + InterferometryMission.observationTime(Mission, ObservationTime); + Data == eval(12.0 * ObservationTime); +} + +private pattern transmitRate(Spacecraft : Spacecraft, TransmitRate : java Double) { + find spacecraftUplink(Spacecraft, Comm, Target); + UHFCommSubsystem(Comm); + Spacecraft(Target); + TransmitRate == 5.0; +} or { + find spacecraftUplink(Spacecraft, Comm, Target); + XCommSubsystem(Comm); + Spacecraft(Target); + TransmitRate == 1.6; +} or { + find spacecraftUplink(Spacecraft, Comm, Target); + XCommSubsystem(Comm); + GroundStationNetwork(Target); + TransmitRate == 0.7; +} or { + find spacecraftUplink(Spacecraft, Comm, Target); + KaCommSubsystem(Comm); + Spacecraft(Target); + TransmitRate == 220.0; +} or { + find spacecraftUplink(Spacecraft, Comm, Target); + KaCommSubsystem(Comm); + GroundStationNetwork(Target); + TransmitRate == 80.0; +} + +private pattern spacecraftUplink(Spacecraft : Spacecraft, TargetSubsystem : CommSubsystem, Target : CommunicatingElement) { + CommunicatingElement.commSubsystem.target(Spacecraft, TargetSubsystem); + CommunicatingElement.commSubsystem(Target, TargetSubsystem); +} + +// Cost + +pattern costMetric(Cost : java Double) { + Cost == sum find missionCost(_, #_); +} + +private pattern missionCost(Mission : InterferometryMission, Cost : java Double) { + InterferometryMission.observationTime(Mission, ObservationTime); + SpacecraftCost == sum find spacecraftCost(Mission, _, #_); + Cost == eval(SpacecraftCost + 100000.0 * ObservationTime); +} + +private pattern spacecraftCost(Mission : InterferometryMission, Spacecraft : Spacecraft, Cost : java Double) { + ConstellationMission.spacecraft(Mission, Spacecraft); + find spacecraftOfKindCount(Spacecraft, KindCount); + find basePrice(Spacecraft, BasePrice); + find interferometryPayloadCost(Spacecraft, InterferometryPayloadCost); + find additionalCommSubsystemCost(Spacecraft, AdditionalCommSubsystemCost); + Cost == eval(BasePrice * Math.pow(KindCount, -0.25) + InterferometryPayloadCost + AdditionalCommSubsystemCost); +} + +private pattern spacecraftOfKindCount(Sat : Spacecraft, Count : java Integer) { + CubeSat3U(Sat); + Count == count find cubeSat3U(_); +} or { + CubeSat6U(Sat); + Count == count find cubeSat6U(_); +} or { + SmallSat(Sat); + Count == count find smallSat(_); +} + +private pattern basePrice(Spacecraft : Spacecraft, BasePrice : java Double) { + CubeSat3U(Spacecraft); + BasePrice == 250000.0; +} or { + CubeSat6U(Spacecraft); + BasePrice == 750000.0; +} or { + SmallSat(Spacecraft); + BasePrice == 3000000.0; +} + +private pattern interferometryPayloadCost(Spacecraft : Spacecraft, Cost : java Double) { + find spacecraftWithInterferometryPayload(_, Spacecraft); + Cost == 50000.0; +} or { + neg find spacecraftWithInterferometryPayload(_, Spacecraft); + Cost == 0.0; +} + +private pattern additionalCommSubsystemCost(Spacecraft : Spacecraft, Cost : java Double) { + find spacecraftWithTwoCommSubsystems(Spacecraft); + Cost == 100000.0; +} or { + neg find spacecraftWithTwoCommSubsystems(Spacecraft); + Cost == 0.0; +} + +private pattern spacecraftWithTwoCommSubsystems(Spacecraft : Spacecraft) { + Spacecraft.commSubsystem(Spacecraft, Subsystem1); + Spacecraft.commSubsystem(Spacecraft, Subsystem2); + Subsystem1 != Subsystem2; +} -- cgit v1.2.3-54-g00ecf