From 89fe6051866933495237f0c733147700275b9549 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sat, 25 May 2019 15:00:10 -0400 Subject: MDEOptimiser tuning for CPS --- .../domains/cps/cplex/.CbcCpsMain.xtendbin | Bin 6363 -> 7229 bytes .../domains/cps/cplex/.CpsToLpTranslator.xtendbin | Bin 11104 -> 11104 bytes .../dslreasoner/domains/cps/cplex/CbcCpsMain.java | 40 +++++++++++++------- .../domains/cps/dse/.CpsStateCoder.xtendbin | Bin 7626 -> 7626 bytes .../domains/cps/dse/.RuleBasedCpsMain.xtendbin | Bin 5189 -> 5193 bytes .../domains/cps/generator/.CpsGenerator.xtendbin | Bin 8807 -> 9849 bytes .../domains/cps/generator/CpsGenerator.java | 23 ++++++++++++ .../domains/cps/mdeo/.CpsMdeOptimiserMain.xtendbin | Bin 4969 -> 6286 bytes .../mdeo/.ExcludedOptimisationInterpreter.xtendbin | Bin 7559 -> 7559 bytes .../domains/cps/mdeo/CpsMdeOptimiserMain.java | 41 ++++++++++++++++++++- 10 files changed, 89 insertions(+), 15 deletions(-) (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps') diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin index 1ba73ccf..71900272 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CbcCpsMain.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin index b8ff0f95..b0bc1a5c 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/.CpsToLpTranslator.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java index 00a4887b..a6ff0d0e 100644 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.java @@ -13,7 +13,8 @@ import java.io.FileWriter; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; @@ -30,6 +31,8 @@ public class CbcCpsMain { private static final String SOLUTION_FILE = "solution.txt"; + private static final Pattern VALUE_REGEX = Pattern.compile("Optimal - objective value\\s*([0-9]+(\\.[0-9]+)?)"); + private CbcCpsMain() { new IllegalStateException("This is a static utility class and should not be instantiated directly."); } @@ -40,7 +43,7 @@ public class CbcCpsMain { XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl(); _extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, _xMIResourceFactoryImpl); EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE); - final CpsGenerator generator = new CpsGenerator(1, 4, 2); + final CpsGenerator generator = new CpsGenerator(1, 4, 1); final CyberPhysicalSystem problem = generator.generateCpsProblem(); final CpsToLpTranslator toLp = new CpsToLpTranslator(problem, 10, true); final CharSequence lp = toLp.getLpProblem(); @@ -69,27 +72,36 @@ public class CbcCpsMain { } FileReader _fileReader = new FileReader(CbcCpsMain.SOLUTION_FILE); final BufferedReader reader = new BufferedReader(_fileReader); + double value = Double.NaN; try { - final Consumer _function = (String it) -> { - InputOutput.println(it); - }; - reader.lines().forEach(_function); + String line = null; + while (((line = reader.readLine()) != null)) { + { + InputOutput.println(line); + final Matcher matcher = CbcCpsMain.VALUE_REGEX.matcher(line); + boolean _matches = matcher.matches(); + if (_matches) { + value = Double.parseDouble(matcher.group(1)); + } + } + } } finally { reader.close(); } - final Function1> _function_1 = (Request it) -> { - final Function1 _function_2 = (Requirement it_1) -> { + final Function1> _function = (Request it) -> { + final Function1 _function_1 = (Requirement it_1) -> { return Integer.valueOf(it_1.getCount()); }; - return ListExtensions.map(it.getRequirements(), _function_2); + return ListExtensions.map(it.getRequirements(), _function_1); }; - final Function2 _function_2 = (Integer p1, Integer p2) -> { + final Function2 _function_1 = (Integer p1, Integer p2) -> { return Integer.valueOf(((p1).intValue() + (p2).intValue())); }; - Integer _reduce = IterableExtensions.reduce(IterableExtensions.flatMap(problem.getRequests(), _function_1), _function_2); - int _multiply = ((_reduce).intValue() * 5); - String _plus_1 = ("Additional cost: " + Integer.valueOf(_multiply)); - InputOutput.println(_plus_1); + Integer _reduce = IterableExtensions.reduce(IterableExtensions.flatMap(problem.getRequests(), _function), _function_1); + final int applicationCost = ((_reduce).intValue() * 5); + final double cost = (applicationCost + value); + InputOutput.println(); + InputOutput.println(("Cost: " + Double.valueOf(cost))); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin index a727fe17..94ae5907 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.CpsStateCoder.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin index 8217bf52..933852a1 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/dse/.RuleBasedCpsMain.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin index 306f031b..a46b8a8e 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/.CpsGenerator.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java index e59ef004..ce0cd02d 100644 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/generator/CpsGenerator.java @@ -1,5 +1,6 @@ package hu.bme.mit.inf.dslreasoner.domains.cps.generator; +import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationInstance; import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationType; import hu.bme.mit.inf.dslreasoner.domains.cps.CpsFactory; import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem; @@ -17,6 +18,7 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.ExclusiveRange; import org.eclipse.xtext.xbase.lib.Extension; import org.eclipse.xtext.xbase.lib.ObjectExtensions; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; @@ -46,11 +48,18 @@ public class CpsGenerator { private final int demandFactor; + private final boolean populateAppInstances; + public CpsGenerator(final long randomSeed, final int applicationTypeCount, final int demandFactor) { + this(randomSeed, applicationTypeCount, demandFactor, false); + } + + public CpsGenerator(final long randomSeed, final int applicationTypeCount, final int demandFactor, final boolean populateAppInstances) { Random _random = new Random(randomSeed); this.random = _random; this.applicationTypeCount = applicationTypeCount; this.demandFactor = demandFactor; + this.populateAppInstances = populateAppInstances; } public CyberPhysicalSystem generateCpsProblem() { @@ -83,6 +92,20 @@ public class CpsGenerator { final Procedure1 _function_2 = (Requirement it_2) -> { it_2.setCount(this.nextInt(CpsGenerator.MIN_REPLICAS, CpsGenerator.MAX_REPLICAS)); it_2.setType(appType); + if (this.populateAppInstances) { + int _count = it_2.getCount(); + ExclusiveRange _doubleDotLessThan = new ExclusiveRange(0, _count, true); + for (final Integer j : _doubleDotLessThan) { + { + final ApplicationInstance app = this._cpsFactory.createApplicationInstance(); + app.setType(appType); + EList _instances = appType.getInstances(); + _instances.add(app); + EList _instances_1 = it_2.getInstances(); + _instances_1.add(app); + } + } + } }; Requirement _doubleArrow = ObjectExtensions.operator_doubleArrow(_createRequirement, _function_2); _requirements.add(_doubleArrow); diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.CpsMdeOptimiserMain.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.CpsMdeOptimiserMain.xtendbin index 9d288343..c7d29222 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.CpsMdeOptimiserMain.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.CpsMdeOptimiserMain.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.ExcludedOptimisationInterpreter.xtendbin b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.ExcludedOptimisationInterpreter.xtendbin index 46cce8d1..40ce34e3 100644 Binary files a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.ExcludedOptimisationInterpreter.xtendbin and b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/.ExcludedOptimisationInterpreter.xtendbin differ diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/CpsMdeOptimiserMain.java b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/CpsMdeOptimiserMain.java index 288505a1..7a2a7e99 100644 --- a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/CpsMdeOptimiserMain.java +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/xtend-gen/hu/bme/mit/inf/dslreasoner/domains/cps/mdeo/CpsMdeOptimiserMain.java @@ -5,13 +5,20 @@ import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage; import hu.bme.mit.inf.dslreasoner.domains.cps.CyberPhysicalSystem; import hu.bme.mit.inf.dslreasoner.domains.cps.generator.CpsGenerator; import hu.bme.mit.inf.dslreasoner.domains.cps.mdeo.ExcludedRun; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileReader; +import java.io.FileWriter; +import java.util.Collections; import java.util.Map; +import java.util.Set; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.Pair; import uk.ac.kcl.inf.mdeoptimiser.languages.MoptStandaloneSetup; @SuppressWarnings("all") @@ -32,15 +39,47 @@ public class CpsMdeOptimiserMain { XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl(); _extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, _xMIResourceFactoryImpl); EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE); - final CpsGenerator generator = new CpsGenerator(1, 4, 2); + final CpsGenerator generator = new CpsGenerator(1, 4, 1); final CyberPhysicalSystem problem = generator.generateCpsProblem(); Resource _eResource = problem.eResource(); _eResource.setURI(URI.createFileURI(CpsMdeOptimiserMain.PROBLEM_PATH)); problem.eResource().save(CollectionLiterals.emptyMap()); + Pair _mappedTo = Pair.of("cps.ecore", CpsPackage.eNS_URI); + CpsMdeOptimiserMain.fixupHenshinModel("model/cps.henshin", "model/cps_fixup.henshin", Collections.unmodifiableMap(CollectionLiterals.newHashMap(_mappedTo))); final Injector injector = new MoptStandaloneSetup().createInjectorAndDoEMFRegistration(); injector.getInstance(ExcludedRun.class).run(CpsMdeOptimiserMain.PROJECT_PATH, CpsMdeOptimiserMain.MOPT_PATH); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } + + private static void fixupHenshinModel(final String originalPath, final String outputPath, final Map remapMap) { + try { + FileReader _fileReader = new FileReader(originalPath); + final BufferedReader reader = new BufferedReader(_fileReader); + try { + FileWriter _fileWriter = new FileWriter(outputPath); + final BufferedWriter writer = new BufferedWriter(_fileWriter); + try { + String line = null; + while (((line = reader.readLine()) != null)) { + { + Set> _entrySet = remapMap.entrySet(); + for (final Map.Entry entry : _entrySet) { + line = line.replace(entry.getKey(), entry.getValue()); + } + writer.write(line); + writer.write("\n"); + } + } + } finally { + writer.close(); + } + } finally { + reader.close(); + } + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } } -- cgit v1.2.3-54-g00ecf