voici le code utilisé pour le faire, mais qui marche pas :-( et les
fichiers chargés
Le chargement des fichiers, la creation de l equation, la modif de l
equation se passent bien, mais la modification n entre pas action.
merci d avance
Sigrid
--
Sigrid LEHUTA
~ ><> ~
Doctorante
Département Ecologie et Modèles pour l'Halieutique
IFREMER, rue de l'ile d'Yeu BP 21105
44311 Nantes Cedex 03
Tél : +33 (0)2 40 37 41 65
package rules;
import java.io.*;
import java.util.HashSet;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;
import java.io.File;
import java.io.Writer;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.util.Collection;
import java.util.Collections;
import org.codelutin.topia.TopiaContext;
import fr.ifremer.isisfish.IsisFishDAOHelper;
import static org.codelutin.i18n.I18n._;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.math.matrix.*;
import org.codelutin.util.FileUtil;
import scripts.ResultName;
import scripts.RuleUtil;
import scripts.SiMatrix;
import fr.ifremer.isisfish.entities.*;
import fr.ifremer.isisfish.entities.Metier;
import fr.ifremer.isisfish.entities.Population;
import fr.ifremer.isisfish.entities.Species;
import fr.ifremer.isisfish.entities.Strategy;
import fr.ifremer.isisfish.entities.StrategyMonthInfo;
import fr.ifremer.isisfish.entities.TargetSpecies;
import fr.ifremer.isisfish.rule.AbstractRule;
import fr.ifremer.isisfish.simulator.MetierMonitor;
import fr.ifremer.isisfish.simulator.PopulationMonitor;
import fr.ifremer.isisfish.simulator.SimulationContext;
import fr.ifremer.isisfish.types.Date;
import fr.ifremer.isisfish.types.Month;
import fr.ifremer.isisfish.simulator.SimulationParameter;
import fr.ifremer.isisfish.datastore.SimulationStorage;
import fr.ifremer.isisfish.datastore.ResultStorage;
/**
*RUM_multinomial.java
*
* Created: 31 aout 2007
*
* @author sigrid
* @version $Revision: 1.3 $
*
* Last update: $Date: $
* by : $Author: sigrid $
*/
/**
* RUM utilise les RUM pour predire a chaque mois la proportion de chaque metier realisé par les pecheurs
*en fonction des abondance par zone, de la biomasse totale et des VPUE realisees sur les metiers le mois
*precedant et l annee precedante
* ATTENTION ce code est valable si un metier n est pratiqué que dans une et une seule strategie
*/
public class Survies_larves_20002007_Anchois extends AbstractRule {
/** to use log facility, just put in your code: log.info("..."); */
static private Log log = LogFactory.getLog(Survies_larves_20002007_Anchois.class);
public Population param_pop = null;
public int param_anneeDebut = 0;
protected String nomfichier_SurviesGironde = "Inputs_Anchois/SurviesLarves/SurviesGironde.csv";
protected String nomfichier_SurviesLandesC = "Inputs_Anchois/SurviesLarves/SurviesLandesC.csv";
protected String nomfichier_SurviesLandesO = "Inputs_Anchois/SurviesLarves/SurviesLandesO.csv";
protected String nomfichier_SurviesRochebonne = "Inputs_Anchois/SurviesLarves/SurviesRochebonne.csv";
protected String nomfichier_SurviesNorth = "Inputs_Anchois/SurviesLarves/SurviesNorth.csv";
protected File fileSurviesGironde;
protected File fileSurviesLandesC;
protected File fileSurviesLandesO;
protected File fileSurviesRochebonne;
protected File fileSurviesNorth;
protected MatrixND matSurviesGironde;
protected MatrixND matSurviesLandesC;
protected MatrixND matSurviesLandesO;
protected MatrixND matSurviesRochebonne;
protected MatrixND matSurviesNorth;
protected String [] necessaryResult = {
};
/**
* @return the necessaryResult
*/
public String[] getNecessaryResult() {
return this.necessaryResult;
}
/**
* Permet d'afficher a l'utilisateur une aide sur la regle.
* @return L'aide ou la description de la regle
*/
public String getDescription() {
return _("les survies des larves dépendent de la zone du mois et de l'année");
}
/**
* 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(SimulationContext context) throws Exception {
// load survival by area
if (nomfichier_SurviesGironde==null || "".equals(nomfichier_SurviesGironde)){
fileSurviesGironde = FileUtil.getFile(".*.csv", "fichierSurviesGironde csv séparateur ';'");
fileSurviesLandesC = FileUtil.getFile(".*.csv", "fichierSurviesLandesC csv séparateur ';'");
fileSurviesLandesO = FileUtil.getFile(".*.csv", "fichierSurviesLandesO csv séparateur ';'");
fileSurviesRochebonne = FileUtil.getFile(".*.csv", "fichierSurviesRochebonne csv séparateur ';'");
fileSurviesNorth = FileUtil.getFile(".*.csv", "fichierSurviesNorth csv séparateur ';'");
} else {
fileSurviesGironde = new File(nomfichier_SurviesGironde);
fileSurviesLandesC = new File(nomfichier_SurviesLandesC);
fileSurviesLandesO = new File(nomfichier_SurviesLandesO);
fileSurviesRochebonne = new File(nomfichier_SurviesRochebonne);
fileSurviesNorth = new File(nomfichier_SurviesNorth);
}
int [] dimMatrix = {8,5}; // 8 years , 5 month (april to august)
matSurviesGironde = MatrixFactory.getInstance().create(dimMatrix);
matSurviesLandesC = MatrixFactory.getInstance().create(dimMatrix);
matSurviesLandesO = MatrixFactory.getInstance().create(dimMatrix);
matSurviesRochebonne = MatrixFactory.getInstance().create(dimMatrix);
matSurviesNorth = MatrixFactory.getInstance().create(dimMatrix);
matSurviesGironde.importCSV(new FileReader(fileSurviesGironde),new int []{0,0});
matSurviesLandesC.importCSV(new FileReader(fileSurviesLandesC),new int []{0,0});
matSurviesLandesO.importCSV(new FileReader(fileSurviesLandesO),new int []{0,0});
matSurviesRochebonne.importCSV(new FileReader(fileSurviesRochebonne),new int []{0,0});
matSurviesNorth.importCSV(new FileReader(fileSurviesNorth),new int []{0,0});
System.out.println("matSurviesGironde "+matSurviesGironde);
System.out.println("matSurviesLC "+matSurviesLandesC);
System.out.println("matSurviesLO "+matSurviesLandesO);
System.out.println("matSurviesRochebonne "+matSurviesRochebonne);
System.out.println("matSurviesNorth "+matSurviesNorth);
}
/**
* La condition qui doit etre vrai pour faire les actions
* @param simulation La simulation pour lequel on utilise cette regle
* @return vrai si on souhaite que les actions soit faites
*/
public boolean condition(SimulationContext context, Date date, Metier metier) throws Exception {
boolean result;
if (date.getMonth().after(Month.MARCH) & date.getMonth().before(Month.SEPTEMBER)){
result = true ;
}else{
result = false ;}
return result;
}
/**
* Si la condition est vrai alors cette action est executée avant le pas
* de temps de la simulation.
* @param simulation La simulation pour lequel on utilise cette regle
*/
boolean first = true ;
public void preAction(SimulationContext context, Date date, Metier metier) throws Exception {
if (first){ // on passe dans preaction pour la premiere fois
TopiaContext db = context.getDB();
PopulationDAO popDao = IsisFishDAOHelper.getPopulationDAO(db);
Population pop = popDao.findByName("Anchois_long");
Equation eqm = pop.getNaturalDeathRate();
int m = date.getMonth().getMonthNumber();
int y = date.getYear() + param_anneeDebut;
String M1 = "if (group == null){ return 0;} else if (group.getId() == 0 ){if (\"gironde\".equals(zone.getName())){return ";
String M2 = ";}else if (\"Rochebonne\".equals(zone.getName())) {return ";
String M3 = ";}else if (\"LandesCote\".equals(zone.getName())){return ";
String M4 = ";}else if (\"LandesLarge\".equals(zone.getName())){return " ;
String M5 = ";}else if (\"MigHiver\".equals(zone.getName())){return ";
String M6 = ";}else return 0;} else if (group.getId() == 1 ){ return 0 ; } else if (group.getId() == 2 ){ return 9.13896671274146 ; } else if (group.getId() == 3 ){ return 6.52011321674013 ; } else if (group.getId() == 4 ){ return 5.07483463318751 ; } else if (group.getId() == 5 ){ return 4.15653572014739 ; } else if (group.getId() == 6 ){ return 3.5208050737082 ; } else if (group.getId() == 7 ){ return 3.05436780362196 ; } else if (group.getId() == 8 ){ return 2.69743614913744 ; } else if (group.getId() == 9 ){ return 2.41544170418373 ; } else if (group.getId() == 10 ){ return 2.18699518587283 ; } else if (group.getId() == 11 ){ return 1.99814758538767 ; } else if (group.getId() == 12 ){ return 1.83941167360153 ; } else if (group.getId() == 13 ){ return 1.70410904289053 ; } else if (group.getId() == 14 ){ return 1.58740166718328 ; } else if (group.getId() == 15 ){ return 1.49 ; } else if (group.getId() == 16 ){ return 1.39 ; } else if (group.getId() == 17 ){ return 1.49 ; }else return 0;";
double Mgir = matSurviesGironde.getValue(y,m-3);
double Mroch = matSurviesRochebonne.getValue(y,m-3);
double Mlc = matSurviesLandesC.getValue(y,m-3);
double Mlo = matSurviesLandesO.getValue(y,m-3);
double Mnor = matSurviesNorth.getValue(y,m-3);
String [] mortality = new String[]{ M1+ Mgir +M2+ Mroch +M3+ Mlc +M4+ Mlo +M5+ Mnor +M6};
String mort = (String) mortality[0];
System.out.println("mortalité script = " + mort);
eqm.setContent(mort);
System.out.println("mortalité eq apres = " + eqm.getContent());
first = false;
}
}
/**
* Si la condition est vrai alors cette action est executée apres le pas
* de temps de la simulation.
* @param simulation La simulation pour lequel on utilise cette regle
*/
public void postAction(SimulationContext context, Date date, Metier metier) throws Exception {
first = true ;
}
}
482.646152997116;195.428006698645;100.767557167258;54.5382326176205;65.8263776364146
564.297781863851;242.919970589665;86.6924666046013;46.9837885054944;67.8023775879921
532.450235395318;284.94117561173;121.602614129021;62.5491653005985;71.6656158368191
371.769911641852;142.945432802726;32.2152551712958;13.6504370991488;36.5043864523914
487.751120299149;151.862286137456;52.9848740215926;27.0741815640922;36.914503594892
454.045660765549;166.101853831643;42.027212963564;24.6031456659913;47.5768115415776
421.392653391687;126.041499384882;40.3059657760999;19.4229623263974;34.7767961284731
275.316311714827;142.456488509557;65.6340581614108;44.0379188070786;57.0173936327874
420.049121768437;245.825766728695;125.666615556900;75.4514006126118;118.069736633825
419.737087137797;221.272294490353;119.462155170774;84.743257906494;103.868897545532
405.274973354915;275.376619402554;152.622788845715;116.661645680104;94.0126099978502
395.149517296069;157.144703810778;64.7440638161595;38.1175955943993;60.9632754596872
444.867643997375;129.754395239606;62.0277898102471;35.5690932572746;41.8273586458236
360.109746518636;181.254457198022;86.060945744895;53.0272881115597;65.7911426374896
272.524944310082;97.7854398643853;94.2684292194392;68.0849807524316;48.9303569921785
293.028983767031;147.230905382355;81.9900661100086;62.8482864911585;60.3727522138204
389.851208147199;191.671500905915;99.0707188248597;52.3787289568255;63.405847374595
409.487842455305;181.845468120247;88.3953312683854;51.39712190522;62.0871045074283
458.53447017977;273.349737054411;105.89377699875;55.4084348794133;75.7963171845776
306.966649746794;119.033943268359;31.5197441161778;18.7029932061692;40.8546328013588
433.690634441913;115.636521437954;41.4389942877871;20.9860335180067;25.9753497310537
287.776688162656;118.251308181650;41.1739528200933;27.6378746713106;58.0437522762351
260.341706183916;98.0938089813493;44.8672718826234;25.8136657538474;31.7317988693351
289.547245111867;134.130698015617;62.824864469657;49.2130613070821;59.1742219964028
583.435436969665;234.616091543236;105.983226810986;57.3410187932252;66.9082843231666
626.021391048509;289.800151656280;110.040184816313;52.7651554244978;70.887307620045
625.301571272277;391.382015917036;177.59019672571;79.141584112016;107.661276566124
441.274361605846;197.055326175134;48.2347559861519;16.5672582354084;34.190169829061
441.274361605846;197.055326175134;48.2347559861519;16.5672582354084;34.190169829061
459.282576609245;182.784496746626;51.0198966991206;21.8985003849582;38.5019020763538
479.79729467045;174.191782267231;44.6542933441983;23.4160850570683;46.1439043934687
354.205770676663;154.44416449603;74.2421797883066;53.0668045181763;66.4844093398165
379.831713914615;139.407731154085;87.554552499758;53.7433425106834;63.2200159256659
419.465704795218;156.626295678517;79.9783326489134;51.1018483031198;72.4674766331053
478.639287225625;216.113963873915;107.829862900870;66.9335213816832;87.6086944296763
307.253242098166;127.383613680122;36.2736844903452;15.9341123608746;38.2788506859653
431.739010945489;117.210337807274;49.7707151210573;27.123922524579;36.2791544206725
227.699803478469;109.211841166544;39.5235890260182;24.4287376521978;40.8477703719369
241.585186648693;104.384075837235;37.0104797442621;22.6323077501873;37.7956341424627
186.753014291613;112.256503622525;68.1744579196497;52.0203113985323;67.3861802068965