-------- Message original --------
Sujet: questions urgentes
Date: Thu, 2 Apr 2009 14:00:07 +0000 (GMT)
De: chirine HUSSEIN <m475chi@yahoo.fr>
Pour: Sigrid LEHUTA <Sigrid.Lehuta@ifremer.fr>
salut sigrid,
j'ai une petite questions concernant la matix d'expérience . comment on
peut savoir les nommes des colonnes correspondant à quelle paramètre, ?
par exemple dans mon cas j'ai 5 paramètre( capturalité, croissance,
mortalité, standardisation et sélectivité) comment je peut savoir que
la 1èr colonne concerne quel parameter? je ne sais pas si ma question
est clair ?
Autre chose:
Dans mon ancien script j'ai considérer le même coefficient de
capturalité pour tous les group d'âge et dans toute les saison,
mantenat je voudrais varier la valeur pendant deux saison (avril, et
mai-juin) et pour les classe d'age (4,5,6,7). comme dans le table
suivant:
*/Classe de stage /*
Mars-Mars
Avril-Avril
Mai-Juin
Juillet-septembre
Octobre-octobre
Novembre-Février
C0
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
C1
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
C2
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
C3
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
8*10^-4
C4
8*10^-4
19*10^-4
19*10^-4
8*10^-4
8*10^-4
8*10^-4
C5
8*10^-4
19*10^-4
19*10^-4
8*10^-4
8*10^-4
8*10^-4
C6
8*10^-4
19*10^-4
19*10^-4
8*10^-4
8*10^-4
8*10^-4
C7
8*10^-4
19*10^-4
19*10^-4
8*10^-4
8*10^-4
8*10^-4
j'ai essayé, mais je ne sais pas comment ça sera le fichier txt du
parcmètre de la capturalité?
je vous envoie ce que j'ai fait dans le script et avec les fichier de
paramètres.
as-tu un peu de temps de regarder ça surtout les fichier. txt des
paramètres car j'ai l'impression qu'il y a une erreur?
merci bien.
à++
chirine
-1=0.00008
1=0.008
-1=0;5;7.2;10.2;13.9;17.4;20.4;23.2;25.6
1=0;9.2;12.2;15.9;19.4;21.4;25.2;27.6;47
1;1;1;1;1
1;1;1;1;-1
1;1;1;-1;1
1;1;-1;1;1
1;-1;1;1;1
-1;1;1;1;1
-1;-1;1;1;1
-1;1;-1;1;1
-1;1;1;-1;1
-1;1;1;1;-1
1;-1;-1;1;1
1;-1;1;-1;1
1;-1;1;1;-1
1;1;-1;-1;1
1;1;-1;1;-1
1;1;1;-1;-1
-1;-1;-1;1;1
-1;-1;1;-1;1
-1;1;-1;-1;1
-1;1;1;-1;-1
-1;1;-1;1;-1
-1;-1;1;1;-1
1;-1;1;-1;-1
1;-1;-1;1;-1
1;-1;-1;-1;1
1;1;-1;-1;-1
-1;-1;-1;-1;1
-1;1;-1;-1;-1
-1;-1;1;-1;-1
-1;-1;-1;1;-1
1;-1;-1;-1;-1
-1;-1;-1;-1;-1
-1=if (group == null) return 18.4;else if (group.getId() == 0) return 0.60;else if (group.getId() < 3) return 0.62;else return 0.04;
1=if (group == null) return 55.3;else if (group.getId() == 0) return 0.95; else if (group.getId() < 3) return 0.92;else return 0.34;
-1=if (group.getLength()<=15.5) return 0.0;else if (group.getLength()<=18.7) return 0.25;else if (group.getLength()<=21.9) return 0.62;else if (group.getLength()<=31.5) return 0.80;else return 1;
1=if (group.getLength()<=15.5) return 0.20;else if (group.getLength()<=18.7) return 0.37;else if (group.getLength()<=21.9) return 0.94;else if (group.getLength()<=31.5) return 1;else return 1;
-1=if (group.getLength()<=4.9) return 0.0;else if (group.getLength()<=7)return 0.06;else if (group.getLength()<=9.3)return 0.69;else if (group.getLength()<=10.2)return 0.05;else return 0;
1=if (group.getLength()<=4.9) return 0.0;else if (group.getLength()<=7)return 0.09;else if (group.getLength()<=9.3)return 0.99;else if (group.getLength()<=10.2)return 0.07;else return 0;
-1=if (metier.getGearParameterValueAsDouble()<=50) return (1/(1+(Math.exp(-2.04*(group.getLength()-11.82)))));else if (metier.getGearParameterValueAsDouble()<=60) return (1/(1+(Math.exp(-2.45*(group.getLength()-17.74)))));else if (metier.getGearParameterValueAsDouble()<=70) return (1/(1+(Math.exp(-2.86*(group.getLength()-16.56)))));else if (metier.getGearParameterValueAsDouble()<=80) return (1/(1+(Math.exp(-3.27*(group.getLength()-18.92)))));else return 1;
1=if (metier.getGearParameterValueAsDouble()<=50) return (1/(1+(Math.exp(-2.04*(group.getLength()-17.74)))));else if (metier.getGearParameterValueAsDouble()<=60) return (1/(1+(Math.exp(-2.45*(group.getLength()-21.288)))));else if (metier.getGearParameterValueAsDouble()<=70) return (1/(1+(Math.exp(-2.86*(group.getLength()-24.84)))));else if (metier.getGearParameterValueAsDouble()<=80) return (1/(1+(Math.exp(-3.27*(group.getLength()-28.38)))));else return 1;
-1=if (group.getLength()<=16.2) return 0.0;else if (group.getLength()<=19.3) return 0.30;else if (group.getLength()<=23) return 0.22;else if (group.getLength()<=30) return 0.20;else return 0;
1=if (group.getLength()<=16.2) return 0.0;else if (group.getLength()<=19.3) return 0.456;else if (group.getLength()<=23) return 0.52;else if (group.getLength()<=30) return 0.30;else return 0;
-1=if (group.getLength()<=12) return 0;else if (group.getLength()<=18) return 0.25;else if (group.getLength()<=28.25) return 0.25;else if (group.getLength()<=38) return 0.30;else return 0;
1=if (group.getLength()<=12) return 1;else if (group.getLength()<=18) return 0.73;else if (group.getLength()<=28.25) return 0.37;else if (group.getLength()<=38) return 0.45;else return 0;
-1=if (group.getLength()<=12) return 0;else if (group.getLength()<=18) return 0.25;else if (group.getLength()<=28.25) return 0.25;else if (group.getLength()<=38) return 0.31;
1=if (group.getLength()<=12) return 1;else if (group.getLength()<=18) return 0.37;else if (group.getLength()<=28.25) return 0.37;else if (group.getLength()<=38) return 0.46;else return 0;
-1=0.07;0.14;0.046;0.8;0.06;0.15
1=0.11;0.21;0.07;1.2;0.09;0.226
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;
/**
* Sensibility.java
*
* Created: 21 décembre 2008
*
* @author HUSSEIN chirine <m475chi@yahoo.fr>
*
*/
public class Sensibility implements AnalysePlan {
/** to use log facility, just put in your code: log.info("..."); */
static private Log log = LogFactory.getLog(Sensibility.class);
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 SELECTIVITYFiletMer = "selectivityFiletMer";
static private final String SELECTIVITYFiletEtang = "selectivityFiletEtang";
static private final String SELECTIVITYLignecote = "selectivityLignecote";
static private final String SELECTIVITYLigneemb = "selectivityLigneemb";
static private final String SELECTIVITYChalut = "selectivityChalut";
static private final String SELECTIVITYHarpon = "selectivityHarpon";
static private final String CATCHABILITY = "capturabilite";
static private final String MORTALITY = "mortalite";
static private final String STANDARDISATION = "standardisation";
//static private final String AMP = "amp";
//static private final String AMP1 = "ampRPrepro_Lignecote";
//static private final String AMP2 = "ampRPrepro_FiletMer";
///////////* completer ici avec tous les fichiers .txt des amp
public int param_parameterNumber = 5; /// 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 = 32;/// ce paramètre n'est normalement pas modifié
public String param_directory = "C:/Documents and Settings/hussein/Bureau/isis-fish-3.1.3/isis-fish-3.1.3/fichier paramètres//"; /// 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 5 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 cette regle
*/
public void init(AnalysePlanContext context) throws Exception {
/// Création de la matrice d'expérience et chargement :
File dir = new File(param_directory);
File csvFile = new File(dir, MATRIX + ".txt");
log.info("CSV file is : " + csvFile.getAbsolutePath());
if(!csvFile.exists()) {
log.warn("File doesn't exists");
}
matrix = MatrixFactory.getInstance().create(new int[]{param_simulationNumber, param_parameterNumber});
matrix.importCSV(new FileReader(csvFile), new int[]{0,0});
matrix.setSemantics(1, Arrays.asList(new String[]{VBGF,CATCHABILITY,MORTALITY,SELECTIVITY, STANDARDISATION}));
System.out.println(matrix);
/// ajout des regles qui sont modifiées par le plan
//context.getParam().addExtraRules("Cantonnement","Cantonnement","Cantonnement","Cantonnement","Cantonnement","Cantonnement");
////////////* tu dois ecrire cantonnement 11 fois si tu as 11 regles 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
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,String col, 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 , col);
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, String col, 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 , col);
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 = context.getNumber()+ 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 mortality = getString (MORTALITY,MORTALITY, simNum);
//String selectivity = getString (SELECTIVITY, simNum);
String selectivityFiletMer = getString (SELECTIVITYFiletMer,SELECTIVITY, simNum);
String selectivityFiletEtang = getString (SELECTIVITYFiletEtang,SELECTIVITY, simNum);
String selectivityLignecote = getString (SELECTIVITYLignecote,SELECTIVITY, simNum);
String selectivityLigneemb = getString (SELECTIVITYLigneemb,SELECTIVITY, simNum);
String selectivityChalut = getString (SELECTIVITYChalut,SELECTIVITY, simNum);
String selectivityHarpon = getString (SELECTIVITYHarpon,SELECTIVITY, simNum);
double [] standardisation = getList (STANDARDISATION , simNum);
//Rule amp1 = getRule(context.getParam().getRegion(), AMP1, AMP, simNum);
//Rule amp2 = getRule(context.getParam().getRegion(), AMP2, AMP, simNum);
///////////////* à completer avec le reste des amp*/
/// On peut afficher des informations dans les logs
/// 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("lastAMP1"));
// on nomme la regle que l'on va ajouter LastAMP (pour pouvoir la retrouver a la simulation suivante)
//context.setValue("lastAMP1", amp1);
// on ajoute la regle à la simulation
// paramRules.add(amp1);
//paramRules.remove(context.getValue("lastAMP2"));
//context.setValue("lastAMP2", amp2);
//paramRules.add(amp2);
/////////////////* à completer avec les autres 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("CSar");
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();
Object [] sem = i.getSemanticsCoordinates();
PopulationGroup group = (PopulationGroup)sem[0];
PopulationSeasonInfo season = (PopulationSeasonInfo)sem[1];
if (season.getFirstMonth().after(Month.JANUARY) && group.getId() >=4){ //mois >= avril && groupID >= 4
i.setValue(0.0019);
}else {
i.setValue(0.0008);
}
i.setValue(catchability);
}
// modif la mortalité naturelle
/// On modifie la valeur de la base en la remplacant par la valeur contenue dans la modalité
for (PopulationGroup group : groups) {
Equation eq = pop.getNaturalDeathRate();
eq.setContent(mortality);
}
// modif les facteurs de standardisation
/// On modifie la valeur de la base en la remplacant par la valeur contenue dans la modalité
for (Gear gear : gears) {
if ("FiletMer".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[0]);
}else if("Lignecote".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[1]);
}else if("Harpon".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[2]);
}else if("chalut".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[3]);
}else if("Ligneemb".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[4]);
}else if("FiletEtang".equals(gear.getName())) {
gear.setStandardisationFactor(standardisation[5]);
/////////////*a completer
}
}
/// modif selectivité
/// On remplace l'equation existante par une autre equation
for (Gear gear : gears) {
if ("FiletMer".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityFiletMer);
} else if ("FiletEtang".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityFiletEtang);
}else if ("Lignecote".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityLignecote);
}else if ("Ligneemb".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityLigneemb);
}else if ("Chalut".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityChalut);
}else if ("Harpon".equals(gear.getName())) {
Selectivity sel = gear.getPopulationSelectivity(pop);
Equation eq = sel.getEquation();
eq.setContent(selectivityHarpon);
}
}
tx.commitTransaction();
return true;
}else {
return false;
}
}
/**
* 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 afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception {
return true;
}
}
_______________________________________________
Isis-fish-user mailing list
Isis-fish-user@lists.labs.libre-entreprise.org
http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-user