From b7ed3353ba34dd837bfc15f7e48c30a2cdc7ce75 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 22 May 2019 20:38:53 -0400 Subject: MDEOptimiser implementation of CPS benchmark --- .../cps/mdeo/ExcludedOptimisationInterpreter.xtend | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/ExcludedOptimisationInterpreter.xtend (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/ExcludedOptimisationInterpreter.xtend') diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/ExcludedOptimisationInterpreter.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/ExcludedOptimisationInterpreter.xtend new file mode 100644 index 00000000..1e9c5adf --- /dev/null +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/ExcludedOptimisationInterpreter.xtend @@ -0,0 +1,85 @@ +package hu.bme.mit.inf.dslreasoner.domains.cps.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); + } +} -- cgit v1.2.3-70-g09d2