Bonjour je vous forwarde le script de pre-simulation ecrit par Hilaire et qui permet de mettre en place une fermeture de zone saisonniere qui s'applique pendant toute la duree simulation. Il s'agit d'un script de presimulation et non d'une regle de gestion, c'est a dire que lorsque vous lancez une simulation avec une fermeture, vous devez selectionner sript de presimulation en bas de la fenetre, copier le script attache a ce mail et mettre a jour en haut du script les parametres (le nom de la zone doit etre exactement celui saisie dans la base). L'interet d'un script de pre-simualtion a une mesure de gestion classique est une diminution de la vitesse de simulation. En effet, le script permet une modification avant simulation des parametres de l'activite de peche lie a la fermeture de zone, alors que la mesure fait une modification a chaque pas de temps et de ce fait cree autant d'objest zones qu'il y a de pas de simulation. a+ stephanie -- ...................................................................... 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\ / ) | (\ / | / \ / \ ...................................................................... //attention: cette règle de gestion ne fonctionne que si la fermeture a lieu pour toutes //les années de simulation var nomZone="VIIIa"; //entrez le nom de la zone fermée var engin="non";//entrez le nom de l'engin fermée ou non si pas de sélection sur engin var moisDeb=0; //entrez le mois debut de fermeture var moisFin=11;//entrez le mois de fin de fermeture var ZoneFermee=SecteurFactory.findByNom(nomZone); if (engin!="non") {var EnginInterdit=EnginFactory.findByNom(engin);} var RegionSimu=ZoneFermee.getRegion(); var ListeMetiers=MetierFactory.findAllByRegion(RegionSimu); var MoisDeb=new Packages.fr.ifremer.nodb.Mois(moisDeb); var MoisFin=new Packages.fr.ifremer.nodb.Mois(moisFin); var SaisonFermee= new Packages.fr.ifremer.nodb.Saison(moisDeb,moisFin); var metChomage = MetierFactory.findByKey("nonActivite", RegionSimu); for (var imetier = ListeMetiers.iterator() ; imetier.hasNext();){ var metier=imetier.next(); writeln ("metier examiné "+metier.getNom()); if (metier.getEngin()!=EnginInterdit && engin!="non"){ writeln("l engin du métier n est pas concerné"); } else { writeln("l engin du métier est bien concerné"); var ListeSaisons = metier.getInfoSaison(); for (var isaisonmetier = ListeSaisons.iterator() ; isaisonmetier.hasNext();){ var saisonmetier=isaisonmetier.next(); var maillefermee=ZoneFermee.getMaille(); var MailleMetier=saisonmetier.getSecteur().getMaille().copy(); MailleMetier.retainAll(maillefermee); if (MailleMetier.size()!=0){ MailleMetier=saisonmetier.getSecteur().getMaille().copy(); var saison=saisonmetier.getSaison(); if (saison.contains(SaisonFermee)){ writeln("il y a bien intersection entre la zone métier et le cantonnement pour la saison "+saison.toString()); // calcule de la zone restante: var ToutFerme=false; var DebInclus=saison.contains(MoisDeb); var FinInclus=saison.contains(MoisFin); MailleMetier.removeAll(maillefermee); 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 ToutFerme=false; var secteurResult = MetaSecteurFactory.create("MetaCantonnement-"+metier.getNom()+saison.toString(), RegionSimu, "Secteur créé durant la simulation."); writeln("nouveau secteur cree:"+secteurResult); var zonesMetier = saisonmetier.getSecteur().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:"+maillefermee); listemailleszonemetier.removeAll(maillefermee); 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-"+metier.getNom()+"-"+zonemet+saison.toString(), RegionSimu, "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 } else { var secteurResult=saisonmetier.getSecteur().getAllSecteur(); writeln("Toute la zone metier est ferme"); ToutFerme=true; } //1er cas: la saison métier est identique (ou totalement incluse dans la saison fermée, dans ce cas là, on change juste //le secteur if (SaisonFermee.toListMois().containsAll(saison.toListMois())){ writeln("toute la saison metier est incluse dans la saison de fermeture"); //si tout est fermé, on met le metier au chômage if (ToutFerme==true){ writeln ("toute la zone est fermée, le metier passe donc à chômage pour cette saison"); var listestrategies=StrategyFactory.findAllByRegion(RegionSimu); var ListeMois=saison.toListMois(); for(var i=0; i<listestrategies.size(); i++){ var SetOfBateau=listestrategies.get(i).getSetOfVessels(); var MetiersPosibles=SetOfBateau.getMetiers(); if (MetiersPosibles.contains(metier)){ for (imois=ListeMois.iterator();imois.hasNext();){ var mois=imois.next(); var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois); if (InfoMois.getProportionMetier(metier)!=0){ InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(metier)); InfoMois.setProportionMetier(metier,0); } } } } } else { writeln("tout n'est pas fermée, le secteur de pêche devient "+secteurResult); var ListeMois=SaisonFermee.toListMois(); for (imois=ListeMois.iterator();imois.hasNext();){ mois=imois.next(); metier.setSecteurMois(secteurResult, mois); } } } //2ème cas de figure: moisDeb est inclus mais pas moisFin (ou alors c'est le dernier mois) else if (DebInclus && ((!FinInclus) || MoisFin==saison.getLastMois())){ writeln ("il y a intersection de la saison de fermeture avec la saison métier de "+moisDeb+" à "+saison.getLastMois().getNumMois()); //si tout est fermé on met les proportions à 0 pour les mois fermes if (ToutFerme==true){ writeln ("toute la zone métier est fermée"); var listestrategies=StrategyFactory.findAllByRegion(RegionSimu); var ListeMois=SaisonFermee.toListMois().retainAll(saison.toListMois()); writeln ("de "+ListeMois.get(0)+" a "+ ListeMois.get(ListeMois.size())+ ", le metier est donc mis au chomage"); for(var i=0; i<listestrategies.size(); i++){ var SetOfBateau=listestrategies.get(i).getSetOfVessels(); var MetiersPosibles=SetOfBateau.getMetiers(); if (MetiersPosibles.contains(metier)){ for (imois=ListeMois.iterator();imois.hasNext();){ var mois=imois.next(); var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois); if (InfoMois.getProportionMetier(metier)!=0){ InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(metier)); InfoMois.setProportionMetier(metier,0); } } } } } else { //on commence par crée les nouvelles saisons var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisDeb,saison.getLastMois().getNumMois()); var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisDeb-1); saisonmetier.setSaison(NouvelleSaison1); //on crée un nouveau infoSaisonMetier var NouvelInfoSaison=InfoSaisonMetierFactory.create(metier, NouvelleSaison2, secteurResult, "saison crée pendant la simulation") ; metier.addInfoSaison(NouvelInfoSaison); writeln ("de "+saison.getFirstMois().getNumMois()+" à "+moisDeb-1+" le metier peche en "+saisonmetier.getSecteur()); writeln ("de "+moisDeb+" à "+saison.getLastMois().getNumMois()+" le metier peche en "+secteurResult); } } //3ème cas de figure: moisFin est inclus mais pas moisDeb (ou alors il est égal au premier mois) else if (((!DebInclus) || MoisDeb==saison.getFirstMois()) && FinInclus){ writeln ("il y a intersection de la saison de fermeture avec la saison métier de "+moisDeb+" à "+saison.getLastMois().getNumMois()); //si tout est fermé on met les proportions à 0 pour les mois fermes if (ToutFerme==true){ writeln ("toute la zone est fermee"); var listestrategies=StrategyFactory.findAllByRegion(RegionSimu); var ListeMois=SaisonFermee.toListMois().retainAll(saison.toListMois()); writeln ("de "+ListeMois.get(0)+" a "+ ListeMois.get(ListeMois.size())+ ", le metier est donc mis au chomage"); for(var i=0; i<listestrategies.size(); i++){ var SetOfBateau=listestrategies.get(i).getSetOfVessels(); var MetiersPosibles=SetOfBateau.getMetiers(); if (MetiersPosibles.contains(metier) ){ for (imois=ListeMois.iterator();imois.hasNext();){ var mois=imois.next(); var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois); if (InfoMois.getProportionMetier(metier)!=0){ InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(metier)); InfoMois.setProportionMetier(metier,0); } } } } } else { //on commence par crée les nouvelles saisons var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisFin); var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisFin+1,saison.getLastMois.getNumMois()); saisonmetier.setSaison(NouvelleSaison2); //on crée un nouveau infoSaisonMetier var NouvelInfoSaison=InfoSaisonMetierFactory.create(metier, NouvelleSaison1, secteurResult, "saison crée pendant la simulation") ; metier.addInfoSaison(NouvelInfoSaison); writeln ("de "+saison.getFirstMois().getNumMois()+" à "+moisFin+" le metier peche en "+secteurResult); writeln ("de "+moisFin+1+" à "+saison.getLastMois().getNumMois()+" le metier peche en "+saisonmetier.getSecteur()); } } //dernier cas de figure: les deux sont inclus et sont différents des bornes else { //si tout est fermé on met les proportions à 0 pour les mois fermes if (ToutFerme==true){ writeln("toute la zone métier est fermée"); var listestrategies=StrategyFactory.findAllByRegion(p.metier.getRegion()); var ListeMois=SaisonFermee.toListMois(); writeln("le métier passe à chômage de "+moisDeb+" à "+moidFin); for(var i=0; i<listestrategies.size(); i++){ var SetOfBateau=listestrategies.get(i).getSetOfVessels(); var MetiersPosibles=SetOfBateau.getMetiers(); if (MetiersPosibles.contains(metier) ){ for (imois=ListeMois.iterator();imois.hasNext();){ var mois=imois.next(); var InfoMois=listestrategies.get(i).getStrategyMonthInfo(mois); if (InfoMois.getProportionMetier(metier)!=0){ InfoMois.setProportionMetier(metChomage,InfoMois.getProportionMetier(metChomage)+InfoMois.getProportionMetier(p.metier)); InfoMois.setProportionMetier(p.metier,0); } } } } } else { //on commence par crée les nouvelles saisons var NouvelleSaison1= new Packages.fr.ifremer.nodb.Saison(saison.getFirstMois().getNumMois(),moisDeb-1); var NouvelleSaison2= new Packages.fr.ifremer.nodb.Saison(moisDeb,saison.getLastMois().getNumMois()); saisonmetier.setSaison(NouvelleSaison1); //on crée 2 nouveau infoSaisonMetier var NouvelInfoSaison2=InfoSaisonMetierFactory.create(metier, NouvelleSaison2, secteurResult, "saison crée pendant la simulation") ; var NouvelInfoSaison3=InfoSaisonMetierFactory.create(metier, NouvelleSaison2, saisonmetier.getSecteur(), "saison crée pendant la simulation") ; metier.addInfoSaison(NouvelInfoSaison2); metier.addInfoSaison(NouvelInfoSaison3); metier.add writeln ("de "+saison.getFirstMois().getNumMois()+" à "+(moisDeb-1)+" le metier peche en "+saisonmetier.getSecteur()); writeln ("de "+moisDeb+" à "+moisFin+" le metier peche en "+secteurResult); writeln ("de "+(moisFin+1)+" à "+saison.getLastMois().getNumMois()+" le metier peche en "+saisonmetier.getSecteur()); } } } } } } }