Isis-fish-data-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- 322 discussions
Author: jcouteau
Date: 2009-03-17 14:32:13 +0000 (Tue, 17 Mar 2009)
New Revision: 77
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
Log:
Working expand grid sensitivity calculator with full analysis.
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-16 16:50:28 UTC (rev 76)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-17 14:32:13 UTC (rev 77)
@@ -22,6 +22,8 @@
import java.io.Serializable;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.codelutin.j2r.REngine;
import org.codelutin.j2r.RProxy;
import org.codelutin.util.FileUtil;
@@ -47,6 +49,10 @@
public class SensitivityCalculatorJavaExpandGrid implements
SensitivityCalculator {
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory
+ .getLog(SensitivityCalculatorJavaExpandGrid.class);
+
/**
* Retourne vrai si le calculateur sait gerer la cardinalité
* des facteurs continue.
@@ -106,7 +112,7 @@
* result;
}
- if (factor.getDomain() instanceof ContinuousDomain) {
+ /*if (factor.getDomain() instanceof ContinuousDomain) {
factor
.setValueForIdentifier((((ContinuousDomain<Double>) factor
.getDomain()).getMaxBound() - ((ContinuousDomain<Double>) factor
@@ -114,14 +120,15 @@
/ rest
+ ((ContinuousDomain<Double>) factor
.getDomain()).getMinBound());
- }
+ }*/
factor.setValueForIdentifier(rest);
experimentScenario.addFactor(factor);
}
thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
+
}
+ thisExperiment.setScenarios(thisExperimentScenarios);
/*
* Call R to save the data for result analysis
@@ -147,6 +154,7 @@
}
vector = vector + ")";
engine.voidEval(vector);
+ log.info("Message sent to R : " + vector);
}
@@ -155,22 +163,29 @@
for (int j = 0; j < factorNumber; j++) {
if (j < factorNumber - 1) {
dataframe = dataframe + "factor" + j + "=factor(factor" + j
- + "))";
+ + "),";
} else {
dataframe = dataframe + "factor" + j + "=factor(factor" + j
- + "),";
+ + "))";
}
}
engine.voidEval(dataframe);
+ log.info("Message sent to R : " + dataframe);
// Set output directory
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
+ log.info("Message sent to R : " + "setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
// Export the data.frame object for the second run in a .expandgrid file
- engine.voidEval("dput(data,file=\".expandgrid\")");
+ engine.voidEval("write.csv(data,file=\".expandgrid.csv\")");
+ log
+ .info("Message sent to R : write.csv(data,file=\".expandgrid\")");
+ engine.terminate();
+
} catch (Exception e) {
e.printStackTrace();
// Error while processing
@@ -194,17 +209,29 @@
for (int k = 0; k < sensitivityNumber; k++) {
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+ log.info("Message sent to R : setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
+
//Get back the scenarios
- engine.voidEval("factors<-dget(\".expandgrid\")");
+ //engine.voidEval("factors<-read.csv(\".expandgrid.csv\",row.names=1,col.names=1)");
+ engine.voidEval("factors<-read.csv(\".expandgrid.csv\")");
+ log
+ .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")");
//Get back the factors number
- int factorNumber = (Integer) engine.eval("length(factors)");
+ 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(),
+ simulationStorages.get(l).getDirectory().toString()
+ + File.separator
+ + SimulationStorage.RESULT_EXPORT_DIRECTORY,
ExportStorage
.getExport(
simulationStorages
@@ -232,10 +259,12 @@
}
result = result + ")";
engine.voidEval(result);
+ log.info("Message sent to R : " + result);
//Create the dataforaov data.frame
String dataframe = "dataforaov<-data.frame(factors,result=result)";
engine.voidEval(dataframe);
+ log.info("Message sent to R : " + dataframe);
//Call aov()
String aovCall = "aovresult<-aov(result~";
@@ -247,6 +276,7 @@
}
}
engine.voidEval(aovCall);
+ log.info("Message sent to R : " + aovCall);
/*Export the results
*Export format is csv, data separated by ','
@@ -257,36 +287,62 @@
//Compute Sum of Squares and Sensitivity indices
engine.voidEval("SoS<-summary(aovresult)[[1]][1:"
+ factorNumber + ",2]");
+ log.info("Message sent to R : SoS<-summary(aovresult)[[1]][1:"
+ + factorNumber + ",2]");
engine
- .voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]]");
+ .voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:"
+ + factorNumber + "]");
+ log
+ .info("Message sent to R : names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]][1:"
+ + factorNumber + "]");
engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+ log.info("Message sent to R : IndSensibilite<-SoS/sum(SoS)");
//Create a data.frame to export sensitivity important results in one file.
engine.voidEval("exportsensitivity=data.frame(SoS[1:"
+ factorNumber + "],IndSensibilite[1:" + factorNumber
+ "])");
+ log
+ .info("Message sent to R : exportsensitivity=data.frame(SoS[1:"
+ + factorNumber
+ + "],IndSensibilite[1:"
+ + factorNumber + "])");
engine
.voidEval("names(exportsensitivity)<-c(\"Sum Of Squares\",\"Sensitivity indices\")");
+ log
+ .info("Message sent to R : names(exportsensitivity)<-c(\"Sum Of Squares\",\"Sensitivity indices\")");
/*Set the export directory
*Export directory is the first simulation export directory.
*/
engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
+ log.info("Message sent to R : setwd(\""
+ + outputdirectory.getAbsolutePath() + "\")");
//Save the results with the scenarios.
engine.voidEval("write.csv(dataforaov,\""
+ simulationStorages.get(0).getParameter()
.getSensitivityExportNames().get(k)
- + "_Results.csv");
+ + "_Results.csv\")");
+ log.info("Message sent to R : write.csv(dataforaov,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + "_Results.csv\")");
//Save the sensitivity indices
engine.voidEval("write.csv(exportsensitivity,\""
+ simulationStorages.get(0).getParameter()
.getSensitivityExportNames().get(k)
+ "_SensitivityIndices.csv\")");
+ log.info("Message sent to R : write.csv(exportsensitivity,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + "_SensitivityIndices.csv\")");
//FIXME export through java to enable export when using Rserve (when distant Rserve).
+ engine.terminate();
}
+ log.info("end");
} catch (Exception e) {
e.printStackTrace();
1
0
Author: chatellier
Date: 2009-03-16 16:50:28 +0000 (Mon, 16 Mar 2009)
New Revision: 76
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Ajout d'une methode sur les calculateurs permettant de savoir s'il savent gerer la cardinalit?\195?\169 ou pas.
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-16 10:27:55 UTC (rev 75)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-16 16:50:28 UTC (rev 76)
@@ -47,6 +47,16 @@
public class SensitivityCalculatorJavaExpandGrid implements
SensitivityCalculator {
+ /**
+ * 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 {
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-16 10:27:55 UTC (rev 75)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-16 16:50:28 UTC (rev 76)
@@ -58,6 +58,16 @@
private static Log log = LogFactory
.getLog(SensitivityCalculatorRMorris.class);
+ /**
+ * 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) {
double[] dataframe = new double[0];
1
0
Author: jcouteau
Date: 2009-03-16 10:27:55 +0000 (Mon, 16 Mar 2009)
New Revision: 75
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Adapt analysis to Interface changes.
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-13 09:30:36 UTC (rev 74)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-16 10:27:55 UTC (rev 75)
@@ -47,7 +47,7 @@
public class SensitivityCalculatorJavaExpandGrid implements
SensitivityCalculator {
- public SensitivityScenarios compute(DesignPlan plan)
+ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
throws SensitivityException {
int k = 1; //number of sensitivity scenarios (initialization)
@@ -112,45 +112,83 @@
thisExperimentScenarios.add(experimentScenario);
thisExperiment.setScenarios(thisExperimentScenarios);
}
+
+ /*
+ * Call R to save the data for result analysis
+ */
+ int scenariosNumber = thisExperimentScenarios.size();
+
+ REngine engine = new RProxy();
+ 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();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+
+ }
+
+ //Create the data data.frame from the factors
+ String dataframe = "data<-data.frame(";
+ for (int j = 0; j < factorNumber; j++) {
+ if (j < factorNumber - 1) {
+ dataframe = dataframe + "factor" + j + "=factor(factor" + j
+ + "))";
+ } else {
+ dataframe = dataframe + "factor" + j + "=factor(factor" + j
+ + "),";
+ }
+
+ }
+ engine.voidEval(dataframe);
+
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+
+ // Export the data.frame object for the second run in a .expandgrid file
+ engine.voidEval("dput(data,file=\".expandgrid\")");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Error while processing
+ }
+
return thisExperiment;
}
- public void analyzeResult(SensitivityScenarios sensitivityScenarios,
- List<SimulationStorage> simulationStorages)
- throws SensitivityException {
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputdirectory) throws SensitivityException {
- int scenariosNumber = sensitivityScenarios.getScenarios().size();
- int factorNumber = sensitivityScenarios.getScenarios().get(0)
- .getFactors().size();
-
REngine engine = new RProxy();
try {
+ /*int scenariosNumber = sensitivityScenarios.getScenarios().size();
+ int factorNumber = sensitivityScenarios.getScenarios().get(0)
+ .getFactors().size();*/
+
int sensitivityNumber = simulationStorages.get(0).getParameter()
.getSensitivityExportNames().size();
for (int k = 0; k < sensitivityNumber; k++) {
- //Create the params 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
- + sensitivityScenarios.getScenarios()
- .get(i).getFactors().get(j)
- .getValue() + ",";
- } else {
- vector = vector
- + sensitivityScenarios.getScenarios()
- .get(i).getFactors().get(j)
- .getValue();
- }
+ //Get back the scenarios
+ engine.voidEval("factors<-dget(\".expandgrid\")");
- }
- vector = vector + ")";
- engine.voidEval(vector);
- }
+ //Get back the factors number
+ int factorNumber = (Integer) engine.eval("length(factors)");
//Create the results vectors
String result = "result<-c(";
@@ -186,13 +224,7 @@
engine.voidEval(result);
//Create the dataforaov data.frame
- String dataframe = "dataforaov<-data.frame(";
- for (int j = 0; j < factorNumber; j++) {
- dataframe = dataframe + "factor" + j + "=factor(factor" + j
- + "),";
-
- }
- dataframe = dataframe + "result=result)";
+ String dataframe = "dataforaov<-data.frame(factors,result=result)";
engine.voidEval(dataframe);
//Call aov()
@@ -206,27 +238,44 @@
}
engine.voidEval(aovCall);
- //Export the results
- /*
- * SoS<-anova(aovresult)[1:3,2]
- * IndSensibilite<-SoS/sum(SoS)
- * write.csv(IndSensibilite)
+ /*Export the results
+ *Export format is csv, data separated by ','
+ *Results Export name is sensitivityExportName_Results.csv
+ *Sensitivity Indices export name is sensitivityExportName_SensitivityIndices.csv
*/
- engine.voidEval("SoS<-anova(aovresult)[1:" + factorNumber
- + ",2]");
- engine.voidEval("names(SoS)<-dimnames(anova(aovtest))[[1]][1:"
- + factorNumber + "]");
+ //Compute Sum of Squares and Sensitivity indices
+ engine.voidEval("SoS<-summary(aovresult)[[1]][1:"
+ + factorNumber + ",2]");
+ engine
+ .voidEval("names(SoS)<-dimnames(summary(aovresult)[[1]])[[1]]");
engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
- engine.voidEval("setwd(\""
- + simulationStorages.get(0).getDirectory().toString()
+
+ //Create a data.frame to export sensitivity important results in one file.
+ engine.voidEval("exportsensitivity=data.frame(SoS[1:"
+ + factorNumber + "],IndSensibilite[1:" + factorNumber
+ + "])");
+ engine
+ .voidEval("names(exportsensitivity)<-c(\"Sum Of Squares\",\"Sensitivity indices\")");
+
+ /*Set the export directory
+ *Export directory is the first simulation export directory.
+ */
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ "\")");
- engine
- .voidEval("write.csv(IndSensibilite,\""
- + simulationStorages.get(0).getParameter()
- .getSensitivityExportNames().get(k)
- + ".csv\")");
- //FIXME export through java to enable export when using Rserve
+
+ //Save the results with the scenarios.
+ engine.voidEval("write.csv(dataforaov,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + "_Results.csv");
+
+ //Save the sensitivity indices
+ engine.voidEval("write.csv(exportsensitivity,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + "_SensitivityIndices.csv\")");
+ //FIXME export through java to enable export when using Rserve (when distant Rserve).
}
} catch (Exception e) {
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-13 09:30:36 UTC (rev 74)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-16 10:27:55 UTC (rev 75)
@@ -31,8 +31,6 @@
import org.codelutin.math.matrix.MatrixND;
import org.codelutin.util.FileUtil;
-import scripts.GravityModel;
-
import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
@@ -51,16 +49,17 @@
* @author jcouteau
* @version $Revision$
*
- * Last update : $Date$
- * By : $Author$
+ * Last update : $Date$ By :
+ * $Author$
*/
public class SensitivityCalculatorRMorris implements SensitivityCalculator {
/** to use log facility, just put in your code: log.info("..."); */
- private static Log log = LogFactory.getLog(SensitivityCalculatorRMorris.class);
-
- public SensitivityScenarios compute(DesignPlan plan) {
+ private static Log log = LogFactory
+ .getLog(SensitivityCalculatorRMorris.class);
+ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) {
+
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
@@ -175,15 +174,24 @@
// Load sensitivity package into R (if package already loaded,
// nothing happens.
engine.voidEval("library(sensitivity)");
+
// Run sensitivity analysis
engine.voidEval(rInstruction);
+
+ // Set output directory
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+
+ // Export the morris object for the second run in a .morris file
+ engine.voidEval("dput(a,file=\".morris\")");
+
// Get back experiment plan
dataframe = (double[]) engine.eval("a$X");
if (log.isDebugEnabled()) {
log.debug("rInstruction = " + rInstruction);
}
-
+
nbExperiments = dataframe.length / factorNumber;
} catch (RException e) {
@@ -231,21 +239,30 @@
}
- public void analyzeResult(SensitivityScenarios sensitivityScenarios,
- List<SimulationStorage> simulationStorages) {
+ public void analyzeResult(List<SimulationStorage> simulationStorages,
+ File outputdirectory) {
- int scenariosNumber = sensitivityScenarios.getScenarios().size();
-
REngine engine = new RProxy();
try {
+ //Set the working directory (for import and exports)
+ engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath()
+ + "\")");
+
+ // Export the morris object for the second run in a .morris file
+ engine.voidEval("a<-dget(\".morris\")");
+
+ /*int scenariosNumber = sensitivityScenarios.getScenarios().size();*/
+ int scenariosNumber = (Integer) engine
+ .eval("length(y$X)/y$factors");
+
int sensitivityNumber = simulationStorages.get(0).getParameter()
.getSensitivityExportNames().size();
for (int k = 0; k < sensitivityNumber; k++) {
- // Creates the R expression.
- String rInstruction = "tell(x,y=c(";
+ // Creates the R expression to import results in R
+ String rInstruction = "results<-c(";
for (int l = 0; l < scenariosNumber; l++) {
File importFile = new File(
simulationStorages.get(l).getDirectory().toString(),
@@ -280,22 +297,30 @@
// Load sensitivity package into R (if package already loaded,
// nothing happens.
engine.voidEval("library(sensitivity)");
+
// Send the simulation results
engine.voidEval(rInstruction);
+
+ //Compute results
+ engine.voidEval("tell(x,y=results");
+
// Get back the sensitivity results, mu, mu star and sigma.
engine.voidEval("mu<-apply(x$ee, 2, mean)");
engine
.voidEval("mu.star <- apply(x$ee, 2, function(x) mean(abs(x)))");
engine.voidEval("sigma <- apply(x$ee, 2, sd)");
+
+ //Create the data.frame of sensitivity indices for export purpose
engine.voidEval("df=data.frame(mu,mu.star,sigma)");
+
+ //
engine.voidEval("setwd(\""
+ simulationStorages.get(0).getDirectory().toString()
+ "\")");
- engine
- .voidEval("write.csv(df,\""
- + simulationStorages.get(0).getParameter()
- .getSensitivityExportNames().get(k)
- + ".csv\")");
+ engine.voidEval("write.csv(df,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + "_SensitivityIndices.csv\")");
//FIXME export through java to enable export when using Rserve
}
1
0
Author: chatellier
Date: 2009-03-13 09:30:36 +0000 (Fri, 13 Mar 2009)
New Revision: 74
Modified:
trunk/exports/SensitivityCapturesPoidsPopage.java
Log:
Erreur de copi?\195?\169/coll?\195?\169
Modified: trunk/exports/SensitivityCapturesPoidsPopage.java
===================================================================
--- trunk/exports/SensitivityCapturesPoidsPopage.java 2009-03-12 20:02:47 UTC (rev 73)
+++ trunk/exports/SensitivityCapturesPoidsPopage.java 2009-03-13 09:30:36 UTC (rev 74)
@@ -18,7 +18,7 @@
public class SensitivityCapturesPoidsPopage implements SensitivityExport {
/** to use log facility, just put in your code: log.info("..."); */
- static private Log log = LogFactory.getLog(CapturesPoids.class);
+ static private Log log = LogFactory.getLog(SensitivityCapturesPoidsPopage.class);
protected String[] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP };
1
0
Author: chatellier
Date: 2009-03-12 20:02:47 +0000 (Thu, 12 Mar 2009)
New Revision: 73
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Add logging
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-11 18:28:16 UTC (rev 72)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-12 20:02:47 UTC (rev 73)
@@ -22,6 +22,8 @@
import java.io.Serializable;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.codelutin.j2r.REngine;
import org.codelutin.j2r.RException;
import org.codelutin.j2r.RProxy;
@@ -29,6 +31,8 @@
import org.codelutin.math.matrix.MatrixND;
import org.codelutin.util.FileUtil;
+import scripts.GravityModel;
+
import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
@@ -42,15 +46,19 @@
import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
/**
- * Implementation of Morris method using R
+ * Implementation of Morris method using R.
*
* @author jcouteau
- * @version $Revision: 1.0 $
+ * @version $Revision$
*
- * Last update : $Date: 26 févr. 2009 $ By : $Author: chatellier $
+ * Last update : $Date$
+ * By : $Author$
*/
public class SensitivityCalculatorRMorris implements SensitivityCalculator {
+ /** to use log facility, just put in your code: log.info("..."); */
+ private static Log log = LogFactory.getLog(SensitivityCalculatorRMorris.class);
+
public SensitivityScenarios compute(DesignPlan plan) {
double[] dataframe = new double[0];
@@ -172,6 +180,10 @@
// Get back experiment plan
dataframe = (double[]) engine.eval("a$X");
+ if (log.isDebugEnabled()) {
+ log.debug("rInstruction = " + rInstruction);
+ }
+
nbExperiments = dataframe.length / factorNumber;
} catch (RException e) {
Property changes on: trunk/sensitivity/SensitivityCalculatorRMorris.java
___________________________________________________________________
Name: svn:keywords
+ Revision Date Author
1
0
11 Mar '09
Author: jcouteau
Date: 2009-03-11 18:28:16 +0000 (Wed, 11 Mar 2009)
New Revision: 72
Added:
trunk/exports/SensitivityBiomassPopage.java
trunk/exports/SensitivityCapturesPoidsPopage.java
Modified:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Adding export for sensitivity
Modifs on calculators (beginning of continuous matrix implementation, taking cardinality into account on continuous domains)
Copied: trunk/exports/SensitivityBiomassPopage.java (from rev 71, trunk/exports/SensitivityBiomass.java)
===================================================================
--- trunk/exports/SensitivityBiomassPopage.java (rev 0)
+++ trunk/exports/SensitivityBiomassPopage.java 2009-03-11 18:28:16 UTC (rev 72)
@@ -0,0 +1,69 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixIterator;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+
+public class SensitivityBiomassPopage implements SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory.getLog(SensitivityBiomassPopage.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ Date lastDate = simulation.getResultStorage().getLastDate();
+ double biomass = 0.0;
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals("popage")) {
+ MatrixND mat = simulation.getResultStorage().getMatrix(pop,
+ ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = mat.iterator(); i.hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ Date date = (Date) sems[0];
+
+ if (date.afterOrEquals(lastDate)) {
+ biomass = biomass + i.getValue();
+ }
+ }
+ }
+ }
+ out.write(Double.toString(biomass));
+
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Biomass for the last time step. Biomass is the sum on the groups and zones");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityBiomassPopage";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
Property changes on: trunk/exports/SensitivityBiomassPopage.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/exports/SensitivityCapturesPoidsPopage.java
===================================================================
--- trunk/exports/SensitivityCapturesPoidsPopage.java (rev 0)
+++ trunk/exports/SensitivityCapturesPoidsPopage.java 2009-03-11 18:28:16 UTC (rev 72)
@@ -0,0 +1,73 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixIterator;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+
+public class SensitivityCapturesPoidsPopage implements SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory.getLog(CapturesPoids.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP };
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ Date lastDate = simulation.getResultStorage().getLastDate();
+ Double capturesWeight = 0.0;
+
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ if (pop.getName().equals("popage")) {
+ for (Date date = new Date(0); !date.after(lastDate); date = date
+ .next()) {
+ MatrixND mat = simulation
+ .getResultStorage()
+ .getMatrix(
+ date,
+ pop,
+ ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP);
+ if (mat != null) { // can be null if simulation is stopped before last year simulation
+ mat = mat.sumOverDim(0); //sum on strategy
+ for (MatrixIterator i = mat.iterator(); i.hasNext();) {
+ i.next();
+ capturesWeight=capturesWeight+i.getValue();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Captures in weight for the last year for the popage population. Captures is the sum of zones, groups, metiers and strategies");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityCapturesPoidsPopage";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-10 17:53:18 UTC (rev 71)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-11 18:28:16 UTC (rev 72)
@@ -96,6 +96,16 @@
* result;
}
+ if (factor.getDomain() instanceof ContinuousDomain) {
+ factor
+ .setValueForIdentifier((((ContinuousDomain<Double>) factor
+ .getDomain()).getMaxBound() - ((ContinuousDomain<Double>) factor
+ .getDomain()).getMinBound())
+ / rest
+ + ((ContinuousDomain<Double>) factor
+ .getDomain()).getMinBound());
+ }
+
factor.setValueForIdentifier(rest);
experimentScenario.addFactor(factor);
}
@@ -216,7 +226,7 @@
+ simulationStorages.get(0).getParameter()
.getSensitivityExportNames().get(k)
+ ".csv\")");
- //FIXME export through java to enable export when using Rserve
+ //FIXME export through java to enable export when using Rserve
}
} catch (Exception e) {
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-10 17:53:18 UTC (rev 71)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-11 18:28:16 UTC (rev 72)
@@ -29,7 +29,6 @@
import org.codelutin.math.matrix.MatrixND;
import org.codelutin.util.FileUtil;
-import scripts.ResultName;
import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
@@ -40,6 +39,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
/**
* Implementation of Morris method using R
@@ -51,8 +51,6 @@
*/
public class SensitivityCalculatorRMorris implements SensitivityCalculator {
- protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
-
public SensitivityScenarios compute(DesignPlan plan) {
double[] dataframe = new double[0];
@@ -94,7 +92,9 @@
+ ((DiscreteDomain<? extends Serializable>) domain)
.getValues().size() + ",";
} else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction + "4" + ",";
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getCardinality() + ",";
}
} else {
if (domain instanceof DiscreteDomain) {
@@ -102,7 +102,9 @@
+ ((DiscreteDomain<? extends Serializable>) domain)
.getValues().size();
} else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction + "4";
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getCardinality();
}
}
}
@@ -188,8 +190,26 @@
Scenario experimentScenario = new Scenario();
for (int i = 0; i < factorNumber; i++) {
Factor<? extends Serializable> factor = factors.get(i);
- factor.setValueForIdentifier(morris
- .getValue(new int[] { i, j }));
+ if (factor.getDomain() instanceof MatrixContinuousDomain) {
+ if (((MatrixContinuousDomain<?>) factor.getDomain())
+ .getOperator().equals("*")) {
+ factor
+ .setValueForIdentifier(((MatrixContinuousDomain<?>) factor
+ .getDomain()).getMatrix().mults(
+ morris.getValue(new int[] { i, j })));
+ }
+ if (((MatrixContinuousDomain<?>) factor.getDomain())
+ .getOperator().equals("/")) {
+ factor
+ .setValueForIdentifier(((MatrixContinuousDomain<?>) factor
+ .getDomain()).getMatrix().divs(
+ morris.getValue(new int[] { i, j })));
+ }
+
+ } else {
+ factor.setValueForIdentifier(morris.getValue(new int[] { i,
+ j }));
+ }
experimentScenario.addFactor(factor);
}
thisExperimentScenarios.add(experimentScenario);
@@ -277,8 +297,4 @@
return "Implementation of Morris method using R";
}
- public String[] getNecessaryResult() {
- return this.necessaryResult;
- }
-
}
1
0
Author: jcouteau
Date: 2009-03-10 17:53:18 +0000 (Tue, 10 Mar 2009)
New Revision: 71
Added:
trunk/exports/SensitivityBiomass.java
Log:
Export biomass for sensitivity analysis
Added: trunk/exports/SensitivityBiomass.java
===================================================================
--- trunk/exports/SensitivityBiomass.java (rev 0)
+++ trunk/exports/SensitivityBiomass.java 2009-03-10 17:53:18 UTC (rev 71)
@@ -0,0 +1,84 @@
+package exports;
+
+import static org.codelutin.i18n.I18n._;
+
+import java.io.Writer;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.math.matrix.MatrixIterator;
+import org.codelutin.math.matrix.MatrixND;
+
+import scripts.ResultName;
+
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.entities.PopulationGroup;
+import fr.ifremer.isisfish.entities.Zone;
+import fr.ifremer.isisfish.export.SensitivityExport;
+import fr.ifremer.isisfish.types.Date;
+
+public class SensitivityBiomass implements SensitivityExport {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory.getLog(SensitivityBiomass.class);
+
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+
+ @Override
+ public void export(SimulationStorage simulation, Writer out)
+ throws Exception {
+ double biomass = 0.0;
+ int lastDate = 0;
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ MatrixND mat = simulation.getResultStorage().getMatrix(pop,
+ ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i = mat.iterator(); i.hasNext();) {
+ i.next();
+ Object[] sems = i.getSemanticsCoordinates();
+ Date date = (Date) sems[0];
+ if (date.getDate()>lastDate){
+ lastDate=date.getDate();
+ }
+
+ }
+ }
+ for (Population pop : simulation.getParameter().getPopulations()) {
+ MatrixND mat = simulation.getResultStorage().getMatrix(pop, ResultName.MATRIX_BIOMASS);
+ for (MatrixIterator i=mat.iterator(); i.hasNext();) {
+ i.next();
+ Object [] sems = i.getSemanticsCoordinates();
+ Date date = (Date)sems[0];
+ PopulationGroup group = (PopulationGroup)sems[1];
+ Zone zone = (Zone)sems[2];
+
+ if(date.getDate()==lastDate){
+ biomass=biomass+i.getValue();
+ }
+ }
+ }
+ out.write(Double.toString(biomass));
+
+ }
+
+ @Override
+ public String getDescription() {
+ return _("Biomass for the last time step. Biomass is the sum on the groups and zones");
+ }
+
+ @Override
+ public String getExportFilename() {
+ return "SensitivityBiomass";
+ }
+
+ @Override
+ public String getExtensionFilename() {
+ return ".csv";
+ }
+
+ @Override
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
+
+}
1
0
Author: jcouteau
Date: 2009-03-10 16:03:05 +0000 (Tue, 10 Mar 2009)
New Revision: 70
Added:
trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Sensitivity calculators :
-Adding Expand Grid using Java for the scenario, R for the analysis on different exports, does not work with Rserve.
-Update Morris method, analysis on different exports, does not work with Rserve.
Added: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java (rev 0)
+++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-03-10 16:03:05 UTC (rev 70)
@@ -0,0 +1,233 @@
+/* *##%
+ * Copyright (C) 2006 - 2009 Code Lutin
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *##%*/
+
+package sensitivity;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.List;
+
+import org.codelutin.j2r.REngine;
+import org.codelutin.j2r.RProxy;
+import org.codelutin.util.FileUtil;
+
+import fr.ifremer.isisfish.datastore.ExportStorage;
+import fr.ifremer.isisfish.datastore.SimulationStorage;
+import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
+
+/**
+ * Implementation of ExpandGrid method using Java
+ *
+ * @author jcouteau
+ * @version $Revision: 1.0 $
+ *
+ */
+public class SensitivityCalculatorJavaExpandGrid implements
+ SensitivityCalculator {
+
+ public SensitivityScenarios compute(DesignPlan plan)
+ throws SensitivityException {
+
+ int k = 1; //number of sensitivity scenarios (initialization)
+ int factorNumber = plan.getFactors().size(); //number of factors
+ List<Factor<? extends Serializable>> factors = plan.getFactors(); //list of factors
+
+ for (int i = 0; i < factorNumber; i++) {
+ if (factors.get(i).getDomain() instanceof ContinuousDomain) {
+ k = k
+ * ((ContinuousDomain<? extends Serializable>) factors
+ .get(i).getDomain()).getCardinality();
+ } else if (factors.get(i).getDomain() instanceof DiscreteDomain) {
+ k = k
+ * ((DiscreteDomain<? extends Serializable>) factors
+ .get(i).getDomain()).getValues().size();
+ }
+ }
+
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+
+ for (int i = 0; i < k; i++) {
+ int result = 0; //used for the euclidian division
+ int rest = k; //used for the euclidian division
+ Scenario experimentScenario = new Scenario();
+ for (int j = (factorNumber - 1); j >= 0; 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;
+ }
+ 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;
+ }
+
+ factor.setValueForIdentifier(rest);
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+ return thisExperiment;
+ }
+
+ public void analyzeResult(SensitivityScenarios sensitivityScenarios,
+ List<SimulationStorage> simulationStorages)
+ throws SensitivityException {
+
+ int scenariosNumber = sensitivityScenarios.getScenarios().size();
+ int factorNumber = sensitivityScenarios.getScenarios().get(0)
+ .getFactors().size();
+
+ REngine engine = new RProxy();
+ try {
+
+ int sensitivityNumber = simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().size();
+
+ for (int k = 0; k < sensitivityNumber; k++) {
+
+ //Create the params 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
+ + sensitivityScenarios.getScenarios()
+ .get(i).getFactors().get(j)
+ .getValue() + ",";
+ } else {
+ vector = vector
+ + sensitivityScenarios.getScenarios()
+ .get(i).getFactors().get(j)
+ .getValue();
+ }
+
+ }
+ vector = vector + ")";
+ engine.voidEval(vector);
+ }
+
+ //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(),
+ ExportStorage
+ .getExport(
+ simulationStorages
+ .get(l)
+ .getParameter()
+ .getSensitivityExportNames()
+ .get(k))
+ .getNewExportInstance().getExportFilename()
+ + ExportStorage
+ .getExport(
+ simulationStorages
+ .get(l)
+ .getParameter()
+ .getSensitivityExportNames()
+ .get(k))
+ .getNewExportInstance()
+ .getExtensionFilename());
+ String simulResult = FileUtil.readAsString(importFile);
+ double simulationResult = Double.valueOf(simulResult);
+ if (l < simulationStorages.size() - 1) {
+ result = result + simulationResult + ",";
+ } else {
+ result = result + simulationResult;
+ }
+ }
+ result = result + ")";
+ engine.voidEval(result);
+
+ //Create the dataforaov data.frame
+ String dataframe = "dataforaov<-data.frame(";
+ for (int j = 0; j < factorNumber; j++) {
+ dataframe = dataframe + "factor" + j + "=factor(factor" + j
+ + "),";
+
+ }
+ dataframe = dataframe + "result=result)";
+ engine.voidEval(dataframe);
+
+ //Call aov()
+ String aovCall = "aovresult<-aov(result~";
+ for (int j = 0; j < factorNumber; j++) {
+ if (j < (factorNumber - 1)) {
+ aovCall = aovCall + "factor" + j + "+";
+ } else {
+ aovCall = aovCall + "factor" + j + ",data=dataforaov)";
+ }
+ }
+ engine.voidEval(aovCall);
+
+ //Export the results
+ /*
+ * SoS<-anova(aovresult)[1:3,2]
+ * IndSensibilite<-SoS/sum(SoS)
+ * write.csv(IndSensibilite)
+ */
+
+ engine.voidEval("SoS<-anova(aovresult)[1:" + factorNumber
+ + ",2]");
+ engine.voidEval("names(SoS)<-dimnames(anova(aovtest))[[1]][1:"
+ + factorNumber + "]");
+ engine.voidEval("IndSensibilite<-SoS/sum(SoS)");
+ engine.voidEval("setwd(\""
+ + simulationStorages.get(0).getDirectory().toString()
+ + "\")");
+ engine
+ .voidEval("write.csv(IndSensibilite,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + ".csv\")");
+ //FIXME export through java to enable export when using Rserve
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ // Error while processing
+ }
+
+ }
+
+ public String getDescription() {
+ return "Implementation of Expand Grid method using Java";
+ }
+
+}
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-09 16:52:38 UTC (rev 69)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-10 16:03:05 UTC (rev 70)
@@ -18,11 +18,7 @@
package sensitivity;
-import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
import java.io.Serializable;
import java.util.List;
@@ -31,8 +27,10 @@
import org.codelutin.j2r.RProxy;
import org.codelutin.math.matrix.MatrixFactory;
import org.codelutin.math.matrix.MatrixND;
+import org.codelutin.util.FileUtil;
import scripts.ResultName;
+import fr.ifremer.isisfish.datastore.ExportStorage;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
@@ -56,11 +54,19 @@
protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
public SensitivityScenarios compute(DesignPlan plan) {
+
double[] dataframe = new double[0];
int nbExperiments = 0;
int factorNumber = plan.getFactors().size();
List<Factor<? extends Serializable>> factors = plan.getFactors();
+ //Test all factors, if one is discrete, return null
+ for (int i = 0; i < factorNumber; i++) {
+ if (factors.get(i).getDomain() instanceof DiscreteDomain) {
+ return null;
+ }
+ }
+
String rInstruction = "a<-morris(model=NULL,factors=c(";
// Creating the factors vector.
@@ -196,96 +202,75 @@
public void analyzeResult(SensitivityScenarios sensitivityScenarios,
List<SimulationStorage> simulationStorages) {
- // This is is an analysis example with biomass analysis.
+ int scenariosNumber = sensitivityScenarios.getScenarios().size();
- // Creates the R expression.
- String rInstruction = "tell(x,y=c(";
+ REngine engine = new RProxy();
+ try {
- for (int i = 0; i < sensitivityScenarios.getScenarios().size(); i++) {
- try {
- File biomass;
- MatrixND matrixBiomass;
- biomass = new File(simulationStorages.get(i)
- .getSimulationDirectory().toString(), "Biomasses.csv");
- /*
- * biomass = FileUtil.getFile(".*.csv", "fichier csv séparateur
- * ';'");
- */
- matrixBiomass = MatrixFactory.getInstance().create(
- new int[] { 0 });
+ int sensitivityNumber = simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().size();
- matrixBiomass.importCSV(new FileReader(biomass),
- new int[] { 0 });
+ for (int k = 0; k < sensitivityNumber; k++) {
- // uses the very last value of the matrix to check sensitivity
-
- int[] dimensions = matrixBiomass.getDim();
- if (i == sensitivityScenarios.getScenarios().size() - 1) {
- rInstruction = rInstruction
- + (double) matrixBiomass.getValue(dimensions)
- + "))";
- } else {
- rInstruction = rInstruction
- + (double) matrixBiomass.getValue(dimensions) + ",";
+ // Creates the R expression.
+ String rInstruction = "tell(x,y=c(";
+ for (int l = 0; l < scenariosNumber; l++) {
+ File importFile = new File(
+ simulationStorages.get(l).getDirectory().toString(),
+ ExportStorage
+ .getExport(
+ simulationStorages
+ .get(l)
+ .getParameter()
+ .getSensitivityExportNames()
+ .get(k))
+ .getNewExportInstance().getExportFilename()
+ + ExportStorage
+ .getExport(
+ simulationStorages
+ .get(l)
+ .getParameter()
+ .getSensitivityExportNames()
+ .get(k))
+ .getNewExportInstance()
+ .getExtensionFilename());
+ String simulResult = FileUtil.readAsString(importFile);
+ double simulationResult = Double.valueOf(simulResult);
+ if (l < simulationStorages.size() - 1) {
+ rInstruction = rInstruction + simulationResult + ",";
+ } else {
+ rInstruction = rInstruction + simulationResult;
+ }
}
+ rInstruction = rInstruction + "))";
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
+ // Call R
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+ // Get back the sensitivity results, mu, mu star and sigma.
+ engine.voidEval("mu<-apply(x$ee, 2, mean)");
+ engine
+ .voidEval("mu.star <- apply(x$ee, 2, function(x) mean(abs(x)))");
+ engine.voidEval("sigma <- apply(x$ee, 2, sd)");
+ engine.voidEval("df=data.frame(mu,mu.star,sigma)");
+ engine.voidEval("setwd(\""
+ + simulationStorages.get(0).getDirectory().toString()
+ + "\")");
+ engine
+ .voidEval("write.csv(df,\""
+ + simulationStorages.get(0).getParameter()
+ .getSensitivityExportNames().get(k)
+ + ".csv\")");
+ //FIXME export through java to enable export when using Rserve
- double[] mu = { 0 };
- double[] mustar = { 0 };
- double[] sigma = { 0 };
-
- // Call R
- REngine engine = new RProxy();
- try {
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
- // Send the simulation results
- engine.voidEval(rInstruction);
- // Get back the sensitivity results, mu, mu star and sigma.
- engine.voidEval("mu<-apply(x$ee, 2, mean)");
- mu = (double[]) engine.eval("mu");
- engine
- .voidEval("mu.star <- apply(x$ee, 2, function(x) mean(abs(x)))");
- mustar = (double[]) engine.eval("mu.star");
- engine.voidEval("sigma <- apply(x$ee, 2, sd)");
- sigma = (double[]) engine.eval("sigma");
-
- } catch (RException e) {
+ }
+ } catch (Exception e) {
e.printStackTrace();
- // Error while retrieving the results
}
- // Treat the sensitivity results as wished.
- // Create the content for export
- String exportContent = "";
- for (int i = 0; i < sigma.length; i++) {
- exportContent = exportContent
- + "Factor : "
- + sensitivityScenarios.getScenarios().get(0).getFactors()
- .get(i).getName() + "\n mu = " + mu[i]
- + "\n mu.star = " + mustar[i] + "\n sigma = " + sigma[i]
- + "\n\n\n";
- }
-
- // export in the first simulation storage
- try {
- File export;
- export = new File(simulationStorages.get(0)
- .getSimulationDirectory().toString(), "sensitivity.txt");
-
- FileWriter fstream = new FileWriter(export);
- BufferedWriter out = new BufferedWriter(fstream);
- out.write(exportContent);
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
}
public String getDescription() {
1
0
Author: chatellier
Date: 2009-03-09 16:52:38 +0000 (Mon, 09 Mar 2009)
New Revision: 69
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Add new domain implementation.
Move domain to "domain" package.
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-03 16:10:13 UTC (rev 68)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-09 16:52:38 UTC (rev 69)
@@ -34,14 +34,14 @@
import scripts.ResultName;
import fr.ifremer.isisfish.datastore.SimulationStorage;
-import fr.ifremer.isisfish.simulator.sensitivity.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
-import fr.ifremer.isisfish.simulator.sensitivity.DiscreteDomain;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
/**
* Implementation of Morris method using R
1
0
Author: jcouteau
Date: 2009-03-03 16:10:13 +0000 (Tue, 03 Mar 2009)
New Revision: 68
Modified:
trunk/sensitivity/SensitivityCalculatorRMorris.java
Log:
Simplify the scenario creation.
Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java
===================================================================
--- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-03 10:53:32 UTC (rev 67)
+++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-03-03 16:10:13 UTC (rev 68)
@@ -24,7 +24,6 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
-import java.util.ArrayList;
import java.util.List;
import org.codelutin.j2r.REngine;
@@ -54,250 +53,247 @@
*/
public class SensitivityCalculatorRMorris implements SensitivityCalculator {
- protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
+ protected String[] necessaryResult = { ResultName.MATRIX_BIOMASS };
- public SensitivityScenarios compute(DesignPlan plan) {
- double[] dataframe = new double[0];
- int nbExperiments = 0;
- int factorNumber = plan.getFactors().size();
- List<Factor<? extends Serializable>> factors = plan.getFactors();
+ public SensitivityScenarios compute(DesignPlan plan) {
+ double[] dataframe = new double[0];
+ int nbExperiments = 0;
+ int factorNumber = plan.getFactors().size();
+ List<Factor<? extends Serializable>> factors = plan.getFactors();
- String rInstruction = "a<-morris(model=NULL,factors=c(";
+ String rInstruction = "a<-morris(model=NULL,factors=c(";
- // Creating the factors vector.
- for (int i = 0; i < factorNumber; i++) {
- if (i != (factorNumber - 1)) {
- rInstruction = rInstruction + "\"" + factors.get(i).getName()
- + "\",";
- } else {
- rInstruction = rInstruction + "\"" + factors.get(i).getName()
- + "\"";
- }
- }
+ // Creating the factors vector.
+ for (int i = 0; i < factorNumber; i++) {
+ if (i != (factorNumber - 1)) {
+ rInstruction = rInstruction + "\"" + factors.get(i).getName()
+ + "\",";
+ } else {
+ rInstruction = rInstruction + "\"" + factors.get(i).getName()
+ + "\"";
+ }
+ }
- // Adding the number of repetition parameter (r), the morris type
- // (type="oat") and the level vector
- rInstruction = rInstruction
- + "),r=4,design=list(type=\"oat\",levels=c(";
+ // Adding the number of repetition parameter (r), the morris type
+ // (type="oat") and the level vector
+ rInstruction = rInstruction
+ + "),r=4,design=list(type=\"oat\",levels=c(";
- // Creating the levels vector.
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size() + ",";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction + "4" + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size();
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction + "4";
- }
- }
- }
+ // Creating the levels vector.
+ for (int i = 0; i < factorNumber; i++) {
+ Domain<? extends Serializable> domain = factors.get(i).getDomain();
+ if (i != (factorNumber - 1)) {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction
+ + ((DiscreteDomain<? extends Serializable>) domain)
+ .getValues().size() + ",";
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction + "4" + ",";
+ }
+ } else {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction
+ + ((DiscreteDomain<? extends Serializable>) domain)
+ .getValues().size();
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction + "4";
+ }
+ }
+ }
- // Adding the grid.jump parameter
- rInstruction = rInstruction + "),grid.jump=1),binf=c(";
+ // Adding the grid.jump parameter
+ rInstruction = rInstruction + "),grid.jump=1),binf=c(";
- // Adding the binf parameter
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction + "0,";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMinBound() + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction + "0";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMinBound();
- }
- }
- }
+ // Adding the binf parameter
+ for (int i = 0; i < factorNumber; i++) {
+ Domain<? extends Serializable> domain = factors.get(i).getDomain();
+ if (i != (factorNumber - 1)) {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction + "0,";
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getMinBound() + ",";
+ }
+ } else {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction + "0";
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getMinBound();
+ }
+ }
+ }
- // Adding the bsup parameter
- rInstruction = rInstruction + "),bsup=c(";
- for (int i = 0; i < factorNumber; i++) {
- Domain<? extends Serializable> domain = factors.get(i).getDomain();
- if (i != (factorNumber - 1)) {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size()) - 1) + ",";
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMaxBound() + ",";
- }
- } else {
- if (domain instanceof DiscreteDomain) {
- rInstruction = rInstruction
- + ((((DiscreteDomain<? extends Serializable>) domain)
- .getValues().size()) - 1);
- } else if (domain instanceof ContinuousDomain) {
- rInstruction = rInstruction
- + ((ContinuousDomain<? extends Serializable>) domain)
- .getMaxBound();
- }
- }
- }
- rInstruction = rInstruction + "))";
+ // Adding the bsup parameter
+ rInstruction = rInstruction + "),bsup=c(";
+ for (int i = 0; i < factorNumber; i++) {
+ Domain<? extends Serializable> domain = factors.get(i).getDomain();
+ if (i != (factorNumber - 1)) {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction
+ + ((((DiscreteDomain<? extends Serializable>) domain)
+ .getValues().size()) - 1) + ",";
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getMaxBound() + ",";
+ }
+ } else {
+ if (domain instanceof DiscreteDomain) {
+ rInstruction = rInstruction
+ + ((((DiscreteDomain<? extends Serializable>) domain)
+ .getValues().size()) - 1);
+ } else if (domain instanceof ContinuousDomain) {
+ rInstruction = rInstruction
+ + ((ContinuousDomain<? extends Serializable>) domain)
+ .getMaxBound();
+ }
+ }
+ }
+ rInstruction = rInstruction + "))";
- REngine engine = new RProxy();
- try {
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
- // Run sensitivity analysis
- engine.voidEval(rInstruction);
- // Get back experiment plan
- dataframe = (double[]) engine.eval("a$X");
+ REngine engine = new RProxy();
+ try {
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+ // Run sensitivity analysis
+ engine.voidEval(rInstruction);
+ // Get back experiment plan
+ dataframe = (double[]) engine.eval("a$X");
- nbExperiments = dataframe.length / factorNumber;
+ nbExperiments = dataframe.length / factorNumber;
- } catch (RException e) {
- e.printStackTrace();
- // Error while retrieving scenario
- }
+ } catch (RException e) {
+ e.printStackTrace();
+ // Error while retrieving scenario
+ }
- // Transform the result from R in a matrix
- MatrixND morris = MatrixFactory.getInstance().create(dataframe,
- new int[] { factorNumber, nbExperiments });
+ // Transform the result from R in a matrix
+ MatrixND morris = MatrixFactory.getInstance().create(dataframe,
+ new int[] { factorNumber, nbExperiments });
- // Setting up the scenarios.
- SensitivityScenarios thisExperiment = new SensitivityScenarios();
- List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
- for (int j = 0; j < nbExperiments; j++) {
- Scenario experimentScenario = new Scenario();
- List<Factor<? extends Serializable>> factorslist = new ArrayList();
- for (int i = 0; i < factorNumber; i++) {
- Factor<? extends Serializable> factor = (Factor<? extends Serializable>) factors
- .get(i).clone();
- factor.setValueForIdentifier(morris
- .getValue(new int[] { i, j }));
- factorslist.add(factor);
- }
- experimentScenario.setFactors(factorslist);
- thisExperimentScenarios.add(experimentScenario);
- thisExperiment.setScenarios(thisExperimentScenarios);
- }
- return thisExperiment;
+ // Setting up the scenarios.
+ SensitivityScenarios thisExperiment = new SensitivityScenarios();
+ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios();
+ for (int j = 0; j < nbExperiments; j++) {
+ Scenario experimentScenario = new Scenario();
+ for (int i = 0; i < factorNumber; i++) {
+ Factor<? extends Serializable> factor = factors.get(i);
+ factor.setValueForIdentifier(morris
+ .getValue(new int[] { i, j }));
+ experimentScenario.addFactor(factor);
+ }
+ thisExperimentScenarios.add(experimentScenario);
+ thisExperiment.setScenarios(thisExperimentScenarios);
+ }
+ return thisExperiment;
- }
+ }
- public void analyzeResult(SensitivityScenarios sensitivityScenarios,
- List<SimulationStorage> simulationStorages) {
+ public void analyzeResult(SensitivityScenarios sensitivityScenarios,
+ List<SimulationStorage> simulationStorages) {
- // This is is an analysis example with biomass analysis.
+ // This is is an analysis example with biomass analysis.
- // Creates the R expression.
- String rInstruction = "tell(x,y=c(";
+ // Creates the R expression.
+ String rInstruction = "tell(x,y=c(";
- for (int i = 0; i < sensitivityScenarios.getScenarios().size(); i++) {
- try {
- File biomass;
- MatrixND matrixBiomass;
- biomass = new File(simulationStorages.get(i)
- .getSimulationDirectory().toString(), "Biomasses.csv");
- /*
- * biomass = FileUtil.getFile(".*.csv", "fichier csv séparateur
- * ';'");
- */
- matrixBiomass = MatrixFactory.getInstance().create(
- new int[] { 0 });
+ for (int i = 0; i < sensitivityScenarios.getScenarios().size(); i++) {
+ try {
+ File biomass;
+ MatrixND matrixBiomass;
+ biomass = new File(simulationStorages.get(i)
+ .getSimulationDirectory().toString(), "Biomasses.csv");
+ /*
+ * biomass = FileUtil.getFile(".*.csv", "fichier csv séparateur
+ * ';'");
+ */
+ matrixBiomass = MatrixFactory.getInstance().create(
+ new int[] { 0 });
- matrixBiomass.importCSV(new FileReader(biomass),
- new int[] { 0 });
+ matrixBiomass.importCSV(new FileReader(biomass),
+ new int[] { 0 });
- // uses the very last value of the matrix to check sensitivity
+ // uses the very last value of the matrix to check sensitivity
- int[] dimensions = matrixBiomass.getDim();
- if (i == sensitivityScenarios.getScenarios().size() - 1) {
- rInstruction = rInstruction
- + (double) matrixBiomass.getValue(dimensions)
- + "))";
- } else {
- rInstruction = rInstruction
- + (double) matrixBiomass.getValue(dimensions) + ",";
- }
+ int[] dimensions = matrixBiomass.getDim();
+ if (i == sensitivityScenarios.getScenarios().size() - 1) {
+ rInstruction = rInstruction
+ + (double) matrixBiomass.getValue(dimensions)
+ + "))";
+ } else {
+ rInstruction = rInstruction
+ + (double) matrixBiomass.getValue(dimensions) + ",";
+ }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
- double[] mu = { 0 };
- double[] mustar = { 0 };
- double[] sigma = { 0 };
+ double[] mu = { 0 };
+ double[] mustar = { 0 };
+ double[] sigma = { 0 };
- // Call R
- REngine engine = new RProxy();
- try {
- // Load sensitivity package into R (if package already loaded,
- // nothing happens.
- engine.voidEval("library(sensitivity)");
- // Send the simulation results
- engine.voidEval(rInstruction);
- // Get back the sensitivity results, mu, mu star and sigma.
- engine.voidEval("mu<-apply(x$ee, 2, mean)");
- mu = (double[]) engine.eval("mu");
- engine
- .voidEval("mu.star <- apply(x$ee, 2, function(x) mean(abs(x)))");
- mustar = (double[]) engine.eval("mu.star");
- engine.voidEval("sigma <- apply(x$ee, 2, sd)");
- sigma = (double[]) engine.eval("sigma");
+ // Call R
+ REngine engine = new RProxy();
+ try {
+ // Load sensitivity package into R (if package already loaded,
+ // nothing happens.
+ engine.voidEval("library(sensitivity)");
+ // Send the simulation results
+ engine.voidEval(rInstruction);
+ // Get back the sensitivity results, mu, mu star and sigma.
+ engine.voidEval("mu<-apply(x$ee, 2, mean)");
+ mu = (double[]) engine.eval("mu");
+ engine
+ .voidEval("mu.star <- apply(x$ee, 2, function(x) mean(abs(x)))");
+ mustar = (double[]) engine.eval("mu.star");
+ engine.voidEval("sigma <- apply(x$ee, 2, sd)");
+ sigma = (double[]) engine.eval("sigma");
- } catch (RException e) {
- e.printStackTrace();
- // Error while retrieving the results
- }
+ } catch (RException e) {
+ e.printStackTrace();
+ // Error while retrieving the results
+ }
- // Treat the sensitivity results as wished.
- // Create the content for export
- String exportContent = "";
- for (int i = 0; i < sigma.length; i++) {
- exportContent = exportContent
- + "Factor : "
- + sensitivityScenarios.getScenarios().get(0).getFactors()
- .get(i).getName() + "\n mu = " + mu[i]
- + "\n mu.star = " + mustar[i] + "\n sigma = " + sigma[i]
- + "\n\n\n";
- }
+ // Treat the sensitivity results as wished.
+ // Create the content for export
+ String exportContent = "";
+ for (int i = 0; i < sigma.length; i++) {
+ exportContent = exportContent
+ + "Factor : "
+ + sensitivityScenarios.getScenarios().get(0).getFactors()
+ .get(i).getName() + "\n mu = " + mu[i]
+ + "\n mu.star = " + mustar[i] + "\n sigma = " + sigma[i]
+ + "\n\n\n";
+ }
- // export in the first simulation storage
- try {
- File export;
- export = new File(simulationStorages.get(0)
- .getSimulationDirectory().toString(), "sensitivity.txt");
+ // export in the first simulation storage
+ try {
+ File export;
+ export = new File(simulationStorages.get(0)
+ .getSimulationDirectory().toString(), "sensitivity.txt");
- FileWriter fstream = new FileWriter(export);
- BufferedWriter out = new BufferedWriter(fstream);
- out.write(exportContent);
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
+ FileWriter fstream = new FileWriter(export);
+ BufferedWriter out = new BufferedWriter(fstream);
+ out.write(exportContent);
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
- }
+ }
- public String getDescription() {
- return "Implementation of Morris method using R";
- }
+ public String getDescription() {
+ return "Implementation of Morris method using R";
+ }
- public String[] getNecessaryResult() {
- return this.necessaryResult;
- }
+ public String[] getNecessaryResult() {
+ return this.necessaryResult;
+ }
}
1
0