voici le plan. j ai des simus en cours je t envois le debug des que possible. Merci Eric Chatellier a écrit :
Le 16/06/2010 16:26, Sigrid LEHUTA a écrit :
La chance !!
Il se passe quoi exactement ? La valeur par defaut apparait dans l'interface ?
oui !
Cette valeur est non éditable ?
c est ca pas editable
Tu peux m'envoyer le debug.txt s'il y a des erreur dedans ? Voire également ton plan.
Merci
-- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 23 (interne : 8123) package analyseplans; import static org.nuiton.i18n.I18n._; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import scripts.ResultName; import java.io.*; import java.util.*; import org.nuiton.math.matrix.*; import org.nuiton.topia.*;// pour pouvoir utiliser la methode StringUtil.toDouble() import org.nuiton.util.*;// pour pouvoir utiliser la methode StringUtil.toDouble() import fr.ifremer.isisfish.*; import fr.ifremer.isisfish.types.*; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.Date; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.simulator.AnalysePlan; import fr.ifremer.isisfish.simulator.AnalysePlanContext; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.ResultStorage; /** * CalibrationAnchoisq1q2Export.java * * Created: 07/06/10 * * @author <> * @version $Revision: 3.2 $ * * Last update: $Date: 2007/05/24 09:29:18 $ * by : $Author: bpoussin $ */ public class Calibrationq0_pelagique implements AnalysePlan { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(Calibrationq0_pelagique.class); public String param_nomFileHisto = "Inputs_Anchois/CalibrationSardine/histo.csv"; //public String param_nomFileHisto = "Inputs_Anchois/CalibrationThon/histo.csv"; //public String param_nomFileHisto = "Inputs_Anchois/CalibrationBar/histoManche.csv"; //public String param_nomFileHisto = "Inputs_Anchois/CalibrationBar/histoGdG.csv"; File exportHistoric = new File (param_nomFileHisto); protected String exportHisto = ""; //parametres de la simu 5 points initiaux d un simplex d ordre 2 public Population param_Population = null; public Double param_M1 = 1.0e-4;// devient un parametre du plan d analyse public Double param_M2 = 1.2e-4;// devient un parametre du plan d analyse public Double param_M3 = 1.4e-4;// devient un parametre du plan d analyse public Double param_M4 = 1.6e-4;// devient un parametre du plan d analyse public Double param_M5 = 1.8e-4;// devient un parametre du plan d analyse public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationSardine/DebarquementsSardine.csv";//nom + chemin du fichier contenant les debarquements observes par mois et strategie //public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationThon/DebarquementsThon.csv";//nom + chemin du fichier contenant les debarquements observes par mois et strategie //public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationBar/DebarquementsBarManche.csv"; //public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationBar/DebarquementsBarGdg.csv"; protected File debarquementsObserves; protected MatrixND matrixDebarquement; protected String[] strNomsNous; protected List<Strategy> strNous; protected List<Double> q; protected List<Double> Fobj = new ArrayList<Double>(); public String [] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP, }; public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur le plan. * @return L'aide ou la description du plan */ public String getDescription() throws Exception { return _("Single Factor Optimization Walters et al"); } /** * Appele au demarrage de la simulation, cette methode permet d'initialiser * des valeurs * @param simulation La simulation pour lequel on utilise cette regle */ public void init(AnalysePlanContext context) throws Exception { if (param_nomfichier_debarquements==null || "".equals(param_nomfichier_debarquements)){ debarquementsObserves = FileUtil.getFile(".*.csv", "fichier csv"); } else { debarquementsObserves = new File(param_nomfichier_debarquements); } q = new ArrayList<Double>(); q.add(param_M1); q.add(param_M2); q.add(param_M3); q.add(param_M4); q.add(param_M5); int nbYear = context.getParam().getNumberOfYear(); List<Strategy> allStrategies = context.getParam().getStrategies(); strNomsNous = new String[]{"PelProfil1","PelProfil2","BolBasques","BolBretons"}; //strNomsNous = new String[]{"PelProfil1","PelProfil2"}; strNous = new ArrayList<Strategy>(); for(String strNomCurrent : strNomsNous){ for (Strategy s : allStrategies){ if(s.getName().equals(strNomCurrent)){ strNous.add(s); } } } int dateFin = nbYear*12; List<Date> dates = new ArrayList<Date>(); for(int i=0; i<dateFin;i++){ dates.add(new Date(i)); } TopiaContext db = context.getParam().getRegion().getStorage().beginTransaction(); Population pop = (Population)db.findByTopiaId(param_Population.getTopiaId()); matrixDebarquement = MatrixFactory.getInstance().create( "matDebarq", new List[]{dates,strNous}, new String[]{"Dates","strategies"}); matrixDebarquement.importCSV(new FileReader(debarquementsObserves),new int []{0,0}); log.info("MatrixDebarquement : "+ matrixDebarquement); db.closeContext(); } /** * Call before each simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean beforeSimulation(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { boolean doNext = true; int number = nextSimulation.getParameter().getAnalysePlanNumber(); log.info("before simulation" + number); if(number <31){ double pasInitial = q.get(1)-q.get(0); if (number <5) { log.info("number<5"); changeDB(q.get(number), nextSimulation); } else { if(!isPair(number)){ int min = compareTo(Fobj); double newq = q.get(min); int puiss = (number-3)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq - pas; q.add(newq); }else{ int min = compareTo(Fobj.subList(0,number-2)); double newq = q.get(min); int puiss = (number - 4)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq + pas; q.add(newq); } } /*}else if(number == 5){ int min = compareTo(Fobj); double newq = q.get(min); double pas = pasInitial/2; newq = newq - pas; q.add(newq); }else if(number == 6){ int min = compareTo(Fobj.subList(0,number-2)); double newq = q.get(min); double pas = pasInitial/2; newq = newq + pas; q.add(newq); } else { if(!isPair(number)){ int min = compare2(Fobj.get(number-2),Fobj.get(number-1)); System.out.println("Simu:"+number+" compare :"+Fobj.get(number-2)+" et "+ Fobj.get(number-1)+" min est "+min); double newq = q.get(number-2+min); int puiss = (number-3)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq - pas; q.add(newq); }else{ int min = compare2(Fobj.get(number-3),Fobj.get(number-2)); System.out.println("Simu:"+number+" compare :"+Fobj.get(number-2)+" et "+ Fobj.get(number-1)+" min est "+min); double newq = q.get(number-3+min); int puiss = (number - 4)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq + pas; q.add(newq); } }*/ changeDB(q.get(number), nextSimulation); }else doNext = false; return doNext; }// fin du before simulation /** * Call after each simulation, compute criteria for last simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception { int number = lastSimulation.getParameter().getAnalysePlanNumber(); //int number = context.getNumber(); System.out.println("after simulation" + number); ResultStorage result = lastSimulation.getResultStorage(); // Pour sommer sur certaines classes les resultats : MatrixND L2 = result.getMatrix(param_Population, ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP); List<Strategy> str = (List<Strategy>)L2.getSemantic(1); System.out.println("import de la matrice des debarquements"); //pour reccuperer les index des strategies francaises int comptSt = 0; int comptTab = 0; int[] elem = new int[strNous.size()]; for(Strategy st : str){ if (strNous.contains(st)){ elem[comptTab] = comptSt; comptTab +=1; } comptSt += 1; } MatrixND L = L2.getSubMatrix(1,elem).copy(); L = L.sumOverDim(3);// sum sur les groupes L = L.sumOverDim(2);// sum sur les metiers L = L.sumOverDim(4);// sum sur les zones L = L.reduce(); // supprime les dimensions de taille 0 ///////////////////Calcul de la fonction objectif////////////////// log.info("calcul de la fobj"); System.out.println("dim de L" + " " + Arrays.toString(L.getDim())); System.out.println("matrice de debarquements : "+ L); double crit = 0; for ( MatrixIterator g = L.iterator(); g.hasNext();){ g.next(); //boucle sur les dates et les flottilles Strategy s = (Strategy)g.getSemanticsCoordinates()[1]; Date dat = (Date)g.getSemanticsCoordinates()[0]; // int [] dim = g.getCoordinates(); double obs = matrixDebarquement.getValue(dat,s); double simules = g.getValue(); double sum_pond = obs-simules; crit += Math.pow(sum_pond, 2); // crit = crit + (obs-simules)^2 }// fin du for System.out.println("critere " + number + " = " + crit ); Fobj.add(crit); //ecriture de la table historic exportHisto += q.get(number) +";"+ Fobj.get(number) + "\n"; org.nuiton.util.FileUtil.writeString(exportHistoric, exportHisto); return true; }// fin du after simulation /** * Modify nextSimulation database with q1 and q2 in exp. * @param exp * @param nextSimulation * @throws Exception */ protected void changeDB(Double q, SimulationStorage nextSimulation) throws Exception { //methode appelee dans before simualtion TopiaContext db = nextSimulation.getStorage().beginTransaction();//ouvrir un context pour modifier les donnees Population pop = (Population)db.findByTopiaId(param_Population.getTopiaId()); //reccupere la pop ciblee MatrixND c = pop.getCapturability(); // reccupere la matrice de capturabilità for (MatrixIterator i = c.iterator(); i.hasNext();){ i.next(); i.setValue(q); }//fin du for db.commitTransaction(); // effectue la modification db.closeContext(); // ferme le context } public int compareTo(List<Double> listCrit) { int N = listCrit.size(); System.out.println("taille de la liste :"+N); int minimum=0; for(int i=0; i<N; i++) { System.out.println("i = "+i); if (listCrit.get(i)<listCrit.get(minimum)){minimum = i;} } return minimum; } public int compare2(Double f1,Double f2){ int minimum=0; if (f2<f1) minimum = 1; return minimum; } public boolean isPair(int nombre){ if((nombre-1)%2 == 1){ return true ; }else{ return false; } } }