Author: jcouteau Date: 2009-03-18 13:53:43 +0000 (Wed, 18 Mar 2009) New Revision: 80 Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java trunk/sensitivity/SensitivityCalculatorRMorris.java Log: Fixing Expand Grid + manage continuous factors Adding log on Morris method. Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-18 09:16:37 UTC (rev 79) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-18 13:53:43 UTC (rev 80) @@ -53,15 +53,15 @@ .getLog(SensitivityCalculatorJavaExpandGrid.class); /** - * Retourne vrai si le calculateur sait gerer la cardinalité - * des facteurs continue. + * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs + * continue. * * @return <tt>true</tt> s'il sait la gerer */ public boolean canManageCardinality() { return false; } - + public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) throws SensitivityException { @@ -71,13 +71,21 @@ for (int i = 0; i < factorNumber; i++) { if (factors.get(i).getDomain() instanceof ContinuousDomain) { - k = k - * ((ContinuousDomain<? extends Serializable>) factors - .get(i).getDomain()).getCardinality(); + if (((ContinuousDomain<? extends Serializable>) factors.get(i) + .getDomain()).getCardinality() != 0) { + k = k + * ((ContinuousDomain<? extends Serializable>) factors + .get(i).getDomain()).getCardinality(); + } else + return null; } else if (factors.get(i).getDomain() instanceof DiscreteDomain) { - k = k - * ((DiscreteDomain<? extends Serializable>) factors - .get(i).getDomain()).getValues().size(); + if (((DiscreteDomain<? extends Serializable>) factors.get(i) + .getDomain()).getValues().size() != 0) { + k = k + * ((DiscreteDomain<? extends Serializable>) factors + .get(i).getDomain()).getValues().size(); + } else + return null; } } @@ -86,46 +94,39 @@ for (int i = 0; i < k; i++) { int result = 0; //used for the euclidian division - int rest = k; //used for the euclidian division + int rest = i; //used for the euclidian division Scenario experimentScenario = new Scenario(); - for (int j = (factorNumber - 1); j >= 0; j--) { + for (int j = 0; j < factorNumber; j++) { Factor<? extends Serializable> factor = factors.get(j); if (factors.get(j).getDomain() instanceof ContinuousDomain) { - result = (int) Math - .floor(rest - / ((ContinuousDomain<? extends Serializable>) factors - .get(j).getDomain()) - .getCardinality()); - rest = rest - - ((ContinuousDomain<? extends Serializable>) factors - .get(j).getDomain()).getCardinality() - * result; + Double max = ((ContinuousDomain<Double>) factor.getDomain()) + .getMaxBound(); + Double min = ((ContinuousDomain<Double>) factor.getDomain()) + .getMinBound(); + int card = ((ContinuousDomain<? extends Serializable>) factors + .get(j).getDomain()).getCardinality(); + result = (int) Math.floor(rest / card); + rest = rest - (card * result); + + Double value = min + ((max - min) / card * rest); + factor.setValueForIdentifier(value); } if (factors.get(j).getDomain() instanceof DiscreteDomain) { - result = (int) Math.floor(rest - / ((DiscreteDomain<? extends Serializable>) factors - .get(j).getDomain()).getValues().size()); - rest = rest - - ((DiscreteDomain<? extends Serializable>) factors - .get(j).getDomain()).getValues().size() - * result; + int card = ((DiscreteDomain<? extends Serializable>) factors + .get(j).getDomain()).getValues().size(); + result = (int) Math.floor(rest / card); + rest = rest - (card * result); + factor.setValueForIdentifier(rest); } - /*if (factor.getDomain() instanceof ContinuousDomain) { - factor - .setValueForIdentifier((((ContinuousDomain<Double>) factor - .getDomain()).getMaxBound() - ((ContinuousDomain<Double>) factor - .getDomain()).getMinBound()) - / rest - + ((ContinuousDomain<Double>) factor - .getDomain()).getMinBound()); - }*/ + if (factor.getDomain() instanceof ContinuousDomain) { - factor.setValueForIdentifier(rest); + } + rest = result; experimentScenario.addFactor(factor); } thisExperimentScenarios.add(experimentScenario); - + } thisExperiment.setScenarios(thisExperimentScenarios); @@ -221,26 +222,23 @@ .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")"); //Get back the factors number - int factorNumber = ((Double)engine.eval("length(factors)-1")).intValue(); + int factorNumber = ((Double) engine.eval("length(factors)-1")) + .intValue(); //factorNumber=factorNumber-1; //Create the results vectors String result = "result<-c("; for (int l = 0; l < simulationStorages.size(); l++) { - File importFile = new File( - simulationStorages.get(l).getDirectory().toString() - + File.separator - + SimulationStorage.RESULT_EXPORT_DIRECTORY, - simulationStorages - .get(l) - .getParameter() - .getSensitivityExport() - .get(k).getExportFilename() - + simulationStorages - .get(l) - .getParameter() - .getSensitivityExport() - .get(k).getExtensionFilename()); + File importFile = new File(simulationStorages.get(l) + .getDirectory().toString() + + File.separator + + SimulationStorage.RESULT_EXPORT_DIRECTORY, + simulationStorages.get(l).getParameter() + .getSensitivityExport().get(k) + .getExportFilename() + + simulationStorages.get(l).getParameter() + .getSensitivityExport().get(k) + .getExtensionFilename()); String simulResult = FileUtil.readAsString(importFile); double simulationResult = Double.valueOf(simulResult); if (l < simulationStorages.size() - 1) { @@ -283,10 +281,10 @@ + factorNumber + ",2]"); engine .voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:" - + factorNumber + "]"); + + factorNumber + "]"); log .info("Message sent to R : names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:" - + factorNumber + "]"); + + factorNumber + "]"); engine.voidEval("IndSensibilite<-SoS/sum(SoS)"); log.info("Message sent to R : IndSensibilite<-SoS/sum(SoS)"); @@ -315,21 +313,23 @@ //Save the results with the scenarios. engine.voidEval("write.csv(dataforaov,\"" + simulationStorages.get(0).getParameter() - .getSensitivityExport().get(k).getExportFilename() - + "_Results.csv\")"); + .getSensitivityExport().get(k) + .getExportFilename() + "_Results.csv\")"); log.info("Message sent to R : write.csv(dataforaov,\"" + simulationStorages.get(0).getParameter() - .getSensitivityExport().get(k).getExportFilename() - + "_Results.csv\")"); + .getSensitivityExport().get(k) + .getExportFilename() + "_Results.csv\")"); //Save the sensitivity indices engine.voidEval("write.csv(exportsensitivity,\"" + simulationStorages.get(0).getParameter() - .getSensitivityExport().get(k).getExportFilename() + .getSensitivityExport().get(k) + .getExportFilename() + "_SensitivityIndices.csv\")"); log.info("Message sent to R : write.csv(exportsensitivity,\"" + simulationStorages.get(0).getParameter() - .getSensitivityExport().get(k).getExportFilename() + .getSensitivityExport().get(k) + .getExportFilename() + "_SensitivityIndices.csv\")"); //FIXME export through java to enable export when using Rserve (when distant Rserve). engine.terminate(); Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-18 09:16:37 UTC (rev 79) +++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-18 13:53:43 UTC (rev 80) @@ -183,19 +183,25 @@ // Load sensitivity package into R (if package already loaded, // nothing happens. engine.voidEval("library(sensitivity)"); + log.info("Message sent to R"+"library(sensitivity)"); // Run sensitivity analysis engine.voidEval(rInstruction); + log.info("Message sent to R"+rInstruction); // Set output directory engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() + "\")"); + log.info("Message sent to R"+"setwd(\"" + outputdirectory.getAbsolutePath() + + "\")"); // Export the morris object for the second run in a .morris file engine.voidEval("dput(a,file=\".morris\")"); + log.info("Message sent to R"+"dput(a,file=\".morris\")"); // Get back experiment plan dataframe = (double[]) engine.eval("a$X"); + log.info("Message sent to R"+"a$X"); if (log.isDebugEnabled()) { log.debug("rInstruction = " + rInstruction);
participants (1)
-
jcouteau@users.labs.libre-entreprise.org