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