6 Commits 68f9ed1074 ... fbd9fee26f

Author SHA1 Message Date
  Claudio Gomes fbd9fee26f added -loopOpt flag, to determine whether we want hintco to launch algebraic loop optimizer or not 4 years ago
  Claudio Gomes 2233672718 added flag for handling algebraic loops 4 years ago
  Claudio Gomes b5b2b4dc47 corrected class path to reflect what we have in git ignore 4 years ago
  Claudio Gomes a1dfa1f988 removed bin from git ignore. Xtext needs to be properly configured 4 years ago
  Claudio Gomes ecb0df0f14 typo 4 years ago
  Claudio Gomes d4919b2f17 typo 4 years ago

+ 0 - 1
.gitignore

@@ -1,7 +1,6 @@
 # ---> Java
 *.class
 
-/HintCOEngine/bin/
 /HintCOEngine/output/
 /HintCOEngine/results-gen/
 /HintCOEngine/xtend-gen/

+ 1 - 1
HintCOEngine/.classpath

@@ -20,5 +20,5 @@
 	<classpathentry kind="lib" path="lib/slf4j-simple.jar" sourcepath="lib/slf4j-simple-sources.jar"/>
 	<classpathentry kind="lib" path="lib/commons-compress-1.18.jar" sourcepath="lib/commons-compress-1.18-sources.jar"/>
 	<classpathentry kind="lib" path="lib/commons-io-2.6.jar" sourcepath="lib/commons-io-2.6-sources.jar"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="output" path="output"/>
 </classpath>

+ 1 - 1
HintCOEngine/src/ua/ansymo/hintco/AdaptiveCosimRunner.xtend

