bonjour le modele de gravite tel qu'il est code actuellement 1/ ne fait pas ce que l'on avait demande : il calcule les facteurs d'attractivite en fonction des captures du mois precedent au lieu de l'annee precedente 2/ met beaucoup de temps a tourner j'ai absolument besoin de ce modele pour mes simulations. Face a l'urgence, Hilaire m'a file un coup de main pour resoudre le pb. Il a fait des corrections sur ce code pour bien calculer les facteurs d'attractivite et reduire le temps de simulation en declarant une variable supplementaire sur le parametre courant (calcul de la somme des debarquements sur les metiers de la strategie affecte a la strategie pour eviter de faire ce calcul pour tous les metiers). je mets en attache un fichier contenant le code de la regle gravite corrige. Les valeurs que j'obtiens pour ces sommes restent mysterieusement petites mais peut-etre est-ce du a ce pb entre temps de route et temps de la maree. Benjamin, peux-tu regarder tout ca ? a suivre ...................................................................... Stephanie MAHEVAS (Stephanie.Mahevas@ifremer.fr) IFREMER/MAERHA Tel: 02 40 37 41 81 Fax: 02 40 37 40 75 (Mathématiques Appliquées à l'Evaluation des Ressources Halieutiques et Aquacoles) rue de l'île d'Yeu BP 21105 44311 NANTES Cedex 03 http://www.ifremer.fr/maerha o \ o / _ o __| \ / |__ o _ \ o / o /|\ | /\ ___\o \o | o/ o/__ /\ | /|\ / \ / \ | \ /) | ( \ /o\ / ) | (\ / | / \ / \ ...................................................................... regle GRAVITE CONSTRUCTEUR ------------ var StringBuffer = Packages.java.lang.StringBuffer; var Date = Packages.fr.ifremer.nodb.Date; var XMLUtil = Packages.org.codelutin.xml.XMLUtil; this.param = param; //construction de p this.p = new Object(); this.p.paramRegle = this.param; this.p.SommeCPUEstrat=new Packages.java.util.HashMap(); Parametre ---------- this.p.metier = metier; this.p.date = date; this.p.suivie = suivie; this.p.gestionMetier = gestionMetier; Condition --------- // Il faut etre au moins au deuxieme pas de temps. return p.date.getAnnee() > 0; Action Avant ------------- writeln("Gravite Action avant metier:"+p.metier+ "date:"+ p.date); var d = p.date.preview(); var month = d.getMois(); var allStr = SiMatrice.getListStrategies(); for(var i=0; i<allStr.size(); i++){ var str = allStr.get(i); // on fait les calcules a partir du mois precedent var strMonthInfo = str.getStrategyMonthInfo(month); var propStrMet = strMonthInfo.getPropStrMetier(p.metier); if(propStrMet != null){ // si null, alors le metier n'est pas pratiqué par cette strategie var prop = strMonthInfo.getProportionMetier(p.metier); var metiers=str.getSetOfVessels().getMetiers(); var somme=0; var newProp=GravityModel.landingPerUnitFishingEffort(str, p.metier, d); if (!p.SommeCPUEstrat.containsKey(str)){ for (var imetiers=metiers.iterator();imetiers.hasNext();){ var metier=imetiers.next(); somme += GravityModel.landingPerUnitFishingEffort(str, metier, d); p.SommeCPUEstrat.put(str,somme); } } writeln(" !!!!!!!!!!!!!!!somme =" + p.SommeCPUEstrat.get(str)); var newPropDiv = newProp / p.SommeCPUEstrat.get(str); // on recupere celui du mois courant, pour le modifier strMonthInfo = str.getStrategyMonthInfo(p.date.getMois()); strMonthInfo.setProportionMetier(p.metier, newPropDiv); } } writeln("fin Gravite Action avant oldProp:"+prop+" newProp:"+ newProp+ " newPropDiv:"+newPropDiv); return p.gestionMetier; Action Apres ------------ writeln("Action apres"); p.SommeCPUEstrat.clear(); return p.gestionMetier;