Author: jcouteau Date: 2009-04-17 09:51:03 +0000 (Fri, 17 Apr 2009) New Revision: 109 Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java trunk/sensitivity/SensitivityCalculatorRFast.java trunk/sensitivity/SensitivityCalculatorRFrF2.java trunk/sensitivity/SensitivityCalculatorRMorris.java trunk/sensitivity/SensitivityCalculatorROptimumLHS.java trunk/sensitivity/SensitivityCalculatorRRandomLHS.java trunk/sensitivity/SensitivityCalculatorRSobol.java Log: Adapt to isis-fish sensitivity refactoring Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-17 09:51:03 UTC (rev 109) @@ -19,7 +19,6 @@ package sensitivity; import java.io.File; -import java.io.Serializable; import java.util.List; import org.apache.commons.logging.Log; @@ -32,7 +31,7 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -49,8 +48,8 @@ * */ @Doc("ExpandGrid") -public class SensitivityCalculatorJavaExpandGrid implements - SensitivityCalculator { +public class SensitivityCalculatorJavaExpandGrid extends + AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory @@ -71,21 +70,21 @@ 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 + List<Factor> factors = plan.getFactors(); //list of factors for (int i = 0; i < factorNumber; i++) { if (factors.get(i).getDomain() instanceof ContinuousDomain) { - if (((ContinuousDomain<? extends Serializable>) factors.get(i) + if (((ContinuousDomain) factors.get(i) .getDomain()).getCardinality() != 0) { k = k - * ((ContinuousDomain<? extends Serializable>) factors + * ((ContinuousDomain) factors .get(i).getDomain()).getCardinality(); } } else if (factors.get(i).getDomain() instanceof DiscreteDomain) { - if (((DiscreteDomain<? extends Serializable>) factors.get(i) + if (((DiscreteDomain) factors.get(i) .getDomain()).getValues().size() != 0) { k = k - * ((DiscreteDomain<? extends Serializable>) factors + * ((DiscreteDomain) factors .get(i).getDomain()).getValues().size(); } } @@ -99,13 +98,13 @@ int rest = i; //used for the euclidian division Scenario experimentScenario = new Scenario(); for (int j = 0; j < factorNumber; j++) { - Factor<? extends Serializable> factor = factors.get(j); + Factor factor = factors.get(j); if (factor.getDomain() instanceof ContinuousDomain) { - Double max = ((ContinuousDomain<Double>) factor.getDomain()) + Double max = ((ContinuousDomain) factor.getDomain()) .getMaxBound(); - Double min = ((ContinuousDomain<Double>) factor.getDomain()) + Double min = ((ContinuousDomain) factor.getDomain()) .getMinBound(); - int card = ((ContinuousDomain<? extends Serializable>) factor + int card = ((ContinuousDomain) factor .getDomain()).getCardinality(); result = (int) Math.floor(rest / card); rest = rest - (card * result); @@ -119,7 +118,7 @@ } } if (factor.getDomain() instanceof DiscreteDomain) { - int card = ((DiscreteDomain<? extends Serializable>) factor + int card = ((DiscreteDomain) factor .getDomain()).getValues().size(); result = (int) Math.floor(rest / card); rest = rest - (card * result); @@ -144,7 +143,7 @@ try { //Create the factors vectors for (int j = 0; j < factorNumber; j++) { - Factor<? extends Serializable> factor = thisExperimentScenarios + Factor factor = thisExperimentScenarios .get(0).getFactors().get(j); if (factor.getDomain() instanceof EquationContinuousDomain) { @@ -152,12 +151,12 @@ for (int i = 0; i < scenariosNumber; i++) { if (i < (scenariosNumber - 1)) { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } @@ -171,12 +170,12 @@ for (int i = 0; i < scenariosNumber; i++) { if (i < (scenariosNumber - 1)) { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } Modified: trunk/sensitivity/SensitivityCalculatorRFast.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRFast.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorRFast.java 2009-04-17 09:51:03 UTC (rev 109) @@ -38,6 +38,8 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; @@ -55,7 +57,7 @@ * $Author: jcouteau $ */ -public class SensitivityCalculatorRFast implements SensitivityCalculator { +public class SensitivityCalculatorRFast extends AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory @@ -92,7 +94,7 @@ double[] dataframe = new double[0]; int nbExperiments = 0; int factorNumber = plan.getFactors().size(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); @@ -186,17 +188,17 @@ for (int j = 0; j < nbExperiments; j++) { Scenario experimentScenario = new Scenario(); for (int i = 0; i < factorNumber; i++) { - Factor<? extends Serializable> factor = plan.getFactors() + Factor factor = plan.getFactors() .get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { factor.setValueForIdentifier(Double.valueOf( fast.getValue(new int[] { i, j })).toString()); } else { - Double value = (Double) ((ContinuousDomain<?>) factor + Double value = (Double) ((ContinuousDomain) factor .getDomain()).getMinBound() - + ((Double) ((ContinuousDomain<?>) factor - .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor + + ((Double) ((ContinuousDomain) factor + .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor .getDomain()).getMinBound()) * fast.getValue(new int[] { i, j }); factor.setValueForIdentifier(value); Modified: trunk/sensitivity/SensitivityCalculatorRFrF2.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRFrF2.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorRFrF2.java 2009-04-17 09:51:03 UTC (rev 109) @@ -38,6 +38,8 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; @@ -55,7 +57,7 @@ * $Author: chatellier $ */ @Doc("FrF2 method, at least 4 factors need to be declared") -public class SensitivityCalculatorRFrF2 implements SensitivityCalculator { +public class SensitivityCalculatorRFrF2 extends AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory @@ -79,7 +81,7 @@ double[] dataframe = new double[0]; int nbExperiments = 0; int factorNumber = plan.getFactors().size(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); @@ -161,7 +163,7 @@ for (int j = 0; j < nbExperiments; j++) { Scenario experimentScenario = new Scenario(); for (int i = 0; i < factorNumber; i++) { - Factor<? extends Serializable> factor = plan.getFactors() + Factor factor = plan.getFactors() .get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { @@ -177,13 +179,13 @@ } else { if (frf2.getValue(new int[] { i, j }) == -1) { factor - .setValueForIdentifier(((ContinuousDomain<?>) factor + .setValueForIdentifier(((ContinuousDomain) factor .getDomain()).getMinBound()); } if (frf2.getValue(new int[] { i, j }) == 1) { factor - .setValueForIdentifier(((ContinuousDomain<?>) factor + .setValueForIdentifier(((ContinuousDomain) factor .getDomain()).getMaxBound()); } } @@ -195,7 +197,7 @@ try { //Create the factors vectors for (int j = 0; j < factorNumber; j++) { - Factor<? extends Serializable> factor = thisExperimentScenarios + Factor factor = thisExperimentScenarios .get(0).getFactors().get(j); if (factor.getDomain() instanceof EquationContinuousDomain) { @@ -203,12 +205,12 @@ for (int i = 0; i < nbExperiments; i++) { if (i < (nbExperiments - 1)) { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } @@ -222,12 +224,12 @@ for (int i = 0; i < nbExperiments; i++) { if (i < (nbExperiments - 1)) { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-17 09:51:03 UTC (rev 109) @@ -22,6 +22,12 @@ import java.io.Serializable; import java.util.List; +import javax.swing.Box; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.j2r.REngine; @@ -33,10 +39,12 @@ import fr.ifremer.isisfish.datastore.SimulationStorage; 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.SensitivityCalculator; +import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; @@ -54,11 +62,14 @@ * $Author$ */ @Doc("Morris method") -public class SensitivityCalculatorRMorris implements SensitivityCalculator { +public class SensitivityCalculatorRMorris extends AbstractSensitivityCalculator { @Doc("Integer giving the number of repetitions of the design, i.e. the number of elementary effect computed per factor. (Default value : 4)") - public int param_r; + public int param_r = 4; + @Doc("True to be able to modify the code sent to R") + public boolean param_modifR = false; + /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory .getLog(SensitivityCalculatorRMorris.class); @@ -74,174 +85,102 @@ } public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) { + + setIsisFactorsR(plan,outputdirectory); double[] dataframe = new double[0]; int nbExperiments = 0; int factorNumber = plan.getFactors().size(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); - if (((Integer) param_r == null) || ((Integer) param_r == 0)) { + if (param_r == 0) { param_r = 4; } //Test all factors, if one is discrete, return null for (int i = 0; i < factorNumber; i++) { if (factors.get(i).getDomain() instanceof DiscreteDomain) { + JOptionPane + .showMessageDialog( + null, + "Error", + factors.get(i).getName() + + " has a discrete domain, this is not acceptable for this method.", + JOptionPane.ERROR_MESSAGE); return null; } } - String rInstruction = "a<-morris(model=NULL,factors=c("; - - // Creating the factors vector. + // Creating the vectors. + String factorNames = ""; + String levels = ""; + String gridJump = ""; + String binf = ""; + String bsup = ""; for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" + factors.get(i).getName() - + "\","; - } else { - rInstruction = rInstruction + "\"" + factors.get(i).getName() - + "\""; + Domain domain = factors.get(i).getDomain(); + if (i != 0) { + factorNames += ","; + levels += ","; + gridJump += ","; + binf += ","; + bsup += ","; } - } - // Adding the number of repetition parameter (r), the morris type - // (type="oat") and the level vector - rInstruction = rInstruction + "),r=" + param_r - + ",design=list(type=\"oat\",levels=c("; + factorNames += "\"" + factors.get(i).getName() + "\""; - // 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 - + ((ContinuousDomain<? extends Serializable>) domain) - .getCardinality() + ","; - } - } else { - if (domain instanceof DiscreteDomain) { - rInstruction = rInstruction - + ((DiscreteDomain<? extends Serializable>) domain) - .getValues().size(); - } else if (domain instanceof ContinuousDomain) { - rInstruction = rInstruction - + ((ContinuousDomain<? extends Serializable>) domain) - .getCardinality(); - } - } - } + levels += ((ContinuousDomain) domain) + .getCardinality(); - // Adding the grid.jump parameter - rInstruction = rInstruction + "),grid.jump=c("; + gridJump += (Integer) (((ContinuousDomain) domain) + .getCardinality() / 2); - // Creating the grid.jump 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 - + (Integer) (((DiscreteDomain<? extends Serializable>) domain) - .getValues().size() / 2) + ","; - } else if (domain instanceof ContinuousDomain) { - rInstruction = rInstruction - + (Integer) (((ContinuousDomain<? extends Serializable>) domain) - .getCardinality() / 2) + ","; - } - } else { - if (domain instanceof DiscreteDomain) { - rInstruction = rInstruction - + (Integer) (((DiscreteDomain<? extends Serializable>) domain) - .getValues().size() / 2); - } else if (domain instanceof ContinuousDomain) { - rInstruction = rInstruction - + (Integer) (((ContinuousDomain<? extends Serializable>) domain) - .getCardinality() / 2); - } - } + binf += ((ContinuousDomain) domain) + .getMinBound(); + + bsup += ((ContinuousDomain) domain) + .getMaxBound(); } - rInstruction += ")),binf=c("; + String rInstruction = "a<-morris(model=NULL,factors=c(%s),r=%s,design=list(type=\"oat\",levels=c(%s),grid.jump=c(%s)),binf=c(%s),bsup=c(%s))"; - // 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(); - } - } - } + String rCall = String.format(rInstruction, factorNames, param_r, + levels, gridJump, binf, bsup); - // 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(); - } - } + if (param_modifR) { + JLabel label = new JLabel( + "Modifier le code R envoyé si vous le souhaitez"); + JTextPane text = new JTextPane(); + text.setText(rCall); + text.setSize(400, 400); + text.setPreferredSize(text.getSize()); + + Box box = Box.createVerticalBox(); + box.add(label); + box.add(new JScrollPane(text)); + + JOptionPane.showMessageDialog(null, box, "R modif", + JOptionPane.QUESTION_MESSAGE); + rCall = text.getText(); } - rInstruction = rInstruction + "))"; REngine engine = new RProxy(); try { // Load sensitivity package into R (if package already loaded, // nothing happens. engine.voidEval("library(sensitivity)"); - log.info("Message sent to R" + "library(sensitivity)"); + log.info("Message sent to R : " + "library(sensitivity)"); // Run sensitivity analysis engine.voidEval(rInstruction); - log.info("Message sent to R" + rInstruction); + log.info("Message sent to R : " + rCall); // Creating the factors vector. - rInstruction = "factornames<-c("; - for (int i = 0; i < factorNumber; i++) { - if (i != (factorNumber - 1)) { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\","; - } else { - rInstruction = rInstruction + "\"" - + factors.get(i).getName() + "\""; - } - } + rInstruction = "factornames<-c(%s)"; + rCall = String.format(rInstruction, factorNames); - rInstruction += ")"; - engine.voidEval(rInstruction); - log.info("Message sent to R" + rInstruction); + engine.voidEval(rCall); + log.info("Message sent to R" + rCall); // Set output directory engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() @@ -268,8 +207,9 @@ nbExperiments = dataframe.length / factorNumber; - } catch (RException e) { - e.printStackTrace(); + } catch (RException eee) { + eee.printStackTrace(); + throw new RuntimeException("R evaluation failed", eee); // Error while retrieving scenario } @@ -283,11 +223,10 @@ 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 factor = factors.get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { - factor.setValueForIdentifier(Double.valueOf( - morris.getValue(new int[] { i, j })).toString()); + factor.setValueForIdentifier((Double)morris.getValue(i, j)); } else { factor.setValueForIdentifier(morris.getValue(new int[] { i, j })); Modified: trunk/sensitivity/SensitivityCalculatorROptimumLHS.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorROptimumLHS.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorROptimumLHS.java 2009-04-17 09:51:03 UTC (rev 109) @@ -35,6 +35,7 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -42,7 +43,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.util.Doc; -/** +/**save.image() * Implementation of Optimum Latin Hypercube method using R. * * @author jcouteau @@ -50,7 +51,7 @@ * */ @Doc("Optimum Latin Hypercube") -public class SensitivityCalculatorROptimumLHS implements SensitivityCalculator { +public class SensitivityCalculatorROptimumLHS extends AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory @@ -77,7 +78,7 @@ throws SensitivityException { int factornumber = plan.getFactors().size(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); double[] dataframe = new double[0]; SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); @@ -121,7 +122,7 @@ for (int j = 0; j < param_simulationNumber; j++) { Scenario experimentScenario = new Scenario(); for (int i = 0; i < factornumber; i++) { - Factor<? extends Serializable> factor = plan.getFactors() + Factor factor = plan.getFactors() .get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { @@ -130,10 +131,10 @@ morris.getValue(new int[] { i, j })) .toString()); } else { - Double value = (Double) ((ContinuousDomain<?>) factor + Double value = (Double) ((ContinuousDomain) factor .getDomain()).getMinBound() - + ((Double) ((ContinuousDomain<?>) factor - .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor + + ((Double) ((ContinuousDomain) factor + .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor .getDomain()).getMinBound()) * morris.getValue(new int[] { i, j }); factor.setValueForIdentifier(value); @@ -146,7 +147,7 @@ //Create the factors vectors for (int j = 0; j < factornumber; j++) { - Factor<? extends Serializable> factor = thisExperimentScenarios + Factor factor = thisExperimentScenarios .get(0).getFactors().get(j); if (factor.getDomain() instanceof EquationContinuousDomain) { @@ -154,12 +155,12 @@ for (int i = 0; i < param_simulationNumber; i++) { if (i < (param_simulationNumber - 1)) { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } @@ -173,12 +174,12 @@ for (int i = 0; i < param_simulationNumber; i++) { if (i < (param_simulationNumber - 1)) { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } Modified: trunk/sensitivity/SensitivityCalculatorRRandomLHS.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRRandomLHS.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorRRandomLHS.java 2009-04-17 09:51:03 UTC (rev 109) @@ -35,6 +35,7 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -50,7 +51,7 @@ * */ @Doc("Random Latin Hypercube") -public class SensitivityCalculatorRRandomLHS implements SensitivityCalculator { +public class SensitivityCalculatorRRandomLHS extends AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory @@ -76,7 +77,7 @@ double[] dataframe = new double[0]; SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); if ((Integer) param_simulationNumber == 0) { param_simulationNumber = 10; @@ -107,7 +108,7 @@ for (int j = 0; j < param_simulationNumber; j++) { Scenario experimentScenario = new Scenario(); for (int i = 0; i < factornumber; i++) { - Factor<? extends Serializable> factor = plan.getFactors() + Factor factor = plan.getFactors() .get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { @@ -116,10 +117,10 @@ morris.getValue(new int[] { i, j })) .toString()); } else { - Double value = (Double) ((ContinuousDomain<?>) factor + Double value = (Double) ((ContinuousDomain) factor .getDomain()).getMinBound() - + ((Double) ((ContinuousDomain<?>) factor - .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor + + ((Double) ((ContinuousDomain) factor + .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor .getDomain()).getMinBound()) * morris.getValue(new int[] { i, j }); factor.setValueForIdentifier(value); @@ -132,7 +133,7 @@ //Create the factors vectors for (int j = 0; j < factornumber; j++) { - Factor<? extends Serializable> factor = thisExperimentScenarios + Factor factor = thisExperimentScenarios .get(0).getFactors().get(j); if (factor.getDomain() instanceof EquationContinuousDomain) { @@ -140,12 +141,12 @@ for (int i = 0; i < param_simulationNumber; i++) { if (i < (param_simulationNumber - 1)) { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((EquationContinuousDomain<?>) thisExperimentScenarios + + ((EquationContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } @@ -159,12 +160,12 @@ for (int i = 0; i < param_simulationNumber; i++) { if (i < (param_simulationNumber - 1)) { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue() + ","; } else { vector = vector - + ((MatrixContinuousDomain<?>) thisExperimentScenarios + + ((MatrixContinuousDomain) thisExperimentScenarios .get(i).getFactors().get(j) .getDomain()).getValue(); } Modified: trunk/sensitivity/SensitivityCalculatorRSobol.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRSobol.java 2009-04-16 13:25:07 UTC (rev 108) +++ trunk/sensitivity/SensitivityCalculatorRSobol.java 2009-04-17 09:51:03 UTC (rev 109) @@ -37,6 +37,7 @@ 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.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; @@ -54,7 +55,7 @@ * $Author: jcouteau $ */ -public class SensitivityCalculatorRSobol implements SensitivityCalculator { +public class SensitivityCalculatorRSobol extends AbstractSensitivityCalculator { /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory @@ -84,7 +85,7 @@ double[] dataframe = new double[0]; int nbExperiments = 0; int factorNumber = plan.getFactors().size(); - List<Factor<? extends Serializable>> factors = plan.getFactors(); + List<Factor> factors = plan.getFactors(); SensitivityScenarios thisExperiment = new SensitivityScenarios(); List<Scenario> thisExperimentScenarios = thisExperiment.getScenarios(); @@ -188,17 +189,17 @@ for (int j = 0; j < nbExperiments; j++) { Scenario experimentScenario = new Scenario(); for (int i = 0; i < factorNumber; i++) { - Factor<? extends Serializable> factor = plan.getFactors() + Factor factor = plan.getFactors() .get(i); if ((factor.getDomain() instanceof MatrixContinuousDomain) || (factor.getDomain() instanceof EquationContinuousDomain)) { factor.setValueForIdentifier(Double.valueOf( fast.getValue(new int[] { i, j })).toString()); } else { - Double value = (Double) ((ContinuousDomain<?>) factor + Double value = (Double) ((ContinuousDomain) factor .getDomain()).getMinBound() - + ((Double) ((ContinuousDomain<?>) factor - .getDomain()).getMaxBound() - (Double) ((ContinuousDomain<?>) factor + + ((Double) ((ContinuousDomain) factor + .getDomain()).getMaxBound() - (Double) ((ContinuousDomain) factor .getDomain()).getMinBound()) * fast.getValue(new int[] { i, j }); factor.setValueForIdentifier(value); @@ -360,7 +361,7 @@ } public String getDescription() { - return "Implementation of FAST method using R"; + return "Implementation of Sobol method using R"; } }
participants (1)
-
jcouteau@users.labs.libre-entreprise.org