@@ -34,7 +34,7 @@ class AdaptiveCosimRunner implements ICosimRunner, Closeable {
 		val nodes = scenarioNodesMap.get(rootScenario)
 		
 		if (nodes.filter(InputPortInstance).filter[it.isInput].exists[it.adaptation instanceof RollbackInterpolationAdaptation]){
-			logger.debug("AdaptiveCosimRunner using string coupling.")
+			logger.debug("AdaptiveCosimRunner using strong coupling.")
 			this.internalRunner = new StrongCouplingRunner(outProcessor, fmuLoader, hardReset)
 		} else {
 			logger.debug("AdaptiveCosimRunner using single runner.")

+ 2 - 6
HintCOEngine/src/ua/ansymo/hintco/CandidatesGenerator.xtend

@@ -23,7 +23,7 @@ class CandidatesGenerator {
 		processor = p
 	}
 	
-	def generateVariants(HintConfiguration cs, int maxVariants){
+	def generateVariants(HintConfiguration cs, int maxVariants, boolean optimizeAlgebraicLoops){
 		 /*
 		  * Recursively goes through every path on the variant diagram and creates the necessary precedence constraints, cleaning up after the function call.
 		 Optimizations: check if there is a cycle every time there are a new edge is created. Then abort that function call, as any children of the variant tree will not be valid. Possible paper that addresses this: https://dl.acm.org/citation.cfm?id=1033207
@@ -39,10 +39,6 @@ class CandidatesGenerator {
 		return genVariants
 	}
 	
-	def generateVariants(HintConfiguration cs){
-		generateVariants(cs, Integer.MAX_VALUE)
-	}
-	
 	def processAdaptations(HintConfiguration cs){
 		// Completes adaptations such as the power bond adaptation.
 		
@@ -119,7 +115,7 @@ class CandidatesGenerator {
 		println()
 	}
 	
-	// TODO: Break this method into multiple methods: generation of contratins, propagation of constraints, etc...
+	// TODO: Break this method into multiple methods: generation of constraints, propagation of constraints, etc...
 	// Leave the recursive calls here!
 	def private int recGenerateVariants(Deque<VariantDiagram> ns, 
 										HintConfiguration cs, 

+ 5 - 6
HintCOEngine/src/ua/ansymo/hintco/Main.xtend

@@ -27,6 +27,7 @@ class Main implements IApplication {
 		val scenarioOpt = Option.builder("s").longOpt("scenario").desc("Path to scenario file").hasArg().numberOfArgs(1).argName("path").build();
 		val contractOpt = Option.builder("c").longOpt("contract").desc("Path to contracts file").hasArg().numberOfArgs(1).argName("path").build();
 		val genDefAdaptations = Option.builder("d").longOpt("default").desc("Generate default adaptations").build();
+		val optLoops = Option.builder("loopOpt").desc("Optimize algebraic loops").build();
 		val genTrace = Option.builder("t").longOpt("trace").desc("Generate debug trace.").hasArg().numberOfArgs(1).build();
 		val outDirOpt = Option.builder("o").longOpt("output").desc("Path to output directory").hasArg().numberOfArgs(1).argName("path").build();
 		val nVarsOpt = Option.builder("n").longOpt("variants").desc("Number of variants to run").hasArg().numberOfArgs(1).argName("int").build();
@@ -36,6 +37,7 @@ class Main implements IApplication {
 		options.addOption(scenarioOpt)
 		options.addOption(contractOpt)
 		options.addOption(genDefAdaptations)
+		options.addOption(optLoops)
 		options.addOption(genTrace)
 		options.addOption(outDirOpt)
 		options.addOption(nVarsOpt)
@@ -94,12 +96,9 @@ class Main implements IApplication {
 		generator.createVariantTree(src)
 		generator.processAdaptations(src)
 		
-		if (cmd.hasOption(nVarsOpt.getOpt())){
-			val nVars = Integer.parseInt(cmd.getOptionValue(nVarsOpt.getOpt()))
-			generator.generateVariants(src, nVars)
-		} else {
-			generator.generateVariants(src)
-		}
+		val nVars = Integer.parseInt(cmd.getOptionValue(nVarsOpt.opt, Integer.MAX_VALUE.toString))
+		
+		generator.generateVariants(src, nVars, cmd.hasOption(optLoops.opt))
 		
 		runner.close()
 	}

+ 3 - 3
HintCOEngine/test/ua/ansymo/hintco/test/AdaptedFMUTest.xtend

@@ -81,7 +81,7 @@ class AdaptedFMUTest {
 		val runner = new SingleCosimRunner(outputCheck, mockLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		runner.close()
 		assertEquals(110, numInnerSteps.size)
 	}
@@ -128,7 +128,7 @@ class AdaptedFMUTest {
 		val runner = new SingleCosimRunner(outputCheck, mockLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		runner.close()
 		assertEquals(11, numInnerSteps.size)
 	}
@@ -177,7 +177,7 @@ class AdaptedFMUTest {
 		val runner = new SingleCosimRunner(outputCheck, mockLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		runner.close()
 		assertEquals(110, numInnerSteps.size)
 	}

+ 2 - 2
HintCOEngine/test/ua/ansymo/hintco/test/CandidateSpaceGeneratorTest.xtend

@@ -72,7 +72,7 @@ class CandidateSpaceGeneratorTest {
 		val runner = new SingleCosimRunner(new OutputProcessor(resultsDirPath), new FmuLoader)
 		val variantGen = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		variantGen.createVariantTree(candidates)
-		variantGen.generateVariants(candidates, 5)
+		variantGen.generateVariants(candidates, 5, false)
 		runner.close()
 	}
 	
@@ -103,7 +103,7 @@ class CandidateSpaceGeneratorTest {
 		val runner = new SingleCosimRunner(mockOutputP, new FmuLoader)
 		val variantGen = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		variantGen.createVariantTree(candidates)
-		variantGen.generateVariants(candidates, 1)
+		variantGen.generateVariants(candidates, 1, false)
 		runner.close()
 	}
 }

+ 14 - 14
HintCOEngine/test/ua/ansymo/hintco/test/CandidatesGeneratorTest.xtend

@@ -33,7 +33,7 @@ class CandidatesGeneratorTest {
 				assertTrue(comesBefore("F_OUT@expseu_", "F_INPUT@expseu_", order, cs))
 			])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	
@@ -51,7 +51,7 @@ class CandidatesGeneratorTest {
 				assertTrue(comesBefore("F_OUT@expseu_", "F_INPUT@expseu_", order, cs))
 			])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	@Test
@@ -77,7 +77,7 @@ class CandidatesGeneratorTest {
 				
 			])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	@Test
@@ -123,7 +123,7 @@ class CandidatesGeneratorTest {
 			assertEquals(constraints.size, ns.size)
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(4, variants.size)
 	}
 	
@@ -143,7 +143,7 @@ class CandidatesGeneratorTest {
 			assertEquals(constraints.size, ns.size)
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(4, variants.size)
 	}
 	
@@ -168,7 +168,7 @@ class CandidatesGeneratorTest {
 			
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(1, variants.size)
 	}
 	
@@ -192,7 +192,7 @@ class CandidatesGeneratorTest {
 			
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(1, variants.size)
 	}
 	
@@ -221,7 +221,7 @@ class CandidatesGeneratorTest {
 			assertTrue(comesBefore("Bip", "Bop", order, cs))
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(1, variants.size)
 	}
 	
@@ -239,7 +239,7 @@ class CandidatesGeneratorTest {
 				variants.add(vId)
 			])
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 2)
+		generator.generateVariants(src, 2, false)
 		assertEquals(2, variants.size)
 	}
 	
@@ -259,7 +259,7 @@ class CandidatesGeneratorTest {
 			assertTrue(precedes(cs, "DLoopController_FixedEuler_1Em6", "VEL_FB@expseu_"))
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	@Test
@@ -278,7 +278,7 @@ class CandidatesGeneratorTest {
 			assertTrue(precedes(cs, "VEL_FB@expseu_", "DLoopController_FixedEuler_1Em6"))
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	@Test
@@ -300,7 +300,7 @@ class CandidatesGeneratorTest {
 			loader.storeCandidates("instances/generated/generate_variants_infeasible_interpolation_test.xmi", src)
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 	}
 	
 	@Test
@@ -321,7 +321,7 @@ class CandidatesGeneratorTest {
 			])
 		])
 		generator.createVariantTree(src)
-		generator.generateVariants(src)
+		generator.generateVariants(src, Integer.MAX_VALUE, false)
 		assertEquals(1, variants.size)
 	}
 	
@@ -344,7 +344,7 @@ class CandidatesGeneratorTest {
 		assertTrue(pIn.valueFrom == (sensor.adaptation as PowerBondAdaptation).POut)
 		
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 	}
 	
 	

+ 8 - 8
HintCOEngine/test/ua/ansymo/hintco/test/CosimRunnerTest.xtend

@@ -160,7 +160,7 @@ class CosimRunnerTest {
 		}, new FmuLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 	}
 	
@@ -185,7 +185,7 @@ class CosimRunnerTest {
 //		val runner = new CosimRunner(new OutputProcessor(resultsDirPath), new FmuLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 	}
 	
@@ -210,7 +210,7 @@ class CosimRunnerTest {
 //		val runner = new CosimRunner(new OutputProcessor(resultsDirPath), new FmuLoader)
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 	}
 	
@@ -234,7 +234,7 @@ class CosimRunnerTest {
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		val src = loader.loadCandidates("instances/case_study_double_loop_approx.xmi")
 		generator.createVariantTree(src)
-		val numVariants = generator.generateVariants(src, 1)
+		val numVariants = generator.generateVariants(src, 1, false)
 		runner.close()
 		assertEquals(1, numVariants)
 	}
@@ -252,7 +252,7 @@ class CosimRunnerTest {
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.processAdaptations(src)
 		generator.createVariantTree(src)
-		val numVariants = generator.generateVariants(src, 1)
+		val numVariants = generator.generateVariants(src, 1, false)
 		runner.close()
 		assertEquals(1, numVariants)
 	}
@@ -270,7 +270,7 @@ class CosimRunnerTest {
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.processAdaptations(src)
 		generator.createVariantTree(src)
-		val numVariants = generator.generateVariants(src, 1)
+		val numVariants = generator.generateVariants(src, 1, false)
 		runner.close()
 		assertEquals(1, numVariants)
 	}
@@ -287,7 +287,7 @@ class CosimRunnerTest {
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.processAdaptations(src)
 		generator.createVariantTree(src)
-		val numVariants = generator.generateVariants(src, 1)
+		val numVariants = generator.generateVariants(src, 1, false)
 		runner.close()
 		assertEquals(1, numVariants)
 	}
@@ -301,7 +301,7 @@ class CosimRunnerTest {
 		val generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		val src = loader.loadCandidates("instances/duplicate_unit_test.xmi")
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 		val resultsWt1 = new File(resultsDirPath + "/0_1/wt1.csv")
 		val resultsWt2 = new File(resultsDirPath + "/0_1/wt2.csv")

+ 4 - 4
HintCOEngine/test/ua/ansymo/hintco/test/WvFormCosimRunnerTest.xtend

@@ -22,14 +22,14 @@ class WvFormCosimRunnerTest {
 		val runner = new AdaptiveCosimRunner(new OutputProcessor("results-gen/strongCoupMSDTest/Strong"), new FmuLoader, false)
 		var generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 		
 		val normal_src = new ModelStorage().loadCandidates("instances/waveform_msd_normal.hintco")
 		val normal_runner = new AdaptiveCosimRunner(new OutputProcessor("results-gen/strongCoupMSDTest/Normal"), new FmuLoader, false)
 		var normal_generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(normal_runner))
 		normal_generator.createVariantTree(normal_src)
-		normal_generator.generateVariants(normal_src, 1)
+		normal_generator.generateVariants(normal_src, 1, false)
 		normal_runner.close()
 	}
 	
@@ -42,7 +42,7 @@ class WvFormCosimRunnerTest {
 		val runner = new SingleCosimRunner(new OutputProcessor("results-gen/elevator"), new FmuLoader)
 		var generator = new CandidatesGenerator(new ConstraintChecker,new VariantValidator, new VariantProcessor(runner))
 		generator.createVariantTree(src)
-		generator.generateVariants(src, 1)
+		generator.generateVariants(src, 1, false)
 		runner.close()
 		
 //		System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug")
@@ -52,7 +52,7 @@ class WvFormCosimRunnerTest {
 		val strong_runner = new StrongCouplingRunner(new OutputProcessor("results-gen/elevatorStrong"), new FmuLoader, true)
 		var strong_generator = new CandidatesGenerator(new ConstraintChecker, new VariantValidator, new VariantProcessor(strong_runner))
 		strong_generator.createVariantTree(strong_src)
-		strong_generator.generateVariants(strong_src, 1)
+		strong_generator.generateVariants(strong_src, 1, false)
 		strong_runner.close()
 		
 	}

+ 1 - 0
HintConfiguration/.gitignore

@@ -3,3 +3,4 @@
 /xtend-gen-test/
 
 .metadata/
+/bin/