r4163 - in trunk/src/main: java/fr/ifremer/isisfish/simulator resources/i18n
Author: bpoussin Date: 2014-12-17 15:35:57 +0000 (Wed, 17 Dec 2014) New Revision: 4163 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4163 Log: add generation and individual info in parameter for optimization Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java trunk/src/main/resources/i18n/isis-fish_en_GB.properties trunk/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/Historic.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -2,11 +2,16 @@ import fr.ifremer.isisfish.datastore.SimulationStorage; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixFactory; +import org.nuiton.math.matrix.MatrixIterator; +import org.nuiton.math.matrix.MatrixND; /** * Useful class to stock some double value for simulation, and export all @@ -23,29 +28,85 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(Historic.class); - Map<String, Experience> experiences = new LinkedHashMap<String, Experience>(); + + protected String id; + protected Map<Integer, Experience> experiences = new LinkedHashMap<Integer, Experience>(); + + public Historic(String id) { + this.id = id; + } + public Experience get(SimulationStorage sim) { - Experience result = experiences.get(sim.getName()); + int simNumber = sim.getParameter().getSimulationPlanNumber(); + Experience result = experiences.get(simNumber); if (result == null) { result = new Experience(); - experiences.put(sim.getName(), result); + experiences.put(simNumber, result); + result.set("SimulationNumnber", simNumber); + result.set("Generation", sim.getParameter().getOptimizationGeneration()); + result.set("Individual", sim.getParameter().getOptimizationGenerationIndividual()); } return result; } + public MatrixND toMatrix(String ... fieldNames) { + List semVar = new ArrayList(); + semVar.add("Generation"); + semVar.add("Individual"); + for (String f : fieldNames) { + semVar.add(f); + } + + List semExp = new ArrayList(); + for (Experience e : experiences.values()) { + semExp.add(e.get("SimulationNumnber")); + } + + List[] sems = new List[2]; + sems[0] = semExp; + sems[1] = semVar; + + String[] dimNames = new String[]{"Experience", "Variables"}; + + MatrixND result = MatrixFactory.getInstance().create(id, sems, dimNames); + + for (MatrixIterator i = result.iterator(); i.hasNext();) { + i.next(); + Object[] s = i.getSemanticsCoordinates(); + Object exp = s[0]; + String var = (String)s[1]; + + Double v = experiences.get(exp).get(var); + if (v != null) { + i.setValue(v); + } + } + + return result; + } + public String toCSV(String ... fieldNames) { StringBuilder result = new StringBuilder(); String sep = ";"; - result.append("simulation"); + result.append("SimulationNumber"); + result.append(sep); + result.append("Generation"); + result.append(sep); + result.append("Individual"); for (String field: fieldNames) { result.append(sep).append(field); } - for (Map.Entry<String, Experience> e: experiences.entrySet()) { + for (Map.Entry<Integer, Experience> e: experiences.entrySet()) { + Experience exp = e.getValue(); result.append(e.getKey()); - Experience exp = e.getValue(); + result.append(sep); + result.append(exp.get("Generation")); + result.append(sep); + result.append(exp.get("Individual")); + for (String field : fieldNames) { result.append(sep); Double value = exp.get(field); @@ -60,7 +121,7 @@ return result.toString(); } - private static class Experience { + public static class Experience { Map<String, Double> values = new HashMap<String, Double>(); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/OptimizationContextInternal.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -100,7 +100,10 @@ String simId = id + "_" + number; SimulationParameter childParam = param.copy(); childParam.setSimulationPlanNumber(number); + childParam.setOptimizationGeneration(generations.size()); + childParam.setOptimizationGenerationIndividual(nextSimulations.size()); SimulationStorage result = SimulationStorage.importAndRenameZip(job.getItem().getSimulationZip(), simId); + result.setParameter(childParam); incNumber(); addSimulation(result); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -391,6 +391,26 @@ public void setOptimizationExportsObservations(Map<Export, Observation> exportsObservations); /** + * If this simulation is generated by Optimization, return generation number + */ + public int getOptimizationGeneration(); + + /** + * If this simulation is generated by Optimization, set generation number + */ + public void setOptimizationGeneration(int optimizationGeneration); + + /** + * If this simulation is generated by Optimization, return individual number in generation + */ + public int getOptimizationGenerationIndividual(); + + /** + * If this simulation is generated by Optimization, set individual number in generation + */ + public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual); + + /** * Get use simulation plans property. * * @return use simulation plan. Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterCache.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -516,6 +516,38 @@ } @Override + public int getOptimizationGeneration() { + SimulationParameter param = getParam(); + return param.getOptimizationGeneration(); + } + + /* + * @see fr.ifremer.isisfish.simulator.SimulationParameter#setSimulationPlanNumber(int) + */ + @Override + public void setOptimizationGeneration(int optimizationGeneration) { + SimulationParameter param = getParam(); + param.setOptimizationGeneration(optimizationGeneration); + store(param); + } + + @Override + public int getOptimizationGenerationIndividual() { + SimulationParameter param = getParam(); + return param.getOptimizationGenerationIndividual(); + } + + /* + * @see fr.ifremer.isisfish.simulator.SimulationParameter#setSimulationPlanNumber(int) + */ + @Override + public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual) { + SimulationParameter param = getParam(); + param.setOptimizationGenerationIndividual(optimizationGenerationIndividual); + store(param); + } + + @Override public boolean isSensitivityAnalysisOnlyKeepFirst() { SimulationParameter param = getParam(); return param.isSensitivityAnalysisOnlyKeepFirst(); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -199,6 +199,12 @@ /** Exports et observations (optimisation). */ protected Map<Export, Observation> optimizationExportsObservations; + /** If this simulation is generated by Optimization, generation number */ + protected Integer optimizationGeneration; + + /** If this simulation is generated by Optimization, individual number in generation */ + protected Integer optimizationGenerationIndividual; + /** La liste des resultats qui nous interesse. */ protected Collection<String> resultEnabled; @@ -1104,7 +1110,60 @@ this.simulationPlanNumber = simulationPlanNumber; } + /** + * If this simulation is generated by Optimization, return generation number + */ @Override + public int getOptimizationGeneration() { + + if (optimizationGeneration == null) { + + if (propertiesParameters != null) { + optimizationGeneration = SimulationParameterPropertiesHelper.getOptimizationGeneration(propertiesParameters); + } else { + optimizationGeneration = -1; + } + } + + return optimizationGeneration; + } + + /** + * If this simulation is generated by Optimization, set generation number + */ + @Override + public void setOptimizationGeneration(int optimizationGeneration) { + this.optimizationGeneration = optimizationGeneration; + } + + /** + * If this simulation is generated by Optimization, return individual number in generation + */ + @Override + public int getOptimizationGenerationIndividual() { + + if (optimizationGenerationIndividual == null) { + + if (propertiesParameters != null) { + optimizationGenerationIndividual = SimulationParameterPropertiesHelper.getOptimizationGenerationIndividual(propertiesParameters); + } else { + optimizationGenerationIndividual = -1; + } + } + + return optimizationGenerationIndividual; + } + + /** + * If this simulation is generated by Optimization, set individual number in generation + */ + @Override + public void setOptimizationGenerationIndividual(int optimizationGenerationIndividual) { + this.optimizationGenerationIndividual = optimizationGenerationIndividual; + } + + + @Override public boolean isSensitivityAnalysisOnlyKeepFirst() { if (sensitivityAnalysisOnlyKeepFirst == null) { @@ -1569,6 +1628,8 @@ result.generatedPreScript = getGeneratedPreScript(); result.useSimulationPlan = getUseSimulationPlan(); result.simulationPlanNumber = getSimulationPlanNumber(); + result.optimizationGeneration = getOptimizationGeneration(); + result.optimizationGenerationIndividual = getOptimizationGenerationIndividual(); if (exportNames != null) { result.exportNames = new LinkedList<String>(exportNames); } @@ -1895,6 +1956,10 @@ String.valueOf(getSimulationPlanNumber())); result.setProperty(SimulationParameterPropertiesHelper.USE_OPTIMIZATION_KEY, String.valueOf(getUseOptimization())); + result.setProperty(SimulationParameterPropertiesHelper.OPTIMIZATION_GENERATION_KEY, + String.valueOf(getOptimizationGeneration())); + result.setProperty(SimulationParameterPropertiesHelper.OPTIMIZATION_GENERATION_INDIVIDUAL_KEY, + String.valueOf(getOptimizationGenerationIndividual())); String resultList = StringUtils.join(getResultEnabled(), SimulationParameterPropertiesHelper.LIST_SEPARATOR); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -72,6 +72,8 @@ final public static String SIMULATION_PLAN_NUMBER_KEY = "simulationPlanNumber"; final public static String USE_OPTIMIZATION_KEY = "useOptimization"; final public static String OPTIMIZATION_KEY = "optimization"; + final public static String OPTIMIZATION_GENERATION_KEY = "optimizationGeneration"; + final public static String OPTIMIZATION_GENERATION_INDIVIDUAL_KEY = "optimizationGenerationIndividual"; final public static String OBJECTIVE_KEY = "objective"; final public static String OPTIMIZATION_EXPORTS_KEY = "optimizationexports"; final public static String OPTIMIZATION_OBSERVATION_KEY = "optimizationobservation"; @@ -122,7 +124,17 @@ return result; } - public static boolean getUseCache(Properties prop) { + public static int getOptimizationGeneration(Properties prop) { + int result = Integer.valueOf(prop.getProperty(OPTIMIZATION_GENERATION_KEY, "-1")); + return result; + } + + public static int getOptimizationGenerationIndividual(Properties prop) { + int result = Integer.valueOf(prop.getProperty(OPTIMIZATION_GENERATION_INDIVIDUAL_KEY, "-1")); + return result; + } + + public static boolean getUseCache(Properties prop) { boolean result; if (VersionUtil.smallerThan(getIsisFishVersion(prop), "4.3.0.0")) { result = Boolean.valueOf(prop.getProperty(USE_OPTIMIZATION_KEY, "true")); @@ -429,6 +441,12 @@ result.append(t("isisfish.params.toString.use.optimization", useOptimization)); + result.append(" ").append(t("isisfish.params.toString.optimization.generation", + getOptimizationGeneration(prop))); + result.append(" ").append(t("isisfish.params.toString.optimization.generation.individual", + getOptimizationGenerationIndividual(prop))); + result.append("\n"); + String objective = getObjectiveName(prop); if (StringUtils.isNotBlank(objective)) { result.append(t("isisfish.params.toString.objective", objective)); Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationPlanContextInternal.java 2014-12-17 15:35:57 UTC (rev 4163) @@ -52,7 +52,7 @@ /** Simulation parameters. */ protected SimulationParameter param; - protected Historic historic = new Historic(); + protected Historic historic; /** Additional context values. */ protected Map<String, Object> values = new HashMap<String, Object>(); @@ -60,6 +60,7 @@ public SimulationPlanContextInternal(String id, SimulationParameter param) { this.id = id; this.param = param; + this.historic = new Historic(id); } /** Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-12-17 15:35:57 UTC (rev 4163) @@ -701,6 +701,8 @@ isisfish.params.toString.number.years=Number of years\: %1$s isisfish.params.toString.objective=Objective function \: %s isisfish.params.toString.optimization=Optimization methode \: %s +isisfish.params.toString.optimization.generation=Generation\: %s +isisfish.params.toString.optimization.generation.individual=Individual\: %s isisfish.params.toString.optimizationExport=Optimization export \: %s isisfish.params.toString.optimizationObservation=Optimization observation \: %s isisfish.params.toString.plan=Plan\: %1$s Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-16 15:50:21 UTC (rev 4162) +++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-12-17 15:35:57 UTC (rev 4163) @@ -699,6 +699,8 @@ isisfish.params.toString.number.months=Nombre de mois \: %s isisfish.params.toString.objective=Fonction d'objectif \: %s isisfish.params.toString.optimization=Méthode d'optimisation \: %s +isisfish.params.toString.optimization.generation=Génération\: %s +isisfish.params.toString.optimization.generation.individual=Individu\: %s isisfish.params.toString.optimizationExport=Export d'optimisation \: %s isisfish.params.toString.optimizationObservation=Observation d'optimisation \: %s isisfish.params.toString.plan=Plan\: %s
participants (1)
-
bpoussin@users.forge.codelutin.com