Author: echatellier Date: 2013-11-28 10:19:27 +0100 (Thu, 28 Nov 2013) New Revision: 311 Url: http://forge.codelutin.com/projects/isis-fish-data/repository/revisions/311 Log: Update AS scripts Modified: branches/4.2.2/sensitivityanalysis/DOptimal.java branches/4.2.2/sensitivityanalysis/Fast.java branches/4.2.2/sensitivityanalysis/Morris.java branches/4.2.2/sensitivityanalysis/OptimumLHS.java branches/4.2.2/sensitivityanalysis/RandomLHS.java branches/4.2.2/sensitivityanalysis/RegularExpandGrid.java branches/4.2.2/sensitivityanalysis/RegularFractions.java branches/4.2.2/sensitivityanalysis/Sobol.java Modified: branches/4.2.2/sensitivityanalysis/DOptimal.java =================================================================== --- branches/4.2.2/sensitivityanalysis/DOptimal.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/DOptimal.java 2013-11-28 09:19:27 UTC (rev 311) @@ -109,16 +109,15 @@ if (domain instanceof ContinuousDomain) { ContinuousDomain contDomain = (ContinuousDomain) domain; int card = factor.getCardinality(); - Double min = contDomain.getCalculatorMinBound(); - Double max = contDomain.getCalculatorMaxBound(); - - for (int i = 0; i < card; i++) { - //add the ith value - vector += (min + (i * (max - min) / (card - 1))) + ","; - } +// Double min = contDomain.getCalculatorMinBound(); +// Double max = contDomain.getCalculatorMaxBound(); +// +// for (int i = 0; i < card; i++) { +// //add the ith value +// vector += (min + (i * (max - min) / (card - 1))) + ","; +// } } else { - Map<Object, Object> values = ((DiscreteDomain) domain).getValues(); - int nbValues = values.size(); + int nbValues = ((DiscreteDomain) domain).getValuesCount(); for (int i = 0; i < nbValues; i++) { vector += "as.integer(" + i + "),"; } @@ -202,9 +201,9 @@ if (domain instanceof ContinuousDomain){ ContinuousDomain contDomain = (ContinuousDomain)domain; distribution += "\"qunif\""; - parameters += "\"[" + contDomain.getMinBound() - + ";" + contDomain.getMaxBound() - + "]\""; +// parameters += "\"[" + contDomain.getMinBound() +// + ";" + contDomain.getMaxBound() +// + "]\""; } else { DiscreteDomain discDomain = (DiscreteDomain)domain; distribution += "\"discrete\""; Modified: branches/4.2.2/sensitivityanalysis/Fast.java =================================================================== --- branches/4.2.2/sensitivityanalysis/Fast.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/Fast.java 2013-11-28 09:19:27 UTC (rev 311) @@ -24,8 +24,10 @@ import java.io.File; import java.util.List; +import java.util.Map; import fr.ifremer.isisfish.simulator.sensitivity.*; +import org.apache.commons.lang3.StringUtils; import org.nuiton.j2r.REngine; import org.nuiton.j2r.RException; import org.nuiton.j2r.RProxy; @@ -35,8 +37,6 @@ import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.util.Doc; import org.nuiton.j2r.types.RDataFrame; @@ -44,9 +44,9 @@ * Implementation of Fast method using R. * * @author jcouteau - * @version $Revision: 89 $ + * @version $Revision: 3842 $ * - * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By : + * Last update : $Date: 2013-11-22 18:52:48 +0100 (ven., 22 nov. 2013) $ By : * $Author: jcouteau $ */ public class Fast extends AbstractSensitivityAnalysis { @@ -87,14 +87,9 @@ SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - //Test all factors, if one is discrete, return null - for (int i = 0; i < factorNumber; i++) { - if (factors.get(i).getDomain() instanceof DiscreteDomain) { - throw new SensitivityException(factors.get(i).getName() + - " has a discrete domain, this is not acceptable for fast " + - "method."); - } - } + // only run with continuous + checkAllFactorContinuous(factors); + String rInstruction = "a<-fast99(" + "model=NULL," + "factors=%s, " + @@ -145,33 +140,8 @@ nbExperiments = (Integer)engine.eval("dim(a$X)[1]"); - String factorDistribution = "isis.factor.distribution<-data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; + engine.voidEval(getIsisFactorDistribution(factors)); - // Creating the vectors. - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - factorNames += ","; - } - - distribution += "\"qunif\""; - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; - factorNames += "\"" + factor.getName() + "\""; - } - engine.voidEval(String.format(factorDistribution, factorNames, - distribution, parameters)); - engine.voidEval("call<-a$call"); @@ -199,18 +169,7 @@ Scenario experimentScenario = new Scenario(); for (int i = 0; i < factorNumber; i++) { Factor factor = plan.getFactors().get(i); - Domain domain = factor.getDomain(); - if ((domain instanceof MatrixContinuousDomain) - || (domain instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(dataFrame.get(i,j)); - } else { - ContinuousDomain continuousDomain = (ContinuousDomain)domain; - Double min = continuousDomain.getCalculatorMinBound(); - Double max = continuousDomain.getCalculatorMaxBound(); - Double dFValue = (Double)dataFrame.get(i,j); - Double value = min + (max - min) * dFValue; - factor.setValueForIdentifier(value); - } + factor.setValueForIdentifier(dataFrame.get(i,j)); experimentScenario.addFactor(factor); } thisExperimentScenarios.add(experimentScenario); Modified: branches/4.2.2/sensitivityanalysis/Morris.java =================================================================== --- branches/4.2.2/sensitivityanalysis/Morris.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/Morris.java 2013-11-28 09:19:27 UTC (rev 311) @@ -25,14 +25,10 @@ import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -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.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; +import fr.ifremer.isisfish.simulator.sensitivity.*; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.util.Doc; +import org.apache.commons.lang3.StringUtils; import org.nuiton.j2r.REngine; import org.nuiton.j2r.RException; import org.nuiton.j2r.RProxy; @@ -40,6 +36,7 @@ import java.io.File; import java.util.List; +import java.util.Map; /** * Implementation of Morris method using R. @@ -87,7 +84,7 @@ param_r = 4; } - testNoDiscrete(factors); + checkAllUniformDistribution(factors); // Creating the vectors. String factorNames = ""; @@ -97,7 +94,6 @@ String bsup = ""; for (int i = 0; i < factorNumber; i++) { Factor factor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) factor.getDomain(); if (i != 0) { factorNames += ","; levels += ","; @@ -112,9 +108,8 @@ gridJump += factor.getCardinality() / 2; - binf += domain.getCalculatorMinBound(); - - bsup += domain.getCalculatorMaxBound(); + binf += 0; + bsup += 1; } String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s," + @@ -128,7 +123,7 @@ rCall = editRInstruction(rCall); } - REngine engine = null; + REngine engine; try { engine = new RProxy(); @@ -178,9 +173,17 @@ parameters += ","; } - distribution += "\"qunif\""; - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; + Distribution r_distribution = domain.getDistribution(); + + distribution += "\""+ r_distribution.getInstruction() +"\""; + parameters += "\"["; + + for (Map.Entry<String,Object> param:domain.getDistributionParameters().entrySet()){ + parameters += param.getKey() + "=" + param.getValue() + ";"; + } + + parameters = StringUtils.removeEnd(parameters,";"); + parameters += "]\""; } engine.voidEval(String.format(factorDistribution, factorNames, distribution, parameters)); Modified: branches/4.2.2/sensitivityanalysis/OptimumLHS.java =================================================================== --- branches/4.2.2/sensitivityanalysis/OptimumLHS.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/OptimumLHS.java 2013-11-28 09:19:27 UTC (rev 311) @@ -45,7 +45,7 @@ * Implementation of Optimum Latin Hypercube method using R. * * @author jcouteau - * @version $Revision: 1.0 $ + * @version $Revision: 3842 $ */ public class OptimumLHS extends AbstractSensitivityAnalysis { @@ -82,7 +82,7 @@ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //Test all factors, if one is discrete, return null - testNoDiscrete(factors); + checkAllFactorContinuous(factors); try { REngine engine = new RProxy(); @@ -126,34 +126,7 @@ thisExperiment.setScenarios(thisExperimentScenarios); } - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; - - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factors.size(); i++) { - Factor tempFactor = factors.get(i); - ContinuousDomain domain = (ContinuousDomain) tempFactor.getDomain(); - if (i != 0) { - distribution += ","; - factorNames += ","; - parameters += ","; - } - - factorNames += "\"" + factors.get(i).getName() + "\""; - distribution += "\"qunif\""; - //add [min;max] to parameters - parameters += "\"[" + domain.getMinBound() + ";" + - domain.getMaxBound() + "]\""; - } - - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); + engine.voidEval(getIsisFactorDistribution(factors)); engine.voidEval("call<-" + "\"x<-optimumLHS(" + "n=" + param_simulationNumber Modified: branches/4.2.2/sensitivityanalysis/RandomLHS.java =================================================================== --- branches/4.2.2/sensitivityanalysis/RandomLHS.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/RandomLHS.java 2013-11-28 09:19:27 UTC (rev 311) @@ -46,7 +46,7 @@ * Implementation of Random Latin Hypercube method using R. * * @author jcouteau - * @version $Revision: 1.0 $ + * @version $Revision: 3842 $ */ public class RandomLHS extends AbstractSensitivityAnalysis { @@ -78,7 +78,7 @@ List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); //The list of scenarios List<Factor> factors = plan.getFactors(); //The factors - testNoDiscrete(factors); + checkAllFactorContinuous(factors); try { @@ -122,35 +122,8 @@ thisExperiment.setScenarios(thisExperimentScenarios); } - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(" + - "NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; + engine.voidEval(getIsisFactorDistribution(factors)); - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - - //Create the strings for the isis.MethodExp instruction - for (int i = 0; i < factors.size(); i++) { - ContinuousDomain domain = (ContinuousDomain)factors.get(i).getDomain(); - if (i != 0) { - distribution += ","; //the distribution - factorNames += ","; //the factor names - parameters += ","; //the parameters - } - - factorNames += "\"" + factors.get(i).getName() + "\""; - distribution += "\"qunif\""; //all distributions are qunif - double min = domain.getCalculatorMinBound(); - double max = domain.getCalculatorMaxBound(); - parameters += "\"[" + min + ";" + max + "]\""; - } - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); - engine.voidEval("call<-" + "\"x<-randomLHS(" + param_simulationNumber + "," + factorNumber + ")\""); Modified: branches/4.2.2/sensitivityanalysis/RegularExpandGrid.java =================================================================== --- branches/4.2.2/sensitivityanalysis/RegularExpandGrid.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/RegularExpandGrid.java 2013-11-28 09:19:27 UTC (rev 311) @@ -100,20 +100,19 @@ Domain domain = factor.getDomain(); if (domain instanceof ContinuousDomain) { - ContinuousDomain contDomain = (ContinuousDomain) domain; - int card = factor.getCardinality(); - Double min = contDomain.getCalculatorMinBound(); - Double max = contDomain.getCalculatorMaxBound(); - - for (int i = 0; i < card; i++) { - //add the ith value - vector += (min + (i * (max - min) / (card - 1))) + ","; - } +// ContinuousDomain contDomain = (ContinuousDomain) domain; +// int card = factor.getCardinality(); +// Double min = contDomain.getCalculatorMinBound(); +// Double max = contDomain.getCalculatorMaxBound(); +// +// for (int i = 0; i < card; i++) { +// //add the ith value +// vector += (min + (i * (max - min) / (card - 1))) + ","; +// } } if (domain instanceof DiscreteDomain) { - Map<Object, Object> values = ((DiscreteDomain) domain).getValues(); - int nbValues = values.size(); + int nbValues = ((DiscreteDomain) domain).getValuesCount(); for (int i = 0; i < nbValues; i++) { vector += "as.integer(" + i + "),"; } @@ -178,9 +177,9 @@ if (domain instanceof ContinuousDomain){ ContinuousDomain contDomain = (ContinuousDomain)domain; distribution += "\"qunif\""; - parameters += "\"[" + contDomain.getMinBound() - + ";" + contDomain.getMaxBound() - + "]\""; +// parameters += "\"[" + contDomain.getMinBound() +// + ";" + contDomain.getMaxBound() +// + "]\""; } else { DiscreteDomain discDomain = (DiscreteDomain)domain; distribution += "\"discrete\""; Modified: branches/4.2.2/sensitivityanalysis/RegularFractions.java =================================================================== --- branches/4.2.2/sensitivityanalysis/RegularFractions.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/RegularFractions.java 2013-11-28 09:19:27 UTC (rev 311) @@ -42,8 +42,6 @@ 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.EquationContinuousDomain; -import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.util.Doc; public class RegularFractions extends AbstractSensitivityAnalysis { @@ -89,20 +87,15 @@ String factorNames = ""; //Test all factors, if one is discrete, return null + checkAllFactorContinuous(factors); + //Create a string with all factors names for (int i = 0; i < factorNumber; i++) { - Domain domain = factors.get(i).getDomain(); if (i != 0) { factorNames += ","; } factorNames += "\"" + factors.get(i).getName() + "\""; - - if (domain instanceof DiscreteDomain) { - throw new SensitivityException(factors.get(i).getName() + - " has a discrete domain, this is not acceptable for " + - "this method."); - } } try { @@ -157,18 +150,7 @@ Scenario experimentScenario = new Scenario(); for (int i = 0; i < factors.size(); i++) { Factor factor = plan.getFactors().get(i); - Domain domain = factor.getDomain(); - Double dFValue = (Double)dataFrame.get(i,j); - if ((domain instanceof MatrixContinuousDomain) - || (domain instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(dFValue); - } else { - ContinuousDomain contDomain = (ContinuousDomain)domain; - Double max = contDomain.getCalculatorMaxBound(); - Double min = contDomain.getCalculatorMinBound(); - Double value = min + (max - min) * dFValue / (param_p - 1); - factor.setValueForIdentifier(value); - } + factor.setValueForIdentifier(dataFrame.get(i,j)); experimentScenario.addFactor(factor); } thisExperimentScenarios.add(experimentScenario); @@ -207,7 +189,7 @@ } engine.voidEval(dataframe); - engine.voidEval("isis.factor.distribution<-c(0.0)"); + engine.voidEval(getIsisFactorDistribution(factors)); engine.voidEval("isis.MethodExp<-list(" + "\"isis.factors\"=isis.factors," + Modified: branches/4.2.2/sensitivityanalysis/Sobol.java =================================================================== --- branches/4.2.2/sensitivityanalysis/Sobol.java 2013-11-08 10:22:14 UTC (rev 310) +++ branches/4.2.2/sensitivityanalysis/Sobol.java 2013-11-28 09:19:27 UTC (rev 311) @@ -24,20 +24,16 @@ import java.io.File; import java.util.List; +import java.util.Map; import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.simulator.sensitivity.*; +import org.apache.commons.lang3.StringUtils; import org.nuiton.j2r.REngine; import org.nuiton.j2r.RProxy; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityAnalysis; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -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.SensitivityException; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.util.Doc; import org.nuiton.j2r.types.RDataFrame; @@ -46,9 +42,9 @@ * Implementation of Sobol method using R. * * @author jcouteau - * @version $Revision: 89 $ + * @version $Revision: 3842 $ * - * Last update : $Date: 2009-03-25 13:45:16 +0100 (mer., 25 mars 2009) $ By : + * Last update : $Date: 2013-11-22 18:52:48 +0100 (ven., 22 nov. 2013) $ By : * $Author: jcouteau $ */ public class Sobol extends AbstractSensitivityAnalysis { @@ -86,7 +82,7 @@ SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - testNoDiscrete(factors); + checkAllFactorContinuous(factors); String rInstruction = "a<-sobol2002(model=NULL,X1=X1,X2=X2,nboot=%s)"; String rCall = String.format(rInstruction, param_nboot); @@ -107,11 +103,19 @@ engine.voidEval("library(sensitivity)"); - engine.voidEval("X1<-data.frame(matrix(runif(" + factorNumber + "*" - + param_n + "),nrow=" + param_n + "))"); - engine.voidEval("X2<-data.frame(matrix(runif(" + factorNumber + "*" - + param_n + "),nrow=" + param_n + "))"); + String x = "<-data.frame(matrix(c("; + for (int i = 0; i < factorNumber; i++) { + x += "runif("+param_n+"),"; + } + + x = StringUtils.removeEnd(x, ","); + + x+="),nrow="+param_n+"))"; + + engine.voidEval("X1"+x); + engine.voidEval("X2"+x); + engine.voidEval(rCall); // Creating the factors vector. @@ -135,36 +139,8 @@ nbExperiments = dataFrame.dim()[0]; - String isisFactorDistribution = "isis.factor.distribution<-" + - "data.frame(NomFacteur=c(%s)," + - "NomDistribution=c(%s)," + - "ParametreDistribution=c(%s))"; + engine.voidEval(getIsisFactorDistribution(factors)); - // Creating the vectors. - String distribution = ""; - String parameters = ""; - String factorNames = ""; - - for (int i = 0; i < factorNumber; i++) { - Factor factor = factors.get(i); - Domain domain = factor.getDomain(); - if (i != 0) { - distribution += ","; - parameters += ","; - factorNames += ","; - } - - distribution += "\"qunif\""; - ContinuousDomain continuousDomain = (ContinuousDomain) domain; - double min = continuousDomain.getCalculatorMinBound(); - double max = continuousDomain.getCalculatorMaxBound(); - parameters += "\"[" + min + ";" + max + "]\""; - factorNames += "\"" + factor.getName() + "\""; - } - - engine.voidEval(String.format(isisFactorDistribution, factorNames, - distribution, parameters)); - engine.voidEval("call<-a$call"); engine.voidEval("isis.MethodExp<-list(" +