Bug public param double non modifiable
Re-salut, je retombe sur un ancien bug : quand on declare des parametres public de type double dans un plan d'analyse, leur valeur n est pas modifiable dans l'interface. 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)
Le 16/06/2010 15:59, Sigrid LEHUTA a écrit :
Re-salut, Salut, je retombe sur un ancien bug : quand on declare des parametres public de type double dans un plan d'analyse, leur valeur n est pas modifiable dans l'interface. Je n'ai aucun soucis à modifier un param de type double.
Il se passe quoi exactement ? La valeur par defaut apparait dans l'interface ? Cette valeur est non éditable ? ou éditable mais il ne veux pas la prendre en compte ? -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Eric Chatellier a écrit :
Le 16/06/2010 15:59, Sigrid LEHUTA a écrit :
Re-salut,
Salut,
je retombe sur un ancien bug : quand on declare des parametres public de type double dans un plan d'analyse, leur valeur n est pas modifiable dans l'interface.
Je n'ai aucun soucis à modifier un param de type double.
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 ou éditable mais il ne veux pas la prendre en compte ?
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)
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 -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Le 16/06/2010 16:25, Eric Chatellier a écrit :
Tu peux m'envoyer le debug.txt s'il y a des erreur dedans ? Voire également ton plan. J'avais déjà ton plan. Effectivement, grosse erreur si les paramètres sont déclaré en "Double" au lieu de "double".
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Mince tu me l avais deja dis en plus !! peux tu me réexpliquer la différence s il te plait ? Merci Eric Chatellier a écrit :
Le 16/06/2010 16:25, Eric Chatellier a écrit :
Tu peux m'envoyer le debug.txt s'il y a des erreur dedans ? Voire également ton plan.
J'avais déjà ton plan. Effectivement, grosse erreur si les paramètres sont déclaré en "Double" au lieu de "double".
-- 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)
Mince tu me l avais deja dis en plus !! peux tu me réexpliquer la différence s il te plait ? Merci euh... c'est un peu délicat à expliquer, sachant que java
Le 16/06/2010 16:35, Sigrid LEHUTA a écrit : permet de les utiliser de la même facon. double est ce qu'on appel un type primitif Double est un "objet" plus évolué que ce type primitif La vrai syntaxe (dans l'ancien java) était : Double d = new Double(0.0); maintenant on peut racourcir la sythax en Double d = 0.0; La différence est donc type primitif/Objet. L'erreur est en fait que pour isis, sait gérer l'edition des parametres double; mais Double, il ne savait pas ce que c'était (je l'ai corrigé dans la prochaine version) -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
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; } } }
participants (2)
-
Eric Chatellier -
Sigrid LEHUTA