Author: echatellier Date: 2014-04-04 18:47:29 +0200 (Fri, 04 Apr 2014) New Revision: 3934 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3934 Log: refs #4803: Relecture des exports pour appel de la fonction d'evaluation de l'objectif Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2014-04-04 16:09:12 UTC (rev 3933) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/OptimizationPrepareJob.java 2014-04-04 16:47:29 UTC (rev 3934) @@ -1,27 +1,26 @@ package fr.ifremer.isisfish.simulator.launcher; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.math.matrix.MatrixND; + import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.entities.Observation; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.simulator.Objective; import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.OptimizationContext; import fr.ifremer.isisfish.simulator.SimulationControl; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.launcher.SimulationItem; -import fr.ifremer.isisfish.simulator.launcher.SimulationJob; -import fr.ifremer.isisfish.simulator.launcher.SimulationService; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.io.FileUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.i18n.I18n; -import org.nuiton.util.FileUtil; /** * Permet de generer l'enchainement des simulations d'optimisation. @@ -126,14 +125,45 @@ } throw new IsisFishRuntimeException(I18n._("isisfish.error.evaluate.optimization.script"), eee); } - } @Override public void finished(SimulationJob job, SimulationStorage sim) { if (objective != null) { + + // appel de la methode d'objectif try { - double obj = objective.eval(optimizationContext, null, null); // FIXME mettre les bons arguments + List<MatrixND> exports = new ArrayList<>(); + List<MatrixND> observations = new ArrayList<>(); + + // recuperation des exports et observations + Map<Export, Observation> exportsObservations = sim.getParameter().getOptimizationExportsObservations(); + for (Map.Entry<Export, Observation> exportObservation : exportsObservations.entrySet()) { + Export export = exportObservation.getKey(); + Observation observation = exportObservation.getValue(); + + File rootDirectory = sim.getDirectory(); + File resultExportDirectory = SimulationStorage.getResultExportDirectory(rootDirectory); + String fullFilename = export.getExportFilename() + export.getExtensionFilename(); + File exportFile = new File(resultExportDirectory, fullFilename); + + // read matrix file + MatrixND exportMatrix = null; + if (observation.getValue() != null) { + + // on fait ici un clone, car on ne connait pas les dimensions de la + // matrix à importer; cela n'a peut être aucun sens. + exportMatrix = observation.getValue().clone(); + + // import + exportMatrix.importCSV(exportFile, new int[] {0, 0}); + } + + exports.add(exportMatrix); + observations.add(observation.getValue()); + } + + double obj = objective.eval(optimizationContext, exports, observations); sim.setObjective(obj); } catch (IOException eee) { throw new IsisFishRuntimeException("Can't evaluate objective", eee);