r3838 - branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity
Author: echatellier Date: 2013-11-21 22:15:38 +0100 (Thu, 21 Nov 2013) New Revision: 3838 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3838 Log: Refactor test to allow better factor composition Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java =================================================================== --- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-18 09:38:27 UTC (rev 3837) +++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisTest.java 2013-11-21 21:15:38 UTC (rev 3838) @@ -78,55 +78,45 @@ simulationsDir = FileUtil.getTempDir("simulations"); } - /** - * Build a test design plan with continuous factors unsing uniform distribution. - * - * @return test design plan - */ - protected DesignPlan getPlanUniformDistrib() { - + protected DesignPlan getDesignPlan(Factor... factors) { DesignPlan result = new DesignPlan(); + for (Factor factor : factors) { + result.addFactor(factor); + } + return result; + } + protected FactorGroup getFactorGroup(String name, boolean continuous, Factor... factors) { + FactorGroup result = new FactorGroup(name, continuous); + for (Factor factor : factors) { + result.addFactor(factor); + } + return result; + } + + protected Factor getContinuousDoubleUniformMMFactor() { // factor 1, min/max on int - Factor factor1 = new Factor("testint"); + Factor factor1 = new Factor("test unifmm"); ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); domain1.addDistributionParam("min", 0.0); domain1.addDistributionParam("max", 2.0); factor1.setDomain(domain1); factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor1); + return factor1; + } + protected Factor getContinuousDoubleUniformPcFactor() { // factor 1, min/max on int - Factor factor2 = new Factor("testint 2"); - ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM); - domain2.addDistributionParam("min", 40.0); - domain2.addDistributionParam("max", 50.0); + Factor factor2 = new Factor("test unifpc"); + ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC); + domain2.addDistributionParam("reference", 40.0); + domain2.addDistributionParam("coefficient", 0.05); factor2.setDomain(domain2); factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor2); - - return result; + return factor2; } - - /** - * Build a test design plan with continuous factors uning uniform distribution - * and matrix. - * - * @return test design plan - */ - protected DesignPlan getPlanUniformDistribMatrix() { - - DesignPlan result = new DesignPlan(); - // factor 1, min/max on int - Factor factor1 = new Factor("testint"); - ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM); - domain1.addDistributionParam("min", 0.0); - domain1.addDistributionParam("max", 2.0); - factor1.setDomain(domain1); - factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor1); - + protected Factor getContinuousMatrixUniformMMFactor() { // matrix 1 MatrixND matrix1 = MatrixFactory.getInstance().create("test1", new int[] { 3, 2 }, new String[] { "col1", "col2" }); @@ -138,112 +128,47 @@ matrix1.setValue(new int[] { 2, 1 }, -1); // factor - Factor factor2 = new Factor("testmatrix"); + Factor factor2 = new Factor("tes tmatrix unifpc"); ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC); domain2.addDistributionParam("reference", matrix1); domain2.addDistributionParam("coefficient", 0.1); factor2.setDomain(domain2); factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - result.addFactor(factor2); - - return result; + return factor2; } - - /** - * Build a test design plan with continuous factors uning uniform distribution - * and matrix. - * - * @return test design plan - */ - protected DesignPlan getPlanNormCauchyDistribMatrix() { - - DesignPlan result = new DesignPlan(); - + + protected Factor getContinuousDoubleCauchyFactor() { // factor 1, min/max on int - Factor factor1 = new Factor("testint"); - ContinuousDomain domain1 = new ContinuousDomain(Distribution.DCHISQ); - domain1.addDistributionParam("df", 1.0); - domain1.addDistributionParam("ncp", 3.0); - factor1.setDomain(domain1); - factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor1); - - // matrix 1 - MatrixND matrix1 = MatrixFactory.getInstance().create("test1", - new int[] { 3, 2 }, new String[] { "col1", "col2" }); - matrix1.setValue(new int[] { 0, 0 }, 1); - matrix1.setValue(new int[] { 0, 1 }, -14); - matrix1.setValue(new int[] { 1, 0 }, 21); - matrix1.setValue(new int[] { 1, 1 }, 2); - matrix1.setValue(new int[] { 2, 0 }, 3); - matrix1.setValue(new int[] { 2, 1 }, -1); - - // factor - Factor factor2 = new Factor("testmatrix"); - ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM); - domain2.addDistributionParam("min", matrix1); - domain2.addDistributionParam("max", matrix1); - factor2.setDomain(domain2); - factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim"); - result.addFactor(factor2); - - return result; - } - - /** - * Build a test design plan with only continuous factors. - * - * @return test design plan - */ - protected DesignPlan getPlanNormCauchyDistrib() { - - DesignPlan result = new DesignPlan(); - - // factor 1, min/max on int - Factor factor1 = new Factor("lnorm"); - ContinuousDomain domain1 = new ContinuousDomain(Distribution.DLNORM); - domain1.addDistributionParam("meanlog", 0.0); - domain1.addDistributionParam("sdlog", 1.0); - factor1.setDomain(domain1); - factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor1); - - // factor 1, min/max on int - Factor factor2 = new Factor("cauchy"); + Factor factor2 = new Factor("test cauchy"); ContinuousDomain domain2 = new ContinuousDomain(Distribution.DCAUCHY); domain2.addDistributionParam("location", 0.0); domain2.addDistributionParam("scale", 1.0); factor2.setDomain(domain2); factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor2); - - return result; + return factor2; } - - protected DesignPlan getPlanDiscreteInt() { - DesignPlan result = new DesignPlan(); - + protected Factor getContinuousDoubleChisqFactor() { // factor 1, min/max on int - Factor factor1 = new Factor("lnorm"); - DiscreteDomain domain1 = new DiscreteDomain(); - Map<Object> obj = new Hash - domain1.setValues(values); - domain1.addDistributionParam("sdlog", 1.0); + Factor factor1 = new Factor("test dchisq"); + ContinuousDomain domain1 = new ContinuousDomain(Distribution.DCHISQ); + domain1.addDistributionParam("df", 1.0); + domain1.addDistributionParam("ncp", 3.0); factor1.setDomain(domain1); factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor1); + return factor1; + } + protected Factor getDiscreteIntFactor() { // factor 1, min/max on int - Factor factor2 = new Factor("cauchy"); - ContinuousDomain domain2 = new ContinuousDomain(Distribution.DCAUCHY); - domain2.addDistributionParam("location", 0.0); - domain2.addDistributionParam("scale", 1.0); - factor2.setDomain(domain2); - factor2.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); - result.addFactor(factor2); - - return result; + Factor factor1 = new Factor("test int"); + DiscreteDomain domain1 = new DiscreteDomain(); + domain1.getValues().put("1", 42.0); + domain1.getValues().put("2", 43.0); + domain1.getValues().put("3", 44.0); + factor1.setDomain(domain1); + factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name"); + return factor1; } /** @@ -263,30 +188,21 @@ * @throws SensitivityException */ @Test - public void testMorrisUniform() throws IsisFishException, SensitivityException { + public void testMorris() throws IsisFishException, SensitivityException { SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("Morris script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + // uniform min/max + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); Assert.assertEquals(3, scenarii.getScenarios().size()); + + // uniform pc + designPlan = getDesignPlan(getContinuousDoubleUniformPcFactor(), getContinuousDoubleUniformPcFactor()); + scenarii = script.compute(designPlan, simulationsDir); + Assert.assertEquals(3, scenarii.getScenarios().size()); } - - /** - * Test de génération des scenarios via la methode Morris. - * - * @throws IsisFishException - * @throws SensitivityException - */ - @Test(expected=SensitivityException.class) - public void testMorrisNorm() throws IsisFishException, SensitivityException { - SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Morris").getNewSensitivityAnalysisInstance(); - Assert.assertNotNull("Morris script not found in test data", script); - DesignPlan designPlan = getPlanNormCauchyDistrib(); - script.compute(designPlan, simulationsDir); - } - /** * Test de génération des scenarios via la methode DOptimal. * @@ -298,7 +214,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("DOptimal").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("DOptimal script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -314,7 +230,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Fast").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("Fast script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -330,7 +246,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("OptimumLHS").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("OptimumLHS script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -346,7 +262,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RandomLHS").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("RandomLHS script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -362,7 +278,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularExpandGrid").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("RegularExpandGrid script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -378,7 +294,7 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("RegularFractions").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("RegularFractions script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); } @@ -394,14 +310,14 @@ SensitivityAnalysis script = SensitivityAnalysisStorage.getSensitivityAnalysis("Sobol").getNewSensitivityAnalysisInstance(); Assert.assertNotNull("Sobol script not found in test data", script); - DesignPlan designPlan = getPlanUniformDistrib(); + // sobol avec uniform MM + DesignPlan designPlan = getDesignPlan(getContinuousDoubleUniformMMFactor(), getContinuousDoubleUniformMMFactor()); SensitivityScenarios scenarii = script.compute(designPlan, simulationsDir); - Assert.assertEquals(80, scenarii.getScenarios().size()); - designPlan = getPlanNormCauchyDistrib(); + // sobol avec cauchy/chisq + designPlan = getDesignPlan(getContinuousDoubleCauchyFactor(), getContinuousDoubleChisqFactor()); scenarii = script.compute(designPlan, simulationsDir); - Assert.assertEquals(80, scenarii.getScenarios().size()); }
participants (1)
-
echatellier@users.forge.codelutin.com