/// Prescript Lancement Datarmor plan de simu SEAWISE-FBIT /// Cree SL 21/11/25 /// pour la base SEAWISE_MACCO_2021Inf_withSR_TF1q2mean_b_31Jan2025 : CHECK /* ## plan d'exp Seawise Fbit closures = c(10,20,30,40,50) report = c(1:4) PCP = c("SQ","Min","PGY") plan = expand.grid(pcp = PCP,closure = closures,report = report) rowsNoClosure = data.frame(pcp = PCP,closure = NA, report = NA) plan <- rbind(plan, rowsNoClosure) plan$sim = 0:(nrow(plan)-1) Prep simu avec 1 exemplaire de toutes les rules necessaires using dummy parameters. */ import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.annotations.Doc; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.simulator.*; //SimulationParameter; import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; import rules.*; //import rules.EffortReduction; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.rule.Rule; import java.util.*; import java.io.*; import java.util.regex.*; //recup num de simu String simu = context.getSimulationControl().getId(); Pattern simulNamePattern = Pattern.compile("^.+_(\\d+)$"); // pour un nom de simu quelconque terminant par "_XXX" XXX etat des chiffres Matcher matcher = simulNamePattern.matcher(simu); matcher.find(); int numero = Integer.parseInt(matcher.group(1)); System.out.println("numero de simu : "+ numero); SimulationParameter paramRules = context.getSimulationStorage().getParameter(); paramRules.getRules().clear(); // suppresison des regles deja existantes ///////////////////////////////////////////////////////////////////////////////////////// ZoneDAO zoneDAO = context.getZoneDAO(); PopulationDAO popDAO = context.getPopulationDAO(); Population popNep = popDAO.findByName("Nephrops_norvegicus"); Population popHak = popDAO.findByName("Merluccius_merluccius"); Population popSol = popDAO.findByName("Solea_solea"); Population popLep = popDAO.findByName("Lepidorhombus_whiffiagonis"); Population popLop = popDAO.findByName("Lophius_piscatorius"); // Set simuSansClosure = Set.of(); // if (simuSansClosure.contains())... Set simu10pc = Set.of(0,1,2,15,16,17); Set simu20pc = Set.of(3,4,5,18,19,20); Set simu30pc = Set.of(6,7,8,21,22,23); Set simu40pc = Set.of(9,10,11,24,25,26); Set simu50pc = Set.of(12,13,14,27,28,29); if(numero < 30){ // il y a une fermeture SpatiotempClosure_MultiMet_EffortFree_report currClosure = new SpatiotempClosure_MultiMet_EffortFree_report(); // TO DO check fixed parameters (below) and uncomment /*currClosure.param_metNames = (String)"(G_|GTR|GNS|T_|O_|OTB|PTB|TBB|OTM).*"; currClosure.param_metNames_exclude = (String)"(M_low_activity_2|M_metier_OTH_Zunique @ C|M_metier_OTH_Zunique @ F|M_metier_OTH_Zunique @ P).*"; // ".*(Flottille esp).*"; currClosure.param_metNames_smaller12m = "(10-12|0-10).*"; currClosure.param_beginStep = new TimeStep(12); currClosure.param_endStep = new TimeStep(480); currClosure.param_beginMonth = Month.JANUARY; currClosure.param_endMonth = Month.DECEMBER;*/ Zone closurearea = new Zone(); if(simu10pc.contains(numero)){ closurearea = zoneDAO.findByName("Zone_BenthComm_MPA_10pc"); }else if(simu20pc.contains(numero)){ closurearea = zoneDAO.findByName("Zone_BenthComm_MPA_20pc"); }else if(simu30pc.contains(numero)){ closurearea = zoneDAO.findByName("Zone_BenthComm_MPA_30pc"); }else if(simu40pc.contains(numero)){ closurearea = zoneDAO.findByName("Zone_BenthComm_MPA_40pc"); }else if(simu50pc.contains(numero)){ closurearea = zoneDAO.findByName("Zone_BenthComm_MPA_50pc"); } currClosure.param_zone = closurearea; if(numero < 15){ currClosure.param_report = 1; }else if(numero < 30){ currClosure.param_report =4; } paramRules.addRule(currClosure); } // PCP /*population Emsy MSY_kg Fmsy Bmsy MEG 0.8148 5719363 0.31 21633533.64 MON 0.4444 89499864 0.1042 458851614.9 HKE 1.1111 130342557 0.1962 715538691.1 SOL 0.7407 5874433 0.2469 33815179.62 NEP 7.855 NA 0.9265 31211.68 */ String tacName = "TAC_MSY_"; if(numero % 3 == 1 || numero % 3 == 2){ // il y a un TAC if(numero % 3 == 1 ){ // il y a HCR min // TODO check default param endStep =480 ; LO=T ; relSteb = 0.57, varTAC = 0;discard Rate = 10 HCR_FMSY_multisp HcrMin = new HCR_FMSY_multisp(); HcrMin.param_beginStep = new TimeStep(12); /*HcrMin.param_popNames = "Nephrops_norvegicus;Merluccius_merluccius;Solea_solea;Lepidorhombus_whiffiagonis;Lophius_piscatorius"; HcrMin.param_msyBtrigger = "0.01;273226.26;10976.88;12475.69;26906.50"; // Attention aux unites : kg VS t HcrMin.param_fmsy = "0.40;0.21;0.22;0.29;0.11";*/ paramRules.addRule(HcrMin); }else if (numero % 3 == 2){ // PGY HCR_PGY_Fupper_multisp HcrPgy = new HCR_PGY_Fupper_multisp(); // TODO check default param endStep =480 ; LO=T ; relSteb = 0.57, varTAC = 0;discard Rate = 10 HcrPgy.param_beginStep = new TimeStep(12); /*HcrPgy.param_msyBtrigger="0.01;273226.26;10976.88;12475.69;6345.87"; HcrPgy.param_fmsy="0.40;0.21;0.22;0.29;0.11"; HcrPgy.param_fupper="0.44;0.33;0.27;0.48;0.12"; tacName = "TAC_PGY_";*/ paramRules.addRule(HcrPgy); } // add rules TAC for all sp // TODO check default param TACseries_Metier_OptionLO_redistr_multisp tacNep = new TACseries_Metier_OptionLO_redistr_multisp(); tacNep.param_tacName = tacName; tacNep.param_param_pop = popNep; paramRules.addRule(tacNep); TACseries_Metier_OptionLO_redistr_multisp tacHak = new TACseries_Metier_OptionLO_redistr_multisp(); tacHak.param_tacName = tacName; tacHak.param_param_pop = popHak; paramRules.addRule(tacHak); TACseries_Metier_OptionLO_redistr_multisp tacSol = new TACseries_Metier_OptionLO_redistr_multisp(); tacSol.param_tacName = tacName; tacSol.param_param_pop = popSol; paramRules.addRule(tacSol); TACseries_Metier_OptionLO_redistr_multisp tacLep = new TACseries_Metier_OptionLO_redistr_multisp(); tacLep.param_tacName = tacName; tacLep.param_param_pop = popLep; paramRules.addRule(tacLep); TACseries_Metier_OptionLO_redistr_multisp tacLop = new TACseries_Metier_OptionLO_redistr_multisp(); tacLop.param_tacName = tacName; tacLop.param_param_pop = popLop; paramRules.addRule(tacLop); }