Salut Hilaire, Je viens de faire les modifications de ton précédent mail. J'ai supprimé les vieilles règles de gestion et j'ai copié collé ton script dans cantonnementannee avec le ";" en plus. Malgré ça les simulations échouent toujours... de même que la règle "tactaille" j'envoie le message d'erreur et ma base si tu veux regarder... Les simulations se font sur la zone Banyuls avec toutes les stratégies. merci, marie
From: Hilaire DROUINEAU <Hilaire.Drouineau@ifremer.fr> To: Marie Capoulade <mcapoulade@hotmail.com> Subject: Re: Sa Date: Thu, 18 Aug 2005 15:37:51 +0200
Re-bonjour, j'ai repris ta base sur la liste bug. J'y ai supprimé les règles TAChaut et bas, cantenginS1 et S2 (ce sont de vieilles règles que j'avais écris spécifiquement pour mon étude et qui peuvent causer des problèmes avec les nouvelles versions) à partir de l'interface d'edition de règles de gestion, puis j'ai remis ma règle cantonnementannee (correction: dans condition: ajouter un ";" après "mailleMetier.retainAll(p.mailles)"). Chez moi ça tourne. Si ça marche essaie de retirer le symbole "//" dans action avant sur la ligne "// var metChomage = MetierFactory.findByKey("nonActivite", p.metier.getRegion());" et " InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(p.metier));" (tu as bien un métier nonActivite?). Après il ne te reste plus qu'à regarder si ça fait bien ce que tu veux... Bonne chance et tiens moi au courant Hilaire
Marie Capoulade a écrit:
Salut, merci beaucoup pour avoir écrit tout ca mais je suis désolée, la règle ne fonctionne pas, je t'envoie l'erreur texte. Si tu peux y jeter un coup d'oeil ! J'ai lancé un cantonnementannee sur l'engin Hamecon_cote sur la zone Ligne_cote+reserve. Re-merci marie
From: Hilaire DROUINEAU <Hilaire.Drouineau@ifremer.fr> To: mcapoulade@hotmail.com Subject: Sa Date: Thu, 18 Aug 2005 12:21:36 +0200
Salut voici une règle fermeture de zone qui a l'air de marcher: copie le contenu du fichier joint sur la règle cantonnementannee et ça doit marcher. Elle peut s'appliquer à un engin ou à tous (faire le modif indiquéee dans condition) elle s'applique de la période datedeb à datefin et entre les mois moisdeb et moisfin. Les pêcheurs réduisent leur zones de pêche en conséquence et arrête de pratiquer le métier si la zone est entièrement fermée Bonne chance
Hilaire --
Hilaire Drouineau IFREMER, département EMH Centre de Nantes - BP 21105 - 44311 Nantes Cedex 3 tel : +33 (0)2 40 37 43 06 - fax : +33 (0)2 40 37 40 75 email : hilaire.drouineau@ifremer.fr - web : http://www.ifremer.fr *****************************************************************
///////////////////////////////////////////////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; //la zone de fermeture this.p.zone= this.param.getValue("zone"); writeln("zone:"+this.p.zone); //les mailles du secteur de fermeture this.p.mailles = this.p.zone.getMaille();
this.p.dateDeb=this.param.getValue("dateDeb"); this.p.dateFin=this.param.getValue("dateFin");
this.p.moisDeb=this.param.getValue("moisDeb"); this.p.moisFin=this.param.getValue("moisFin"); this.p.engin=this.param.getValue("engin");
///////////////////////////////PARAMETRE this.p.metier = metier; this.p.date = date; this.p.suivie = suivie; this.p.gestionMetier = gestionMetier;
/////////////////////////////////////////CONDITION
writeln("condition fermeture zone"); var mois = p.date.getMois().getNumMois(); writeln("mois:"+mois); if(!(p.moisDeb<=mois && mois<=p.moisFin)) return false; writeln("on est dans l'espace des mois possible"); //on est dans l'espace des mois possible if(p.date.before(p.dateDeb)) return false; if(p.date.after(p.dateFin)) return false; if (!p.metier.getEngin().equals(p.engin)) //ligne à retirer si tu veux que la fermeture s'applique à tous les engins return false; //ligne à retirer si tu veux que la fermeture s'applique à tous les engins
var mailleMetier = p.metier.getSecteurMois(p.date.getMois()).getMaille();
// s'il y a une intersection avec la zone ferme, alors la regle s'applique mailleMetier.retainAll(p.mailles) var result = mailleMetier.size() != 0;
if(result) writeln("===== Fermeture Zone s'applique ======"); return result;
/////////////////////////////////ACTION AVANT writeln("Cantonnement zone Action avant metier:"+p.metier); writeln("Les mailles fermees sont:"+p.mailles);
var zoneMetier = p.metier.getSecteurMois(p.date.getMois()); var mailleMetier = zoneMetier.getMaille().copy(); mailleMetier.removeAll(p.mailles); writeln("inter maille:"+mailleMetier.size()); // test pour savoir si toute la zone de pratique du metier // (reunion de toutes les zones metiers de metier a date) // est totalement incluse dans la zone Cantonnement if (mailleMetier.size() != 0){ //le cas intersection.length==mailleMetier est dans condition // si toute la zone de pratique du metier n'est pas incluse dans zone Cantonnement
//creation du nouveau secteur de metier var secteurResult = MetaSecteurFactory.create("MetaCantonnement-"+p.metier.getNom()+"-"+date.getDate(), p.metier.getRegion(), "Secteur creer durant la simulation."); writeln("nouveau secteur cree:"+secteurResult); var zonesMetier = zoneMetier.getAllSecteur(); writeln("zonesMetier:"+zonesMetier); writeln("zonesMetier.size:"+zonesMetier.size());
for(var i=0; i<zonesMetier.size(); i++){ var zonemet = zonesMetier.get(i); writeln("zonemet:"+zonemet); // intersection entre la zeme zone metier a date et zone de Cantonnement var listemailleszonemetier = zonemet.getMaille().copy(); var nbMailleZoneMetier = listemailleszonemetier.size(); writeln("maille metier:"+listemailleszonemetier); writeln("maille Cantonnement:"+p.mailles); listemailleszonemetier.removeAll(p.mailles); if(0==listemailleszonemetier.size()){ //si completement inclus on le supprime //donc on ne le met pas dans le nouveau writeln("on supprime la zone"+zonemet); } else if (listemailleszonemetier.size() != nbMailleZoneMetier) { // si la zone metier n'est pas totalement incluse dans zone de Cantonnement // on reduit la zeme zone metier de cette intersection // pas de modif de la matrice de proportion strmet writeln("on cree une nouvelle zone a partir de:"+zonemet+" avec "+listemailleszonemetier); var simpleSecteur = SecteurSimpleFactory.create("Cantonnement-"+p.metier.getNom()+"-"+zonemet+"-"+date.getDate(), p.metier.getRegion(), "Secteur creer durant la simulation."); simpleSecteur.addAllMaille(listemailleszonemetier); secteurResult.addSecteur(simpleSecteur); writeln("apres addSecteur"); }else { //sinon on le met dans le nouveau writeln("On remet tel quelle la zone:"+zonemet); secteurResult.addSecteur(zonemet); } }// fin du for sur les zone metier de la zone de pratique du metier writeln("Zone metier avant"+zoneMetier.getMaille()); writeln("Zone metier apres"+secteurResult); writeln("Zone metier apres"+secteurResult.getMaille()); p.metier.setSecteurMois(secteurResult, p.date.getMois()); } else { writeln("Toute la zone metier est ferme"); // sinon toute la zone de pratique du metier est incluse dans zone Cantonnement // alors metier devient metier-nonactivite
//listes des strategies contenant ce metier et tel que strmet(metier,date)!=0 var listestrategies=StrategyFactory.findAllByRegion(p.metier.getRegion());
for(var i=0; i<listestrategies.size(); i++){ var SetOfBateau=listestrategies(i).getSetOfVessels(); var MetiersPosibles=SetOfBateau.getPossibleMetiers(); if (MetiersPosibles.contains(p.metier) ){ var InfoMois=listestrategies(i).getStrategyMonthInfo(p.date.getMois()); if (InfoMois.getProportionMetier(p.metier)!=0){ // var metChomage = MetierFactory.findByKey("nonActivite", p.metier.getRegion());
// InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(p.metier));
InfoMois.setProportionMetier(p.metier,0); } } } }// fin du else passage a metier-nonactivite writeln("fin Cantonnement zone action avant"); return p.gestionMetier;
////////////////////////////////////ACTION APRES writeln("Action apres"); return p.gestionMetier;
--
Hilaire Drouineau IFREMER, département EMH Centre de Nantes - BP 21105 - 44311 Nantes Cedex 3 tel : +33 (0)2 40 37 43 06 - fax : +33 (0)2 40 37 40 75 email : hilaire.drouineau@ifremer.fr - web : http://www.ifremer.fr *****************************************************************