Browse Source

added flag for handling algebraic loops

Claudio Gomes 5 years ago
parent
commit
2233672718

+ 1 - 5
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.
 		

+ 2 - 2
HintCOEngine/src/ua/ansymo/hintco/Main.xtend

@@ -96,9 +96,9 @@ class Main implements IApplication {
 		
 		if (cmd.hasOption(nVarsOpt.getOpt())){
 			val nVars = Integer.parseInt(cmd.getOptionValue(nVarsOpt.getOpt()))
-			generator.generateVariants(src, nVars)
+			generator.generateVariants(src, nVars, false)
 		} else {
-			generator.generateVariants(src)
+			generator.generateVariants(src, Integer.MAX_VALUE, false)
 		}
 		
 		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()
 		
 	}