r3054 - in isis-fish/trunk: . src/site src/site/resources/downloads src/site/rst/documentation src/site/rst/documentation/tutorials src/site/rst/documentation/userManual
Author: jcouteau Date: 2010-06-10 09:24:04 +0000 (Thu, 10 Jun 2010) New Revision: 3054 Log: Add tutorials and FAQ to doc Added: isis-fish/trunk/src/site/resources/downloads/ExempleParametrisation.pdf isis-fish/trunk/src/site/resources/downloads/Exemple_PlanAnalyse.java isis-fish/trunk/src/site/resources/downloads/Exemple_directory.zip isis-fish/trunk/src/site/resources/downloads/Testparam.zip isis-fish/trunk/src/site/resources/downloads/calibration.java isis-fish/trunk/src/site/resources/downloads/demo.odp isis-fish/trunk/src/site/resources/downloads/manuel_sensitivity.pdf isis-fish/trunk/src/site/rst/documentation/FAQ.rst isis-fish/trunk/src/site/rst/documentation/tutorials.rst isis-fish/trunk/src/site/rst/documentation/tutorials/ isis-fish/trunk/src/site/rst/documentation/tutorials/analysisPlan.rst isis-fish/trunk/src/site/rst/documentation/tutorials/firstLaunch.rst isis-fish/trunk/src/site/rst/documentation/tutorials/parameterising.rst isis-fish/trunk/src/site/rst/documentation/tutorials/useAPI.rst isis-fish/trunk/src/site/rst/documentation/tutorials/utilCaparmor.rst Modified: isis-fish/trunk/ isis-fish/trunk/src/site/rst/documentation/userManual.rst isis-fish/trunk/src/site/rst/documentation/userManual/analysisPlan.rst isis-fish/trunk/src/site/site_fr.xml Property changes on: isis-fish/trunk ___________________________________________________________________ Modified: svn:ignore - maven.log target velocity.log .classpath .project isis-fish.ipr isis-fish.iws isis-fish.iml .settings bin nbproject + maven.log target velocity.log .classpath .project isis-fish.ipr isis-fish.iws isis-fish.iml .settings bin nbproject Inputs_Langoustine Added: isis-fish/trunk/src/site/resources/downloads/ExempleParametrisation.pdf =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/site/resources/downloads/ExempleParametrisation.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/site/resources/downloads/Exemple_PlanAnalyse.java =================================================================== --- isis-fish/trunk/src/site/resources/downloads/Exemple_PlanAnalyse.java (rev 0) +++ isis-fish/trunk/src/site/resources/downloads/Exemple_PlanAnalyse.java 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,317 @@ +package analyseplans; + +import static org.codelutin.i18n.I18n._; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import scripts.ResultName; + +import java.io.*; +import java.io.File; +import java.io.FileReader; +import java.io.Writer; +import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.codelutin.math.matrix.*; +import org.codelutin.util.*; +import org.codelutin.topia.*; + +import fr.ifremer.isisfish.*; +import fr.ifremer.isisfish.types.*; +import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.rule.RuleHelper; +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.RegionStorage; +import fr.ifremer.isisfish.datastore.RuleStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.ResultStorage; + +/* + * Exemple_PlanAnalyse.java + * + * Created: 6 juin 2007 + * + * @author sl + * @version $Revision: 3.1.3 $ + * + * Last update: $Date: 2008/12/01 09:29:18 $ + * by : $Author: sl $ + */ + +/** + * Le principe est d'avoir dans un repertoire un fichier matrix.txt et un + * fichier par parametre. Si le parametre s'appelle tac, le fichier sera tac.txt + * + * Les fichiers pour les parametres de type double sont de la forme + * <pre> + * -1=0.8 + * 1=1.2 + * </pre> + * + * Les fichiers pour les parametres de type String sont de la forme + * <pre> + * -1=L'equation ecrite sur une seul ligne + * 1=une autre equation toujours sur une ligne + * </pre> + * + * Les fichiers pour les parametres de type Rule sont de la forme + * <pre> +-1=Cantonnement +rule.-1.parameter.gear=fr.ifremer.isisfish.entities.Gear\#11690286646709\#0.5814158398678262 +rule.-1.parameter.zone=fr.ifremer.isisfish.entities.Zone\#11690286645767\#0.37798185123822536 +rule.-1.parameter.beginDate=0 +rule.-1.parameter.endDate=119 +rule.-1.parameter.enginSelectivite=false +rule.-1.parameter.beginMonth=8 +rule.-1.parameter.endMonth=11 +1=Cantonnement +rule.1.parameter.gear=fr.ifremer.isisfish.entities.Gear\#11690286646709\#0.5814158398678262 +rule.1.parameter.zone=fr.ifremer.isisfish.entities.Zone\#11690286645767\#0.37798185123822536 +rule.1.parameter.beginDate=0 +rule.1.parameter.endDate=119 +rule.1.parameter.enginSelectivite=false +rule.1.parameter.beginMonth=3 +rule.1.parameter.endMonth=11 + * </pre> + */ +public class Exemple_PlanAnalyse implements AnalysePlan { + + /** to use log facility, just put in your code: log.info("..."); */ + static private Log log = LogFactory.getLog(Exemple_PlanAnalyse.class); + + /// On rentre ici le nom des fichiers à lire c'est à dire ceux contenant la matrice d'expérience et + /// pour chaque paramètre les valeurs du paramètres correspondant à chaque modalité + /// Les paramètres à modifier sont ici les bornes des classes de longueur (growth), la capturabilité, la selectivité et les paramètres de l'AMP. + + static private final String MATRIX = "matrix"; /// Le fichier est donc matrix.txt + static private final String VBGF = "growth"; + static private final String SELECTIVITY = "selectivity"; + static private final String CATCHABILITY = "capturabilite"; + static private final String AMP = "amp"; + + /// Ici figure les paramètres du plan qui apparaitront dans l'interface de lancement de simulation et + /// qu on peut éventuellement modifier avant de lancer le plan : + + public int param_parameterNumber = 4; /// ce paramètre n'est normalement pas modifié + public int param_first = 0; /// on utilise ce paramètre pour indiquer à quelle ligne + /// de la matrice on doit commencer à faire tourner les simulations au cas où on ait dû interompre le plan + public int param_simulationNumber = 16;/// ce paramètre n'est normalement pas modifié + public String param_directory = "Exemple_directory/"; /// Il s'agit du chemin vers le dossier + ///contenant les fichier de matrice et paramètres, par défaut le repertoire du go.bat + /// donc dans ce cas c'est le dossier Exemple_repertory qui est dans le dossier contenant le go.bat + + + /// Déclaration de la matrice d'expérience + private MatrixND matrix = null; + + /// Non utilisé pour ce script mais à ne pas effacer + public String [] necessaryResult = { + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + }; + + 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 _("réalise les expériences d'un plan complet pour 4 parametres à 2 modalités"); + } + + /** + * Appelé au démarrage de la simulation, cette méthode permet d'initialiser + * des valeurs + * @param simulation La simulation pour lequel on utilise ce plan + */ + public void init(AnalysePlanContext context) throws Exception { + /// Création de la matrice d'expérience et chargement : + File dir = new File(param_directory); + matrix = MatrixFactory.getInstance().create(new int[]{param_simulationNumber, param_parameterNumber}); + matrix.importCSV(new FileReader(new File(dir, MATRIX + ".txt")), new int[]{0,0}); + matrix.setSemantics(1, Arrays.asList(new String[]{VBGF,CATCHABILITY, SELECTIVITY,AMP})); +System.out.println(matrix); +System.out.println("amp 0 : "+ matrix.getValue(0,AMP)); + /// ajout des regles qui sont modifiées par le plan + context.getParam().addExtraRules("Cantonnement"); + } + + + /// Création des méthodes qui réccupère dans la matrice la modalité du paramètre pour l'expérience en cours + /// Les arguments des méthodes sont le nom du fichier et le numéro de la simulation + /// (On détermine l'expérience en cours et donc la ligne de la matrice en sommant le numéro de la simulation et le param_first) + /// pour un double + /** + * @param name le nom de l'element a recuperer + * @param simulation le numero de la simulation + * @return + */ + private double getDouble(String name, int simulation) throws Exception { + File dir = new File(param_directory); + Properties prop = new Properties(); + prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); + int ligne = simulation + param_first; + int mod = (int)matrix.getValue(ligne, name); +System.out.println("mod et ligne : "+ mod+" "+ligne); + double result = Double.parseDouble(prop.getProperty(""+mod)); +System.out.println("result : "+ result); + return result; + } + + /// pour une liste de doubles + /** + * @param name le nom de l'element a recuperer + * @param simulation le numero de la simulation + * @return + */ + private double [] getList(String name, int simulation) throws Exception { + File dir = new File(param_directory); + Properties prop = new Properties(); + prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); + int ligne = simulation + param_first; + int mod = (int)matrix.getValue(ligne, name); + double [] result = StringUtil.toArrayDouble(prop.getProperty(""+mod).split(";")); // ""+ ca construit une chaine de caractere + return result; + } + + /// pour une chaine de characteres (equation) + /** + * @param name le nom de l'element a recuperer + * @param simulation le numero de la simulation + * @return + */ + private String getString(String name, int simulation) throws Exception { + File dir = new File(param_directory); + Properties prop = new Properties(); + prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); + int ligne = simulation + param_first; + int mod = (int)matrix.getValue(ligne , name); + String result = prop.getProperty(""+mod); + return result; + } + /// pour les paramètres d'une règle de gestion + /** + * @param name le nom de l'element a recuperer + * @param simulation le numero de la simulation + * @return + */ + private Rule getRule(RegionStorage regionStorage, String name, int simulation) throws Exception { + File dir = new File(param_directory); + Properties prop = new Properties(); + prop.load(new BufferedReader(new FileReader(new File(dir, name+".txt")))); + int ligne = simulation + param_first; + int mod = (int)matrix.getValue(ligne , name); + String ruleName = prop.getProperty(""+mod); + RuleStorage ruleStorage = RuleStorage.getRule(ruleName); + Rule rule = ruleStorage.getNewRuleInstance(); + RuleHelper.populateRule(mod, regionStorage, rule, prop); + return rule; + } + + + + /** + * 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 { + + int simNum = nextSimulation.getParameter().getAnalysePlanNumber()+ param_first; + + if (simNum < param_simulationNumber+1) { /// On vérifie qu'il reste des expériences à faire + + /// On utilise les méthodes crées pour récupérer les valeurs des modalités pour l'expérience en cours + double [] croissance = getList (VBGF , simNum); + double catchability = getDouble (CATCHABILITY, simNum); + String selectivity = getString (SELECTIVITY, simNum); + Rule amp = getRule(nextSimulation.getStorage(), AMP, simNum); + + /// On peut afficher des informations dans les logs + nextSimulation.getInformation().addInformation("Growth ("+context.getNumber()+")= " + croissance); + nextSimulation.getInformation().addInformation("Selectivity ("+context.getNumber()+")= " + selectivity); + + + /// Il faut maintenant modifier la valeur des paramètres dans la base de données et les paramètres des règle de la simulation + /// modif les parametres des regles de gestion : + + // on enleve la regle de la simulation passé (elle est stoquée sous le nom LastAMP) + List<Rule> paramRules = nextSimulation.getParameter().getRules(); + //paramRules.remove(context.getValue("lastAMP")); pas forcement utile + // on nomme la regle que l'on va ajouter LastAMP (pour pouvoir la retrouver a la simulation suivante) + //context.setValue("lastAMP", amp); + // on ajoute la regle à la simulation + paramRules.add(amp); + + /// modif les parametres dans la base de données : + TopiaContext tx = nextSimulation.getStorage().beginTransaction(); + /// On récupère les objets ISIS a modifier dans la base de données + PopulationDAO popDAO = IsisFishDAOHelper.getPopulationDAO(tx); + Population pop = popDAO.findByName("test population"); + List<PopulationGroup> groups = pop.getPopulationGroup(); + GearDAO gearDAO = IsisFishDAOHelper.getGearDAO(tx); + List<Gear> gears = gearDAO.findAll(); + + ///modif borne des classes de taille + /// On remplace les bornes par les éléments de la liste + for (PopulationGroup group : groups) { + group.setMinLength(croissance[group.getId()]) ; + group.setMaxLength(croissance[group.getId()+1]) ; + } + + /// modif la capturabilité + /// On modifie la valeur de la base en la multipliant par la valeur contenue dans la modalité + MatrixND c = pop.getCapturability(); + for (MatrixIterator i = c.iterator(); i.hasNext();){ + i.next(); + i.setValue(i.getValue()* catchability); + } + + /// modif selectivité + /// On remplace l'equation existante par une autre equation + for (Gear gear : gears) { + Selectivity sel = gear.getPopulationSelectivity(pop); + Equation eq = sel.getEquation(); + eq.setContent(selectivity); + } + + tx.commitTransaction(); + return true; + } else { + return false; + } + + } + + /** + * Call after 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 afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception { + return true; + } + +} Added: isis-fish/trunk/src/site/resources/downloads/Exemple_directory.zip =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/site/resources/downloads/Exemple_directory.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/site/resources/downloads/Testparam.zip =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/site/resources/downloads/Testparam.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/site/resources/downloads/calibration.java =================================================================== --- isis-fish/trunk/src/site/resources/downloads/calibration.java (rev 0) +++ isis-fish/trunk/src/site/resources/downloads/calibration.java 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,447 @@ +package analyseplans; +import static org.codelutin.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.codelutin.math.matrix.*; +import org.codelutin.topia.*;// pour pouvoir utiliser la methode StringUtil.toDouble() +import org.codelutin.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; + +/** + * /////***File must be copied in isis-database-3/ analyseplans/ + * File name : CalibrationEspeceq1q2Export.java + * /////*** File name could be modified if needed + * /////*** BUT class name must be identical to file name (without the extention ".java") see below + * + * Created: 17 septembre 2007 + * + * @author <> + * @version $Revision: 1.27 $ + * + * Last update: $Date: 2007/05/24 09:29:18 $ + * by : $Author: bpoussin $ + */ + + +/////***You can modify class name if you want +/////***BUT attention : file name and class name must be the same (without the extention ".java"), ie here : "CalibrationEspeceq1q2Export" +public class CalibrationEspeceq1q2Export implements AnalysePlan { + + /** to use log facility, just put in your code: log.info("..."); */ + +/////***class name to check here + static private Log log = LogFactory.getLog(CalibrationEspeceq1q2Export.class); + + enum State {STATE_INIT, STATE_0, STATE_1, STATE_2, STATE_3, STATE_4}; + +/////***here must appear the path to export the historic file ("Historic.csv") where q1, q2 and criteria computed at each simulation are written +/////***Attention : before beginning a new calibration rename your eventual old file Historic.csv otherwise it will be lost + File exportHistoric = new File ("C:Documents and Settings/Sigrid/work/ISIS-FISH/Calibration/Historic.csv"); + protected String exportHisto = ""; + + +//initial points of the simplex + public Population param_Population = null; + public String param_M1 = "2.42e-5;2.11e-6";// devient un parametre du plan d analyse + public String param_M2 = "2.34e-5;2.59e-6";// devient un parametre du plan d analyse + public String param_M3 = "2.59e-5;2.41e-6";// devient un parametre du plan d analyse + //public String param_pas = "1e-5";// devient un parametre du plan d analyse +///// ***put here the path and name of the file containing the data on which you calibrate your fichery ( here observed catches) + public String param_nomfichier_debarquements = "Q:/work/ISIS-FISH/Simu/Calibration/Observedlandings2001-2003.csv";//in row : time ; in columns : age or length group + protected File debarquementsObserves; + protected MatrixND matrixDebarquement; + + protected State state = State.STATE_INIT; + public Experiences experiences = new Experiences(); + public String [] necessaryResult = { + ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET + }; + + 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 _("Calibration using variable step Simplex method (Walters): user gives a file of observations (here catches) by time step and group (.csv), output will try to approach oservations by changing the values of catchability"); + } + + /** + * 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 séparateur ';'"); + } else { + debarquementsObserves = new File(param_nomfichier_debarquements); + } + int nbYear = context.getParam().getNumberOfYear(); + + TopiaContext db = context.getParam().getRegion().getStorage().beginTransaction(); + Population pop = (Population)db.findByTopiaId(param_Population.getTopiaId()); + + /////*** specify dimention of the matrix containning observations (observed landings for instance) + /////*** numbers of group/columns : could be equal to your number of classes in ISIS but may also be different if your had only aggregated data + int nbGroup = 4 ; +/////*** enter number of observation per year (if you have observation by quarter put 4) / lines of the observations file + int nbTrim = nbYear * 4; + int [] dimMatrix = {nbTrim,nbGroup}; + matrixDebarquement = MatrixFactory.getInstance().create(dimMatrix); +//matrixDebarquement = MatrixFactory.getInstance().create(new int[]{nbGroup}); +// List<PopulationGroup> groups = pop.getPopulationGroup(); +// matrixDebarquement = MatrixFactory.getInstance().create(new List[]{groups}); + 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 + */ + double g1; + double g2; + double worst1; + double worst2; + + public boolean beforeSimulation(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { + boolean doNext = true; + boolean doBoucle = true; +log.info("before simulation"); + + int number = nextSimulation.getParameter().getAnalysePlanNumber(); + +if (number <3) { +log.info("number<3"); + + String [] M1 = param_M1.split(";"); + String [] M2 = param_M2.split(";"); + String [] M3 = param_M3.split(";"); + + double [] q1 = StringUtil.toArrayDouble(M1[0], M2[0], M3[0]); + double [] q2 = StringUtil.toArrayDouble(M1[1], M2[1], M3[1]); + experiences.getExperience(number).q1 = q1[number]; + experiences.getExperience(number).q2 = q2[number]; + + changeDB(experiences.getExperience(number), nextSimulation); + +} else { + + double q1 = 1000; + double q2 = 1000; + double lastCritere = experiences.getExperience(number-1).criteria; + while (doBoucle){ + doBoucle = false; + if (state == State.STATE_INIT) { +doBoucle = false ; +log.info("state init"); + +//ordonne les 3 premieres experiences selon leur critere +Collections.sort(experiences.current); +//log.info("SIMPLEXE : current 0 = " + experiences.current.get(0).criteria + "current 1 = " + experiences.current.get(1).criteria + "current 2 = " + experiences.current.get(2).criteria ); +log.info("SIMPLEXE : current 0 = " + experiences.current.get(0).criteria + "current 1 = " + experiences.current.get(1).criteria + "current 2 = " + experiences.current.get(2).criteria ); +log.info("SIMPLEXE : Best q1 = " + experiences.current.get(0).q1 + " q2 = " + experiences.current.get(0).q2); +log.info("SIMPLEXE : NextBest q1 = " + experiences.current.get(1).q1 + " q2 = " + experiences.current.get(1).q2); +log.info("SIMPLEXE : Worst q1 = " + experiences.current.get(2).q1 + " q2 = " + experiences.current.get(2).q2); + + +//Calcul et evaluation de R +double g1 = (experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0; +double g2 = (experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0; +double worst1 = experiences.current.get(2).q1; +double worst2 = experiences.current.get(2).q2; + +state = State.STATE_0; + + q1 = 2 * g1 - worst1; + q2 = 2 * g2 - worst2; + +log.info ("R : q1 = " + q1 + " q2 = " + q2 ); + + } else if (state == State.STATE_0) { +doBoucle = false; +log.info("state 0"); + + // on fait la 5eme avec des q qui dependent de la 4eme dans le dernier cas +//log.info("g1 = " + g1 + " " + "g2 = " + g2); +//log.info("worst1 = " + worst1 + " " + "worst2 = " + worst2); + + if (lastCritere > experiences.current.get(2).criteria) { +log.info("State 0 : R : lastCtritere > current2 : R pire de W"); + state = State.STATE_1; + //calcul de Cw + q1 = ((experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0) - ( ((experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0) - experiences.current.get(2).q1 ) / 2.0; + q2 = ((experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0) - ( ((experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0) - experiences.current.get(2).q2 ) / 2.0; +log.info("Cw : q1 = " + q1 + " q2 = " + q2); + + + } else if (lastCritere > experiences.current.get(1).criteria) { +log.info("State 0 :R : lastCritere > current 1 : R meilleur que W et moins bon que N"); + state = State.STATE_2; + // calcul de Cr + q1 = ((experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0) + ( ((experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0) - experiences.current.get(2).q1 ) / 2.0; + q2 = ((experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0) + ( ((experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0) - experiences.current.get(2).q2 ) / 2.0; +log.info("Cr : q1 = " + q1 + " q2 = " + q2); + + } else if (lastCritere > experiences.current.get(0).criteria) { +log.info("State 0 :R : lastCritere > current0 : R meilleur que N et moins bon que B"); + state = State.STATE_INIT; + experiences.current.remove(2);//remove(3)avant + doBoucle = true; +log.info("remove W, simplex BNR"); + + } else { // dernier cas possible: if (lastCritere < experiences.current.get(0).critere) { +log.info("State 0 :R : lastCritere < current 0 : R meilleur que B, calcul de E"); + state = State.STATE_4; + + q1 = experiences.getExperience(number-1).q1 + (experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0 - experiences.current.get(2).q1; + q2 = experiences.getExperience(number-1).q2 + (experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0 - experiences.current.get(2).q2; + //q1 = experiences.current.get(3).q1 + (experiences.current.get(0).q1 + experiences.current.get(1).q1) / 2.0 - experiences.current.get(2).q1; + //q2 = experiences.current.get(3).q2 + (experiences.current.get(0).q2 + experiences.current.get(1).q2) / 2.0 - experiences.current.get(2).q2; +log.info("E : q1 = " + q1 + " q2 = " + q2); + } + + } else if (state == State.STATE_1) { +log.info("state 1, simplex BNCw"); + experiences.current.remove(3); + experiences.current.remove(2); + state = State.STATE_INIT; + doBoucle = true; + + + } else if (state == State.STATE_2) { +log.info("state 2, simplex BNCr"); + experiences.current.remove(3); + experiences.current.remove(2); + state = State.STATE_INIT; + doBoucle = true; + + + } else if (state == State.STATE_4) { +log.info("state 4 :comparaison de E a B"); + doBoucle = true; + if (lastCritere < experiences.current.get(0).criteria) { +log.info("E meilleur que B, remove 2 et 3 : simplex BNE"); + experiences.current.remove(3); + experiences.current.remove(2); + } else { +log.info("E moins bon que B, remove 2 et 4, simplex BNR"); + experiences.current.remove(4); + experiences.current.remove(2); + } + + state = State.STATE_INIT; + } + + +}//fin du while +//on remplit la table experiences + experiences.getExperience(number).q1 = q1; + experiences.getExperience(number).q2 = q2; + +log.info("on change Q dans la DB avec : q1 = " + q1 + " " + "q2 = " + q2); + +// on change la valeur de q dans la DB + changeDB(experiences.getExperience(number), nextSimulation); + }// fin du else (number > 3) +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 { + boolean doNext = true; +log.info("after simulation"); + int number = lastSimulation.getParameter().getAnalysePlanNumber(); + ResultStorage result = lastSimulation.getResultStorage(); + +/////*** Simulated catches are cumulated over strategies, areas and metiers + + MatrixND L2 = result.getMatrix(param_Population, ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET); +// log.info("dim de L2" + " " + Arrays.toString(L2.getDim())); +/////*** If some strategies, metiers or areas must not be included in the cumulated catches see below else put "//" at the beginning of line 297 and replace "L2" by "L" at line 289 +/////*** the strategies or so to exclude must be at the begining or end of the list you enter in the parameters interface +/////*** fill the line MatrixND L = L2.getSubMatrix(a,b,c).copy(); as follow : +/////*** a = 1 if you want to exclude strategies, 2 if metiers and 4 if areas +/////*** b = indice of the first object considered +/////*** c = number of object to keep after b, b included + MatrixND L = L2.getSubMatrix(1,2,4).copy(); // for instance : keep strategies 2,3,4,5 +//log.info("sous matrice extraite"); + L = L.sumOverDim(1);// sum over strategies + L = L.sumOverDim(2);// sum over metiers + L = L.sumOverDim(4);// sum over zones +log.info("sommes sur les strategies, metiers et zones faites"); + +/////*** if observations are cumulated by groups else put "//" at the beginning of the following line +L = L.sumOverDim(3); +/////*** else if number of groups in your database differs from number of groups in observations ... write me an e-mail + +////*** if observations are cumulated over quarter a = 3, over year a = 12, else put "//" at the beginning of the following line + L = L.sumOverDim(0,a); + + L = L.reduce(); + + +///////////////////Calcul du critere////////////////// +log.info("calcul du critere"); +log.info("dim de L" + " " + Arrays.toString(L.getDim())); +log.info("dim de obs" + " " + Arrays.toString(matrixDebarquement.getDim())); + double crit = 0; + for ( MatrixIterator g = L.iterator(); g.hasNext();){ + g.next(); +//boucle sur les trimestres et les classes d age + + int [] dim = g.getCoordinates(); + + double obs = matrixDebarquement.getValue(dim); + double simules = g.getValue(); + + crit += Math.pow(obs-simules, 2); // crit = crit + (obs-simules)^2 + }// fin du for +log.info("critere " + number + " = " + crit ); + +//ajoute le critere dans la table experiences + experiences.getExperience(number).criteria = crit; + +//ecriture de la table historic +exportHisto += experiences.getExperience(number).q1 +";"+ experiences.getExperience(number).q2 +";"+ experiences.getExperience(number).criteria + "\n"; +org.codelutin.util.FileUtil.writeString(exportHistoric, exportHisto); + + +return doNext; + +}// fin du after simulation + + /** + * Modify nextSimulation database with q1 and q2 in exp. + * @param exp + * @param nextSimulation + * @throws Exception + */ + + + protected void changeDB(Experience exp, 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é + +//log.info("Pour cette simulation : q1 = " + exp.q1 + ";" + "q2 = " + exp.q2 ); + +/////*** that is where you explain how to fill the catchability matrix with q1 and q2 + for (MatrixIterator i = c.iterator(); i.hasNext();){ + i.next(); + Object [] sem = i.getSemanticsCoordinates(); + PopulationGroup group = (PopulationGroup)sem[0]; + PopulationSeasonInfo season = (PopulationSeasonInfo)sem[1]; + +////*** exemple when q2 corresponds to the 12 first groups (groups 0 to 11) + if (group.getId() < 12){ + i.setValue(exp.q2); + }else { + i.setValue(exp.q1); + } + +/////*** exemple when it depends on seasons and groups +/* if (season.getFirstMonth().after(Month.JULY) && group.getId() >=18){ //month >= aout && groupID >= 18 + i.setValue(exp.q2); + }else { + i.setValue(exp.q1); + } +*/ + + }//fin du for + + db.commitTransaction(); // effectue la modification + db.closeContext(); // ferme le context +} + + + + + static public class Experiences { +// cree la liste experiences ou sont stoqués q1,q2 et critere pour chaque simulation + + /** contains last simplex and potentialy 2 more simulation */ + public List<Experience> current = new ArrayList<Experience>(); + + /** contains all experience done */ + public List<Experience> history = new ArrayList<Experience>(); + /** + * return experience requested, if this experience doesn't exist + * create it. + * + * @param i simulation number + * @return experience with simulation number fixed if new experience + * is returned + */ + public Experience getExperience(int i) { + Experience result; + if (i<history.size()) { + result = history.get(i); + } else { + result = new Experience(); + result.simNumber = i; + history.add(i, result); + current.add(result); + } + return result; + }//fin de la definition de getExperience + + +/** + * @return the history + */ + public List<Experience> getHistory() { + return this.history; + } + }// fin de la creation des listes experiences + + + + static public class Experience implements Comparable { + public int simNumber; + public double criteria; + public double q1; + public double q2; + /** + * Permit to order experience, first is experience with smallest criteria + */ + public int compareTo(Object arg0) { + Experience other = (Experience)arg0; + int result = Double.compare(this.criteria, other.criteria); + return result; + } + } + + +} \ No newline at end of file Added: isis-fish/trunk/src/site/resources/downloads/demo.odp =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/site/resources/downloads/demo.odp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/site/resources/downloads/manuel_sensitivity.pdf =================================================================== (Binary files differ) Property changes on: isis-fish/trunk/src/site/resources/downloads/manuel_sensitivity.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: isis-fish/trunk/src/site/rst/documentation/FAQ.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/FAQ.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/FAQ.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,463 @@ +FAQ +=== + +.. contents:: + +Que veulent dire les numérotations 2.1.3.1 ou 3.0.0.0 ? +------------------------------------------------------- + +La numérotation suit le schéma suivant: + + * un premier numéro qui donne la version majeur d'Isis si on a 2.1.3 la version + est 2, si on a 3.0.0 la version est 3. + * le deuxiÚme donne la version de base de données dans cette version majeur. si + on a 2.1.3 cela veut dire qu'on est a la version 1 des données et dans 3.0.0 + qu'on est à la version 0. + * le troisiÚme numéro représente la version des scripts (isis-database-3) à + utiliser + * le dernier numéro représente la version mineur dans 2.1.3.1 le numéro mineur + est 1 + +Lorsque l'on a déjà IsisFish en place on peut utiliser n'importe quelle version +d'Isis du moment que le numéro majeur, de base et de script sont les mêmes que +ceux actuellement utilisé, c'est à dire que seul le numéro mineur change. + +Lorsque l'on souhaite utiliser une version d'IsisFish avec un numéro de base +supérieur, IsisFish convertira tout seul les données dans cette nouvelle +version, il ne vous sera plus possible d'utiliser une version d'IsisFish avec un +numéro de base inférieur. + +Il est possible d'utiliser deux versions majeures d'IsisFish en même temps car +deux versions majeures ne partagent pas les mêmes fichiers de configuration. Ce +sont donc deux applications complÚtement distinctes. + +Il est possible d'avoir une version 2 et une version 3 lancées en même temps. + +Quels sont mes limites lorsque j'écris des scripts ? +---------------------------------------------------- + +Il ne faut jamais modifier un objet retourné par une méthode d'un script car un +systÚme de cache est utilisé. Si vous faites ainsi, vous modifiez l'objet en +cache, et au prochain appel, vous aurez l'objet modifié et non l'objet attendu. +Par exemple si vous +retournez une List, il faut dans la méthode qui récupÚre la List faire une copie +avant de la modifier. Si on ne fait que lire le contenu de la List, il n'y a +rien a faire. + +Scripts : objets et syntaxe +--------------------------- + +Connaître les objets et méthodes d'Isis +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* listes des objets, méthodes et liens entre objets (modÚle UML) : + http://isis-fish.labs.libre-entreprise.org/v3/devel/images/IsisFishModel.png . + Cette figure permet d'avoir les noms des objets et les noms des méthodes qui + s'y rattachent +* API ISIS : + http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/index.html +* AccÚs aux scripts: dans le logiciel, par le biais de l'interface d'édition des + scripts, la majorité des équations sont dans script/SiMatrix.java. Le reste + des scripts est accessible en ligne : + http://isis-fish.labs.libre-entreprise.org/isis-fish/xref/ . Les sources sont + aussi visualisable directement dans le repo svn: + https://labs.libre-entreprise.org/scm/viewvc.php/isis-fish/trunk/src/main/ja... + +Mise à jour des scripts +~~~~~~~~~~~~~~~~~~~~~~~ + +Ceci peut être fait par synchronisation avec le serveur : Fichier/serveur +synchronisation. Cette action compare les scripts présents sur le PC a ceux +présents sur le serveur et indique ceux qui sont différents. Il faut ensuite +cocher les scripts que l'on veut mettre à jour et valider. + +Attention : Si une erreur est signalée dans un script, la synchronisation +modifiera le script en question. Si la ligne à laquelle la modification est +réalisée diffÚre en local de celle présente sur le serveur, ceci est signalé par +les signes <<<< pour ce qu il y avait en local et pour ce qui se trouve sur le +serveur. Il faut choisir la ligne a conserver et effacer ou mettre en +commentaire l'autre, pour que le script fonctionne. + +Par ailleurs, tous les scripts sont disponibles à cette adresse : +https://labs.libre-entreprise.org/scm/viewvc.php/trunk/?root=isis-fish-data + +Scripts locaux +~~~~~~~~~~~~~~ + +Si des scripts ont été écrits en local, la synchronisation ne les vérifie pas + +Scripts hérités +~~~~~~~~~~~~~~~ + +Si un script local a été écrit à partir d'un script présent sur le serveur, il +est nécessaire de garder une trace de ce script d'origine. Ainsi en cas de +modification du script d'origine sur le serveur, l'utilisateur peut retrouver +les scripts locaux hérités et les corriger à leur tour. + +Ajout d'une aide contextuelle pour les rÚgles et les plans d'analyse +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans le script de la rÚgle ou du plan (éditeur de script), + +* au niveau des imports ajouter : import fr.ifremer.isisfish.util.Doc +* au dessus du paramÚtre à documenter (par exemple public Zone param_zone = + null;) ajouter @Doc("le parametre Zone correspond à ???") + +Insérer des commentaires dans un script +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +System.out.println (); + +Comment on utilise les API ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +cf le tuto_ . + +.. _tuto:: tutorials/useAPI.html + + +Comment créer des scripts de plan d'analyse +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`cf le tutoriel`_ + +.. _cf le tutoriel:: tutorials/analysisPlan.html + +Comment se structure une rÚgle de gestion ou un plan d'analyse ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +cf déroulement d'une simulation au bas de `cette page`_ et `celle-ci`_ + +.. _cette page:: devel/architecture.html + +.. _celle-ci:: userManual/analysisPlan.html + +Un paramÚtre de ma rÚgle se comporte bizarrement, qu'est-ce qui se passe ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Les variables paramÚtre de rÚgle (celles qui commencent par \param_) sont +initialisées ua début de la simulation et non au début de chaque pas de temps. +Il ne faut donc pas les modifier mais se servir de variables intermédiaires. + +Interfaces +---------- + +Vérification du paramétrage de la pêcherie +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* Pour toute la pêcherie. Dans l'interface région : bouton en bas vérifier + + - en bleu : ok + - en orange : paramÚtres avec pb +* Pour une équation. Dans l'éditeur d'équation : bouton check - vérification de + la syntaxe +* Pour un script (rule, AnalysePlan,...). Dans l'éditeur de script : bouton + vérifier - vérification de la syntaxe. Possibilité de voir les différences + entre le script sur la machine utilisateur et sur le serveur en allant sur + menu serveur de l'interface éditeur de script + +A quoi sert tag dans l'interface de lancement de simulation (paramÚtres avancés) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Paramétrer des exports, le simulateur ou des équations + +exemple : dans le simulateur, simuler sans les variables économiques:: + + if (!"false".equalsIgnoreCase(param.getTagValue().get("ecoResult"))) { + control.setText("Add economics results"); + saveGravityModel(date, resManager, gravityModel); + } + +ici le tag s'appelle ecoResult + +Effort description +~~~~~~~~~~~~~~~~~~ + +Les variables "Opération de pêche" et "nombre d'engins par opération" entrent +dans les équation de standardisation de l effort par marée de cette maniÚre:: + + StdEffortPerHour = Fstd * FishingOperationNumber * GearNumberPerOperation. + +Donc a priori (???) elles doivent être remplies quand Fstd est calculé a +l'échelle opération de pêche*engin. + +Si Fstd est calculé à l'échelle de la marée il faut ABSOLUMENT mettre 1 dans les +deux cases (sinon les captures seront nulles). la variable "durée de la pêche" +n'est pas utilisée dans les équations. + +Unités... +~~~~~~~~~ +A confirmer mais trÚs probablement : + +trip types : + + * durée de marée en heures + * temps minimal entre deux marées : inutilisé + +vessel type + + * durée max de marée : inutilisée + * vitesse en km/h + * intervalle d activité : inutilisé + +Entrer le mois d'application d'une rÚgle de gestion dans l'interface de lancement de Simulation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C'est le numéro du mois qui est attendu, soit un chiffre entre 0 et 11 (0 : +janvier et 11: décembre) Sinon ça bug ! + +Est-ce que la simulation a bien tourné ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* S'assurer dans la queue de simulation de l'état de la simulation : simulation + terminée + +* Sélectionner la simulation dans la table (ou dans l'interface des résultats de + simulation) cliquer sur "voir les logs": + +* sélectionner fatale, erreur et warning : si quelque chose apparaît, c'est + qu'il y a un bug! en dessous du ERROR, est affiché l'exception. Il faut + parcourir le stack trace et identifier une ligne qui porte sur + ifremer.isisfish et voir à quoi cela se rapporte. + +Affichage des effectifs et biomasses dans la fenêtre de résultats +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Une petite subtilité : dans la fenêtre Résultats, les effectifs/biomasse d'une +population affichés pour un mois donné correspondent à ces effectifs/biomasses à +la fin du pas de temps précédent. + +Vous n'utilisez pas le dépÃŽt correct pour votre version d'Isis-Fish +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Le message suivant apparaît :: + + Vous n'utilisez pas le dépÃŽt correct pour votre version d'Isis-Fish : 3.2.0.8. + Voulez-vous changer de dépÃŽt ? + +Ce message apparaît lors de l'utilisation d'une nouvelle version majeure +d'IsisFish, il vous demande simplement si vous désirez utiliser la nouvelle +version des scripts qui fonctionne avec cette version. + +Astuces de modélisation +----------------------- + +Séparer mâles et femelles ayant des croissances différentes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +On crée des classes de longueur consécutives pour les mâles et d'autres pour les +femelles qui seront donc à la suite. Par ex. pour les mâles, on va dire qu il y +a les classes suivantes :: + + 60-70 70-77 77-110 110-166 + +et pour les femelles :: + + 60-70 70-78 78-86 + +on clique sur 'recruter les classes'. Piur la premiÚre taille, on rentre '60'. +Ensuite pour les tailles maximales de groupe, on rentre : +'70;77;110;166;70;78;86' et on valide. Cela crée une classe 4 de taille +minimale 166 et maximale 70 ! + +Dans la saisie des groupes de population pour le groupe 4, le premier groupe de +femelles, on modifie la valeur de la borne inférieure : de 166 à 60. On sauve et +c'est tout !!! + +Pour ne pas comptabiliser le temps de trajet dans l'effort +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +L'astuce consiste à mettre une vitesse de navires trÚs importante par exemple +10^9, la durée de trajet devient tres petite ~ 0 + +Le ModÚle +--------- + +Définition des saisons pour une population +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans ISIS, les saisons correspondent à une modification de la paramétrisation +liée à l'occurrence d'événements affectant la population : Reproduction, +changement de classe, migration... + +Pour définir les saisons il convient donc de placer ces différents événements +sur une ligne de temps, les saisons seront donc les mois consécutifs entre deux +événements. + +Chronologie des événements biologiques et migratoires à l'échelle de l'année +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Attention : les changements de classe et la reproduction ont lieu à chaque mois +de la saison contrairement à la migration qui a lieu au premier mois de la +saison. Il n'est pas necessaire de définir une saison pour le recrutement, +celui-ci peut avoir lieu a n'importe quel moment d'une saison. + +FIXME Mail de Stéphanie du 11/07/07 : le changement de classe pour une +population structurée en age ne se fait qu'une fois dans la saison, le code +pourrait etre modifié pour éviter d'avoir à définir une saison d'un mois pour le +changement de classe. Il y a des avantages et inconvénients (cf réponse +d'Hilaire) On abandonne ? + +Attention aux hypothÚses de modélisation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +HypothÚse de base dâISIS : toutes les variables dâétats sont supposées homogÚnes +à lâéchelle de la zone définie â par exemple Si une classe dâune pop est +distribuée sur Zpop à un pas de temps t, alors lâeffectif de cette classe est +homogÚnement distribué sur Zpop, un effort sur une partie de Zpop impacte les +effectifs de toute la zone en se diluant sur toute la zone pop:: + + (N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t))). + +Ne serait-il pas plus judicieux de faire impacter uniquement la zone +intersection entre la zone metier et la zone pop :: + (N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t)*(inter(Zmet,Zpop)/Zpop)) ? + +Si on veut évaluer lâimpact dâune AMP Zg incluse dans Zpop, + +* Ne pas distinguer 2 zones de population dans Zpop [Z1=Zpop-Zg et Z2=Zg], a pour + conséquence que lâabondance dans Z2 sera impactée par les captures possibles + dans Z1 (car à chaque pas de temps les captures pouvant avoir lieu dans Z1 vont + impacter lâabondance de Zpop:: + + N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t)) + + et avec lâhypothÚse dâhomogénéité dans Zpop, les effectifs dans Z2 seront égaux + à N(Zpop,t+1)*Z2/Zpop. + +* Distinguer 2 zones de population Z1=Zpop-Zg et Z2=Zg, a pour conséquence que + lâabondance de Z2 ne sera pas impactée par les captures dans Z1 (permet de + modéliser le fait que les poissons dans Z2 sont inféodés à cette zone):: + + N(Z1,t+1) ~= N(Z1,t)-F(met)* N(Z1,t), N(Z2,t+1)= N(Z2,t+1)-exp(-M/12) N(Z2,t) (si pas de migrations) + +* Pour décrire un phénomÚne de refuge, il faudrait peut-être rajouter une + migration des individus de Z1 dans Z2 en densité dépendance... ? + +Impact de la taille d'une AMP si l'amp est incluse dans la zone pop + + * Si une seule zone pop Zpop + * Si Zg incluse dans Zpop + * Si le métier impactant la pop est distribué sur Zmet=Zpop + * Si le métier réalloue son effort sur la zone restante : Zmet-Zg=Z1, + +N(Zpop,t+1) = N(Zpop,t)-F(met)/(F(met)+M/12)exp(-F(met)+M/12)*N(Zpop,t), N(Z1,t+1) = N(Zpop,t+1)*Z1/Zpop, N(Z2,t+1) = N(Zpop,t+1)*Z2/Zpop, + + * Si Zg grandit (par exemple nZg=kZg), F(met) ne change pas, les effectifs + +N(Zpop,t+1) = N(Zpop,t)-{F(met)/(F(met)+M/12)*exp(-F(met)+M/12)}* N(Zpop,t) N(Z1,t+1) = N(Zpop,t+1)*[Zpop-kZg]/Zpop, N(Z2,t+1) = N(Zpop,t+1)*kZg/Zpop, + +**ie quâavec une modélisation de la zone de distribution de la pop en une seule zone (ie pas dâhétérogénéité entre la partie de la zone pop dans lâamp et lâautre), un changement de taille de la zone ne peut pas avoir dâimpact** + +Si on fait l'hypothÚse proposée : N(Zpop,t+1) ~= N(Zpop,t)-F(met)*(N(Zpop,t)*(inter(Zmet,Zpop)/Zpop)). + +**Dans ce cas lâimpact (différence entre les effectifs pour la grande AMP â effectifs pour petite AMP) = (k-1)* Zg)/Zpop F(met)/(F(met)+M/12)*exp(-F(met)+M/12)}* N(Zpop,t)** + +Remarque additionnelle : superposition de zones population +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:?: ''A revoir/repenser mais à priori : '' + +Si nécessaire, il est possible de créer des zones population se chevauchant pour +une même population. Si la mortalité naturelle est la même dans les deux zones, +les captures dans la zone d'intersection seront correctement calculées. En effet +si la mortalité naturelle est la même dans les deux zones, l'effort +E(str, met, grp) puis la mortalité par pêche F(str, met, grp) et le taux de +capture CR(str, met, grp) sont calculés indépendamment pour chaque zone pop mais +identiques, on a donc + + * zone pop 1 : E -> F -> CR + * zone pop 2 : E -> F -> CR + +et les captures seront B1*CR + B2*CR = (B1+B2)*CR + +(et ca marche qu'on soit dans le modÚle par cellule ou dans le modÚle par zone) + +Simulations +----------- + +Ce qui se passe à t = 0 +~~~~~~~~~~~~~~~~~~~~~~~ + +Lors d'une simulation, le premier pas de temps est particulier, et tous les +événements se déroulant habituellement en janvier n'arrivent pas forcement : + + * la migration a lieu + * le changement de classe n'a pas lieu + +FIXME ca sera modifié ??? + +:-( Attention en entrant les effectifs initiaux et les résultats de janvier de +l'année 0 ne sont pas comparables à ceux des autres années de simulation. + +Simulation par cellule +~~~~~~~~~~~~~~~~~~~~~~ + +Pour effectuer une simulation par cellule, dans l'interface de lancement de +simulation (ou d'analyse de sensibilité), dans l'onglet ParamÚtres avancés, on +ajoute un tag effortByCell dont la valeur est à true. + +Analyse de sensibilité +---------------------- + +ISIS-Fish se ferme des que je lance une analyse de sensibilité +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Il s'agit d'une configuration de R incomplete. Reportez-vous au point "Les +analyses de sensibilités ne fonctionnent pas" + +à partir de la version 3.3.0.0 d'Isis-fish, une erreur devrait s'afficher dans +le fichier debug.txt et ne plus se fermer. + +Les analyses de sensibilités ne fonctionnent pas +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +L'erreur la plus probable provient d'une configuration incomplÚte de R pour +ISIS-Fish. + +Vous devez avoir la version 2.9.0 de R. + +Pour Windows, vous devez configurer deux variables d'environnements : + + * `R_HOME` à C:\Program Files\R\R-2.9.2 + * `PATH` doit contenir : `%R_HOME%\bin` + +Trucs et astuces +---------------- + +Remplir une table à partir d'un fichier txt ou csv +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans les interfaces, il suffit de cliquer droit sur la table à remplir et de +choisir importer à partir d'un fichier. + +Les nombres entiers trop grands posent problÚme +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Il faut faire 39E3 au lieu 39000 + +Pourquoi 41/1000 ça fait 0 ? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Dans ma rÚgle de gestion, je fait une division de 41 par 1000 et le résultat est +0, pourquoi ? + +En java, tout est typé. Ce qui est fait dans l'opération précédente, c'est une +division euclidienne, 41 et 1000 étant des entiers. Pour avoir le résultat d'une +division "classique", il faudrait faire 41.0/1000.O, les deux nombres étant des +nombres à virgule (que ce soit double ou float), le résultat sera un nombre à +virgule (double ou float). + +Plus généralement, en java, lors d'une opération entre deux types, java garde la +plus grande précision. Par exemple, une opération entre deux entiers donnera un +entier, entre deux doubles un double, mais entre un entier et un double, le +résultat sera un double. Vous pouvez avoir plus d'info par ici : +http://www.siteduzero.com/tutoriel-3-10276-les-variables-et-les-operateurs.h... + +Comment je fait une exponentielle (ou tout autre fonction mathématique "évoluée") +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Pour la plupart des fonctions mathématiques courantes, il faut utiliser les +méthodes statiques de la classe Math. + +Pour plus d'infos : http://jmdoudoux.developpez.com/cours/developpons/java/chap-math.php Added: isis-fish/trunk/src/site/rst/documentation/tutorials/analysisPlan.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials/analysisPlan.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials/analysisPlan.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,168 @@ +Tutoriaux pour l'utilisation des plans d'analyse +================================================ + +Un plan dâanalyse est un ensemble dâexpériences (simulations) pour lesquels on +va modifier la valeur de certains paramÚtres selon un protocole défini pour +répondre à une question. On distingue des plans dâanalyse pour lesquels + +* *les expériences sont indépendantes* . C'est à dire que lâordre des + simulations nâa pas dâimportance et que lâon pourrait par exemple les lancer + sur des ordinateurs différents. Les valeurs que les paramÚtres devront prendre + à chaque nouvelle simulation sont déterminées au préalable. + +* *les expériences sont séquentielles* . Les valeurs des paramÚtres de la + simulation s+1 dépendent des résultats de la simulation s. + +Expériences Indépendantes : exemple d'une analyse de sensibilité +---------------------------------------------------------------- + +Dans le cas d'expériences indépendantes, la premiÚre étape est de définir les +paramÚtres à modifier et les différentes valeurs quâils devront prendre +(appelées « modalités »). On les organise ensuite selon un plan dâexpérience +adéquat (plan complet, factoriel, optimiséâŠ) quâon écrit sous forme de matrice. +Des méthodes sont déjà disponibles pour réaliser ce type de plans sous +ISIS-Fish. Ils sont décrits ici mais libre à lâutilisateur dâécrire ses propres +scripts si la méthode actuellement utilisée ne répond pas à ses besoins. Voici +la description et le fonctionnement des scripts existants : ils nécessitent +l'écriture de 3 types de fichiers : un script de plan d'analyse, une matrice +d'expérience et des fichiers paramÚtre : + +* *La matrice dâexpérience* est une matrice [expériences x paramÚtres] : chaque + colonne correspond à lâun des paramÚtres à modifier et chaque ligne contient + les modalités des paramÚtres pour une expérience donnée. Les modalités sont + codées par des entiers (-1 ;0 ;1 etc). Cette matrice est copiée dans un + fichier .txt sans en-tête de colonnes ni de lignes. + +* *Les fichiers paramÚtres* : un fichier .txt par paramÚtre donnant la + correspondance entre la valeur de la modalité (-1 ;0 ;1) dans la matrice et la + valeur du paramÚtre. Ce paramÚtre peut être un réel, une liste de réels, une + équation⊠Si lâon nomme les modalités â1 et 1, le fichier est de la forme + + - Pour un paramÚtre qui est une liste + +:: + + -1=0.5;0.8;0.9;0.11 + 1=0.5;0.11;0.15;0.41 + + - Pour un paramÚtre qui est une équation + +:: + + -1=if(condition = true) return 5 ; else return 3 ; + 1=if(condition = true) return 7 ; else return 3 ; + + - Pour un paramÚtre qui est un réel + +:: + + -1=0.8 + 1=1.2 + + - On peut aussi modifier les paramÚtres des rÚgles de gestion...(voir + exemple). Il faut alors indiquer dans le .txt tous les paramÚtres public de + la rÚgle. Attention pour certaines rÚgles de gestion il faut définir la + population, lâengin, la zone... ciblée par la rÚgle dans les paramÚtres. + Pour ce faire il nâest pas possible dâécrire le nom de la population, de la + zone... il faut déterminer le code correspondant qui est du genre + +:: + + fr.ifremer.isisfish.entities.Zone#1169028645767#0.37798185123822536 + + Pour cela on peut faire tourner une simulation avec la rÚgle en question + correctement paramétrée et aller voir dans les logs (fichier debug.txt dans + le même dossier que le .bat de lancement), ces codes sont inscrits à coté du + nom du paramÚtre au moment de lâinitialisation des rÚgle de gestion. + +*Attention !!!!* dans ces fichiers la syntaxe est importante: + +* Pas dâespace +* Pas de « ; » à la fin des lignes +* Pas de « + » devant un chiffre quand il désigne une modalité (+1=NON ; 1=OUI) + +Les fichier matrix.txt et les fichiers paramÚtres.txt doivent être placés *dans +un même dossier* de préférence localisé dans le dossier contenant le .bat de +lancement dâISIS-Fish (qui est la racine pour le logiciel). + +Exemple +~~~~~~~ + +On propose ici la matrice et les fichiers paramÚtres d'une analyse +de sensibilité sur les paramÚtres de croissance, capturabilité, selectivité et +la période de fermeture d'un cantonnement. + +`Fichiers parametres et matrice`_ + +.. _Fichiers parametres et matrice:: ../../downloads/Exemple_directory.zip + +*Le script de plan d'analyse* (écrit à partir de lâéditeur de scripts) +permet de récupérer et modifier les valeurs des paramÚtres en fonction de la +matrice d'expérience pour chaque simulation. (Voir le manuel pour lâexplication +de la structure des scripts de plans dâanalyse.) + +On joint ici le script commenté correspondant à l'analyse de sensibilité +précédante. Le script contient les méthodes nécessaires à lire les fichiers +matrice.txt et les fichiers contenant les modalités des paramÚtres. Il contient +aussi le code servant à modifier les valeurs de ces paramÚtres dans la base de +donnée (pour connaitre les méthodes permettant d'accéder aux différents +paramÚtres de la base de donnée, se référer aux APIs). + +`Script d analyse de sensibilite`_ + +.. _Script d analyse de sensibilite:: ../../downloads/Exemple_PlanAnalyse.java + +Plans sequentiels : exemple de calibration par la méthode du simplexe +--------------------------------------------------------------------- + +Dans ce cas, les modalités prises par les paramÚtres à la simulation suivante +dépendent des résultats des simulations précédentes. Il faut donc écrire +lâalgorithme de calcul de ces nouvelles valeurs en fonction des résultats de +simulation dans le script du plan dâanalyse. Il faut également écrire le code +permettant de modifier la valeur des paramÚtres pour la remplacer par la +nouvelle valeur calculée. + +Exemple +~~~~~~~ + +L'exemple reprend un script qui permet de calibrer deux paramÚtres (ici la +capturabilité) par la méthode du simplexe à pas variable à partir des +débarquements trimestriels. + +`Script de calibration`_ + +.. _Script de calibration:: ../../downloads/calibration.java + +Lancement d'un Plan d'analyse +----------------------------- + +Quand les scripts sont écrits, câest tout simple ! + +Dans lâinterface de lancement de simulation on prépare sa simulation comme +dâhabitude à lâexception des rÚgles de gestion : il ne faut pas charger une +rÚgle si elle doit être modifiée par le plan car elle sera ajoutée par le plan +dâanalyse à la suite des rÚgles entrées dans lâinterface. On coche la case +« Utiliser le plan dâanalyse ». On sélectionne le plan Exemple_PlanAnalyse ou +CalibrationExpeceq1q2 dans la liste déroulante. On remplit les paramÚtres du +plan et on lance la simulation. + +PS : Attention à bien vérifier les différentes étapes listées dans le Pense-Bête +sinon gare aux 500 simulations sans effectifs initiaux... ;-) + +Biblio intéressante +------------------- + +* Drouineau, H., Mahévas, S., Pelletier, D. and Beliaeff, B. 2006. Assessing the + impact of different management options using ISIS-Fish: the French + Hake-Nephrops mixed fishery of the Bay of Biscay. Aquatic living resource, + 19 : 15-29. +* Saltelli, A., Tarantola, S., Campolongo, F. and Ratto, M. 2004. Sensitivity + Analysis in Practise. A guide to Assessing Scientific Models. J.W.&. Sons. pp. +* Kleijnen, J.P.C. 1998. Experimental Design for Sensitivity Analysis, + Optimization, and Validation of Simulations Models. In Handbook of simulation. + Principles, Methodology, Advances, Applications and Practise, pp. 173-224. Ed. + by Banks, J. Wiley, New York. Engeneering and Management Press. 864 pp. +* Walters, F.H., Parker, L.R., Morgan, S.L. and Deming, S.N. 1991. Sequential + Simplex optimization: a technique for improving quality and productivity in + research, development, and manufacturing (Chemometrics series). B.R. CRC Press + LLC. 402 pp. Added: isis-fish/trunk/src/site/rst/documentation/tutorials/firstLaunch.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials/firstLaunch.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials/firstLaunch.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,27 @@ +Tutoriel : Utilisation d'ISIS-Fish (V3.2.0) pas à pas +===================================================== + +Ce tutoriel couvre tous les points d'ISIS, de la création d'une base à l'analyse +de sensibilité. Il n'est en aucun cas une documentation détaillée de +l'utilisation d'ISIS-Fish, mais une aide à travers les différentes étapes +d'utilisation du logiciel. Tous les points "classiques" sont censés être +abordés, pour toutes les configurations complexes ou "exotiques", veuillez vous +référer au manuel utilisateur ou aux listes de diffusion. + +Le tutoriel est basé sur des saisies d'écran commentées à la maniÚre des bandes +dessinées. La lecture s'effectue de la même maniÚre que dans ces derniÚres : +Ordre des bulles : de gauche à droite et de haut en bas. Afin de simplifier les +écrans et garantir l'ordre de lecture (et des opérations), les bulles ont été +numérotées. + +`Diaporama pour visualisation hors-ligne`_ + +Ce tutoriel est présenté sous la forme d'un diaporama. Pour lancer le diaporama, +cliquez sur "démarrer" en haut de la page. Pour atteindre un point particulier +de la présentation, cliquez sur le lien correspondant ci-dessous : + +.. _Diaporama pour visualisation hors-ligne:: ../../downloads/demo.odp + + +.. TODO JC20100604 Make the links to each page + Added: isis-fish/trunk/src/site/rst/documentation/tutorials/parameterising.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials/parameterising.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials/parameterising.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,15 @@ +Paramétrisation d'une pêcherie (Isis-3.1.3) +=========================================== + +Le document proposé contient un exemple de paramétrisation d'une pêcherie +imaginaire, afin d'aider à la prise en main du logiciel et la formulation des +hypothÚses de modelisation sous une forme interprétable par le logiciel. Il +contient également des exemples de simulations. + +`Telecharger l exemple en PDF`_ + +`Telecharger la base zippee`_ + +.. _Telecharger l exemple en PDF:: ../../downloads/ExempleParametrisation.pdf + +.. _Telecharger la base zippee:: ../../downloads/Testparam.zip \ No newline at end of file Added: isis-fish/trunk/src/site/rst/documentation/tutorials/useAPI.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials/useAPI.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials/useAPI.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,110 @@ +Tuto d'utilisation des API +========================== + +Avant tout il faut savoir, que toutes les valeurs saisies dans l'interface de +saisie par l'utilisateur sont stoquées dans les objets d'ISIS correspondants. +Pour modifier ces valeurs avant ou en cours de simulation, il faut connaitre +leur nature et leur structure, savoir comment y accéder et les modifier. +Pour savoir comment y accéder il faut connaitre les dépendances entre objets +(objets qui sont des attributs d'autres objets). Pour cela on consulte +l'architecture de la base de donnée ( `Modele ISIS-Fish`_ ) qui se reflÚte dans +l'architecture de l'interface de saisie. + +Pour savoir comment passer d'un objet a un autre il faut connaitre les méthodes +appliquables aux objets : tout est dans l'API. + +Remarque : Il vaut mieux commencer par se familiariser avec les differents types +d'objets JAVA (double, boolean, string, integer, equation, matrix,...), les +attributs et les methodes (cf tutoriaux JAVA). + +Voici un exemple "pas à pas" pour le cas ou l'on voudrait modifier l'equation de +mortalité naturelle dans un plan d'analyse par exemple. On veut remplacer +provisoirement la valeur de la base par une autre. On crée un objet String +rempli avec l'autre valeur par exemple:: + + String mortalitenaturelle = "if (groupe.getId() == 0) return 1.5; else return 0.2;" + +Se poser la question : "Dans la base de donnée où se trouve la mortalité naturelle ?" +------------------------------------------------------------------------------------- + +Réponse : dans l'interface de saisie, elle est dans la branche "population" et +l'onglet "equations". +(au passage le titre de l'onglet nous renseigne sur le type d'objet auquel on a +affaire : ya de grandes chances pour que parmi la batterie d'objets possibles +(int, double, matrice...) la mortalité naturelle soit une equation ;-) ) + +En francais on dirait "dans population, va chercher l'objet equation de +mortalité naturelle, et attribut lui la valeur du string mortalitenaturelle", ya +pu qu'a le dire en java. + +Ouvrir la page des APIs +----------------------- + +Dans la colonne de gauche de l'API (sous "all classes") on cherche l'entite +"population" et on clique dessus. + +Les méthodes disponibles +------------------------ + +Toutes méthodes que l'on peut appliquer à un objet population (colonne de +droite) s'affichent , et le type d'objet qu'elles renvoient (colonne de gauche). + +c'est a dire que les lignes de commandes qu'on ecrira seront de la forme:: + + objet_renvoyé_indiqué_à _gauche nomObjet = population.methode_ecrite_à _droite(argument de la methode); + +Il y a surtout deux grands types de méthodes : + +* les méthodes "get" : qui vont chercher un objet +* les méthodes "set" : qui assignent une valeur a un objet. + +Dans notre exemple on veut changer l'equation de mortalité naturelle, c est donc +un set ! + +On cherche une méthode qui parle de mortalité naturelle... +---------------------------------------------------------- + +On trouve getNaturalDeathRate() qui renvoit un objet equation (c'est l'objet +equation qui contient la valeur de l'equation de mortalite naturelle remplie par +l'utilisateur) et setNaturalDeathRate(Equation naturalDeathRate) pour laquelle +on doit passer un objet equation (une equation de naturalDeathRate) en argument. + +(en cliquant sur le nom de la méthode on a une description sommaire de ce +qu'elle fait) + +setNaturalDeathRate() parait être ce qu'on veut faire... +mais la méthode setNaturalDeathRate prend en argument une equation, on ne peut +donc pas faire:: + + pop.setNaturalDeathRate(mortalitenaturelle); + +puisque mortalitenaturelle n'est pas une equation mais un string. + + +Créer une équation +------------------ + +Du coup il faut trouver autre chose qui fasse le lien entre un string et une +equation. En cliquant sur "equation" dans la page d'API on tombe sur la page des +méthodes qui s'appliquent aux objets qui sont des equations. On trouve une +méthode .setContent(String ) qui prend en argument un string. Ca veut dire que +si on a une equation, on peut lui changer sa valeur en utilisant cette methode +avec un string en argument. +L'equation dont on veut changer la valeur on sait la récupérer:: + + Equation eqMortalite = pop.getNaturalDeathRate(); + +L'objet eqMortalite est un objet equation:: + + eqMortalite.setContent(mortalitenaturelle); + +et là on a le droit vu que mortalitenaturelle est un string et que la méthode +prend un string en argument. + +et voilà c'est fait ! + +remarque : on pourrait le faire en 1 ligne:: + + pop.getNaturalDeathRate().setContent(mortalitenaturelle); + +.. _Modele ISIS-Fish:: http://isis-fish.labs.libre-entreprise.org/wiki-moin/instance/cgi-bin/moin.c... Added: isis-fish/trunk/src/site/rst/documentation/tutorials/utilCaparmor.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials/utilCaparmor.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials/utilCaparmor.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,33 @@ +Quelques commande utiles sur CAPARMOR (ou un autre supercalculateur) +==================================================================== + +Sur CAPARMOR quand vous êtes logués sous votre nom, +tous les fichiers de simulation sont dans le répertoire isis-tmp + +Lire les logs +------------- + +En cas de plantage pour consulter les logs, lire le fichier simulation-sim...-output.txt:: + + cat simulation-sim...-output.txt + +Relancer les simulations d'un plan +---------------------------------- + +Si besoin de relancer les simus d'un plan (simu 5 à 10 par ex):: + + qsub -J 5-10 simulation-sim_...-script.seq + +Récupérer des résultats récalcitrants +------------------------------------- + +Si la simulation s'est terminée mais les résultats n'ont pas été rapatriés, il +faut récupérer le fichier simulation-sim_...-result.zip en le copiant sur le +serveur d'échange par exemple :: + + cp *-result.zip /home/navidad/partages/echange/sigrid + +Commandes Unix +-------------- +Une page web bien utile pour les commandes Unix en general : +http://www.infres.enst.fr/~danzart/unix_abrege.html#exemples \ No newline at end of file Added: isis-fish/trunk/src/site/rst/documentation/tutorials.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/tutorials.rst (rev 0) +++ isis-fish/trunk/src/site/rst/documentation/tutorials.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -0,0 +1,24 @@ +Liste des tutoriels +=================== + +* `Premiere utilisation d ISIS-Fish`_ +* `Exemple de parametrisation d une pecherie`_ +* `Les plans d analyse`_ +* `Tutoriaux JAVA`_ +* `Un site tres pedagogique pour apprendre a programmer en JAVA`_ +* `Comment utiliser les APIs`_ +* `Quelques commandes utiles pour les simulations sur CAPARMOR`_ + +.. _Premiere utilisation d ISIS-Fish:: tutorials/firstLaunch.html + +.. _Tutoriaux JAVA:: http://java.sun.com/docs/books/tutorial/ + +.. _Un site tres pedagogique pour programmer en JAVA:: http://www.siteduzero.com/tutoriel-3-10601-programmation-en-java.html + +.. _Quelques commandes utiles pour les simulations sur CAPARMOR:: tutorials/utilCaparmor.html + +.. _Les plans d analyse:: tutorials/analysisPlan.html + +.. _Exemple de parametrisation d une pecherie::tutorials/parameterising.html + +.. _Comment utiliser les APIs:: tutorials/useAPI.html Modified: isis-fish/trunk/src/site/rst/documentation/userManual/analysisPlan.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/userManual/analysisPlan.rst 2010-06-02 08:02:53 UTC (rev 3053) +++ isis-fish/trunk/src/site/rst/documentation/userManual/analysisPlan.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -42,7 +42,7 @@ Il est possible de définir des attributs dans la classe qui seront automatiquement paramÚtrable par l'interface de sélection des plans -d'analyses. Ces attributs doivent commencer par le préfix **param_** +d'analyses. Ces attributs doivent commencer par le préfix **\param_** et être soit de type primitif (String, int, double, ...), soit de type Date ou Mois, soit de type entité (Metier, Stratégies, ...). @@ -90,8 +90,9 @@ Récupération d'une simulation précédente ======================================== -exemple:: - // reccupération de la simulation n +Exemple:: + + // récupération de la simulation n SimulationStorage firstSim = context.getSimulation(n); ATTENTION : @@ -102,12 +103,10 @@ nextSimulation et lastSimulation selon que l'on est en beforeSimulation ou en afterSimulation. - - Récupération des résultats d'une simulation =========================================== -exemple:: +Exemple:: ResultStorage results = sim.getResultStorage(); MatrixND n = results.getMatrix(ResultName.MATRIX_ABUNDANCE); @@ -115,17 +114,17 @@ Modification de la base de données pour la prochaine simulation =============================================================== -exemple:: +Exemple:: TopiaContext db = nextSimulation.getStorage(); MetierDAO dao = IsisFishDAOHelper.getMetierDAO(db); Metier metier = dao.findByName("Mon metier"); metier.setGearParameterValue("30"); -Exemple de méthode next qui modifie le paramÚtre de l'engin -=========================================================== +Méthode next qui modifie le paramÚtre de l'engin +================================================ -:: +Exemple:: public boolean next(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { String [] values = new String[]{"10", "20", "30"}; @@ -149,27 +148,32 @@ du paramÚtre controlable de l'engin pour le métier *Mon metier*. Une fois ces trois simulations faites le plan s'arrêtera. -Des tutoriaux et exemples de plans d'analyse pour l'analyse de sensibilité et la calibration -============================================================================================ -sont disponibles : +Tutoriaux et exemples de plans d'analyse pour l'analyse de sensibilité et la calibration +======================================================================================== -http://isis-fish.labs.libre-entreprise.org/wiki-moin/instance/cgi-bin/moin.c... +Tutoriaux_ -Pense bête : avant de lancer un plan d'analyse -============================================== +.. _Tutoriaux::tuto/PlanAnalyse.html -vérifier: +Pense bête avant de lancer un plan d'analyse +============================================ +Vérifier: + * Les effectifs initiaux -* la présence des rÚgles de gestion (non ajoutées par le plan) +* La présence des rÚgles de gestion (non ajoutées par le plan) -* Le nom de la simu +* Le nom de la simulation -remarque : Il peut etre pratique si on suit une matrice d'expérience de faire figurer dans le nom le numero de la premiere ligne lancée : exemple "planMPA_54" si on lance le plan a partir de la ligne 54 de la matrice, isis appelera la premiere simu "planMPA_54 2008-11-13-16-50_0" et en sommant les 2 chiffres on retrouve ... le numero de la ligne, pratique pour l'exploitation des résultats. +Remarque : Il peut etre pratique si on suit une matrice d'expérience de faire +figurer dans le nom le numero de la premiere ligne lancée : exemple "planMPA_54" +si on lance le plan a partir de la ligne 54 de la matrice, isis appelera la +premiÚre simu "planMPA_54 2008-11-13-16-50_0" et en sommant les 2 chiffres on +retrouve ... le numero de la ligne, pratique pour l'exploitation des résultats. -* vérifier les paramÚtres du plan : en particulier qu on a bien entré la ligne de la matrice d'expérience à laquelle commencer les simulations ou encore le chemin d'acces aux fichiers à charger +* Les paramÚtres du plan : en particulier qu'on a bien entré la ligne de la matrice d'expérience à laquelle commencer les simulations ou encore le chemin d'accÚs aux fichiers à charger -* que les resultats a exporter et sauvegarder sont selectionnés et que le repertoire d'export est correct +* Que les resultats à exporter et sauvegarder sont selectionnés et que le repertoire d'export est correct -* enfin verifier la duree de simulation et c'est parti ! +* La durée de simulation et c'est parti ! Modified: isis-fish/trunk/src/site/rst/documentation/userManual.rst =================================================================== --- isis-fish/trunk/src/site/rst/documentation/userManual.rst 2010-06-02 08:02:53 UTC (rev 3053) +++ isis-fish/trunk/src/site/rst/documentation/userManual.rst 2010-06-10 09:24:04 UTC (rev 3054) @@ -11,6 +11,7 @@ + `Editeur de script`_ + `Queue de simulation`_ - `Plan d experience-Plan d analyse`_ +- `Analyses de sensibilite`_ .. _Introduction:: userManual/introduction.html .. _Interface utilisateur:: userManual/GUI.html @@ -20,4 +21,5 @@ .. _Rendu des resultats:: userManual/results.html .. _Editeur de script:: userManual/scripts.html .. _Queue de simulation:: userManual/queue.html -.. _Plan d experience-Plan d analyse:: userManual/analysisPlan.html \ No newline at end of file +.. _Plan d experience-Plan d analyse:: userManual/analysisPlan.html +.. _Analyses de sensibilite:: ../downloads/manuel_sensitivity.pdf \ No newline at end of file Modified: isis-fish/trunk/src/site/site_fr.xml =================================================================== --- isis-fish/trunk/src/site/site_fr.xml 2010-06-02 08:02:53 UTC (rev 3053) +++ isis-fish/trunk/src/site/site_fr.xml 2010-06-10 09:24:04 UTC (rev 3054) @@ -21,9 +21,7 @@ <body> <links> <item name="Ifremer" href="http://www.ifremer.fr/"/> - <item name="Code Lutin" href="http://www.codelutin.com/"/> <item name="Site scientifique" href="http://www.ifremer.fr/isis-fish/index.html"/> - <item name="Labs" href="http://labs.libre-entreprise.org/projects/isis-fish"/> <item name="[fr" href="http://isis-fish.labs.libre-entreprise.org/index.html"/> <item name="en]" href="http://isis-fish.labs.libre-entreprise.org/en/index.html"/> </links> @@ -35,8 +33,8 @@ <item name="Documentation" href=""> <item name="Installation" href="documentation/installation.html"/> <item name="Manuel utilisateur" href="documentation/userManual.html"/> - <item name="Tutoriaux" href=""/> - <item name="FAQ" href=""/> + <item name="Tutoriaux" href="documentation/tutorials.html"/> + <item name="FAQ" href="documentation/FAQ.html"/> <item name="Manuel développeur" href=""/> <item name="Documentation des APIs" href=""/> <item name="Exemples de scripts ISIS" href=""/>
participants (1)
-
jcouteau@users.labs.libre-entreprise.org