Author: jcouteau Date: 2009-03-31 09:33:54 +0000 (Tue, 31 Mar 2009) New Revision: 92 Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java Log: Fixed bug on cardinality. Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-27 15:04:56 UTC (rev 91) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-31 09:33:54 UTC (rev 92) @@ -98,35 +98,29 @@ Scenario experimentScenario = new Scenario(); for (int j = 0; j < factorNumber; j++) { Factor<? extends Serializable> factor = factors.get(j); - if (factors.get(j).getDomain() instanceof ContinuousDomain) { + if (factor.getDomain() instanceof ContinuousDomain) { Double max = ((ContinuousDomain<Double>) factor.getDomain()) .getMaxBound(); Double min = ((ContinuousDomain<Double>) factor.getDomain()) .getMinBound(); - int card = ((ContinuousDomain<? extends Serializable>) factors - .get(j).getDomain()).getCardinality(); + int card = ((ContinuousDomain<? extends Serializable>) factor.getDomain()).getCardinality(); result = (int) Math.floor(rest / card); rest = rest - (card * result); - Double value = min + ((max - min) / card * rest); - if ((factors.get(j).getDomain() instanceof MatrixContinuousDomain) - || (factors.get(j).getDomain() instanceof EquationContinuousDomain)) { + Double value = min + ((max - min) / (card-1) * rest); + if ((factor.getDomain() instanceof MatrixContinuousDomain) + || (factor.getDomain() instanceof EquationContinuousDomain)) { factor.setValueForIdentifier(value.toString()); } else { factor.setValueForIdentifier(value); } } - if (factors.get(j).getDomain() instanceof DiscreteDomain) { - int card = ((DiscreteDomain<? extends Serializable>) factors - .get(j).getDomain()).getValues().size(); + if (factor.getDomain() instanceof DiscreteDomain) { + int card = ((DiscreteDomain<? extends Serializable>) factor.getDomain()).getValues().size(); result = (int) Math.floor(rest / card); rest = rest - (card * result); factor.setValueForIdentifier(rest); } - - if (factor.getDomain() instanceof ContinuousDomain) { - - } rest = result; experimentScenario.addFactor(factor); } @@ -134,6 +128,8 @@ } thisExperiment.setScenarios(thisExperimentScenarios); + + thisExperimentScenarios=thisExperiment.getScenarios(); /* * Call R to save the data for result analysis @@ -144,22 +140,66 @@ try { //Create the factors vectors for (int j = 0; j < factorNumber; j++) { - String vector = "factor" + j + "<-c("; - for (int i = 0; i < scenariosNumber; i++) { - if (i < (scenariosNumber - 1)) { - vector = vector - + thisExperimentScenarios.get(i).getFactors() - .get(j).getValue() + ","; - } else { - vector = vector - + thisExperimentScenarios.get(i).getFactors() - .get(j).getValue(); + Factor<? extends Serializable> factor = thisExperimentScenarios + .get(0).getFactors().get(j); + if (factor + .getDomain() instanceof EquationContinuousDomain) { + + String vector = "factor" + j + "<-c("; + for (int i = 0; i < scenariosNumber; i++) { + if (i < (scenariosNumber - 1)) { + vector = vector + + ((EquationContinuousDomain<?>)thisExperimentScenarios + .get(i).getFactors().get(j).getDomain()).getValue() + + ","; + } else { + vector = vector + + ((EquationContinuousDomain<?>)thisExperimentScenarios + .get(i).getFactors().get(j).getDomain()).getValue(); + } + } + vector = vector + ")"; + engine.voidEval(vector); + log.info("Message sent to R : " + vector); + } else if (factor.getDomain() instanceof MatrixContinuousDomain) { + String vector = "factor" + j + "<-c("; + for (int i = 0; i < scenariosNumber; i++) { + if (i < (scenariosNumber - 1)) { + vector = vector + + ((MatrixContinuousDomain<?>) thisExperimentScenarios + .get(i).getFactors().get(j) + .getDomain()).getValue() + ","; + } else { + vector = vector + + ((MatrixContinuousDomain<?>) thisExperimentScenarios + .get(i).getFactors().get(j) + .getDomain()).getValue(); + } + } + vector = vector + ")"; + engine.voidEval(vector); + log.info("Message sent to R : " + vector); + } else { + String vector = "factor" + j + "<-c("; + for (int i = 0; i < scenariosNumber; i++) { + if (i < (scenariosNumber - 1)) { + vector = vector + + thisExperimentScenarios.get(i) + .getFactors().get(j).getValue() + + ","; + } else { + vector = vector + + thisExperimentScenarios.get(i) + .getFactors().get(j).getValue(); + } + + } + vector = vector + ")"; + engine.voidEval(vector); + log.info("Message sent to R : " + vector); } - vector = vector + ")"; - engine.voidEval(vector); - log.info("Message sent to R : " + vector); }