/* * Copyright (C) 2014 slehuta * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * . */ package simulationplans; import fr.ifremer.isisfish.*; import fr.ifremer.isisfish.datastore.ResultStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.SimulationPlanIndependent; import fr.ifremer.isisfish.simulator.SimulationPlanContext; import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.util.Doc; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.*; import org.nuiton.topia.*; import org.nuiton.util.*; //import org.apache.commons.lang3.StringUtils.splitByWholeSeparator; /** * Plan PECHALO.java * * Created: 15 Novembre 2019 * * @author slefores * @version $Revision: 1 $ * Last update: $Date: 15 novembre 2019 $ * by : $Author: slefores $ * * * ATTENTION : script non optimal, �� v��rifier avant de lancer le plan : -chemins qui m��ne aux csv contenant les tables d'effectifs initiaux utilis��s dans le plan de simu -bien v��rifier le nom des regles de gestion appel��es dans le plan et les begin & end step -chemins qui m��ne au csv contenant le plan d'exp��rience (CombinaisonSimulation) -dans regles "EffortReduction_fixe", "EffortReduction_7point5", "EffortReduction_10_20_30" -> renseigner le TF_OTB des espagnols qui figure dans la base ! -dans la partie analyse d'incertutude du plan, prendre exactement l'��quation de recrutement qui figure dans la base : eqqs = eqqs.replaceAll("double recru = 31296\\; double\\[\\] recZone = \\{0.165,0.835\\}\\;", eqqNew); */ public class PlanPECHALO implements SimulationPlanIndependent { /** to use log facility, just put in your code: log.info("..."); */ private static Log log = LogFactory.getLog(PlanPECHALO.class); static private String MATRIX = "CombinaisonSimulation"; private MatrixND matrix = null; // Matrix columns static private final String EFFECT = "EffectifsInitiaux"; static private final String RECRUT = "Recrutement"; static private final String CONNEC = "Connectivite"; static private final String RULE = "Rule"; static private final int parameterNumber = 4; static private final int matrix_size = 288; // 16 sce * 2 eff initiaux * 3 rec * 3 connectivite public int param_first = 0; public int param_simulationNumber = 288; public String param_directory = "/home/zigrid/Bureau/Sophie/lancement_plan_2/csv_plan/"; private MatrixND mateffInit0 = null; private MatrixND mateffInit1 = null; // TO DO enter correct matrix path and names static private final String effInit0 = "/home/zigrid/Bureau/Sophie/lancement_plan_2/csv_plan/AbondanceRecalculee/abondInit.csv"; static private final String effInit1 = "/home/zigrid/Bureau/Sophie/lancement_plan_2/csv_plan/AbondanceRecalculee/abond_z1.csv"; protected String[] necessaryResult = { }; @Override public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur le plan. * @return L''aide ou la description du plan */ @Override public String getDescription() throws Exception { return "PECHALO management scenarios and main uncertainty hypotheses for GDL Hake"; } /** * Called once before {@code beforeSimulation} call. * * @param context plan context */ @Override public void init(SimulationPlanContext context) throws Exception { System.out.println("etape0"); // Load simulation plan matrix matrix = MatrixFactory.getInstance().create(new int[]{matrix_size, parameterNumber}); matrix.importCSV(new FileReader(new File(param_directory, MATRIX + ".csv")), new int[]{0,0}); List dim0 = new ArrayList(); for (int i=0; i < matrix_size; i++) { dim0.add(i); } System.out.println("etape1 : lecture plan de combinaisons"); matrix.setSemantic(0, dim0); matrix.setSemantic(1, Arrays.asList(new String[]{EFFECT,RECRUT,CONNEC,RULE})); // To DO Add necessary rules to simulation context context.getParam().addExtraRules("Effort_2015_2017_GDL"); // efort de peche force sur les annees de calibration context.getParam().addExtraRules("DistriRec_variable"); // distribution du recrutement variable sur les annees de calibration // Load initial abundance matrices mateffInit0 = MatrixFactory.getInstance().create(new int[]{6,2}); mateffInit0.importCSV(new FileReader(new File(effInit0)), new int[]{0,0}); mateffInit1 = MatrixFactory.getInstance().create(new int[]{6,2}); mateffInit1.importCSV(new FileReader(new File(effInit1)), new int[]{0,0}); System.out.println("etape2 : lecture plan des abondances initiales"); } /** * @param name le nom de l'element a recuperer * @param simulation le numero de la simulation * @return */ private double getDouble(String name,String colname, int simulation) throws Exception { File dir = new File(param_directory); Properties prop = new Properties(); prop.load(new BufferedReader(new FileReader(new File(dir, name + ".txt")))); int ligne = simulation + param_first; int mod = (int)matrix.getValue(ligne, colname); System.out.println("nom "+name+"mod :"+mod); double result = Double.parseDouble(prop.getProperty(""+mod)); return result; } /** * Call before each simulation. * * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ @Override public boolean beforeSimulation(SimulationPlanContext context, SimulationStorage nextSimulation) throws Exception { System.out.println("entre etapes 2 et 3"); int simNum = nextSimulation.getParameter().getSimulationPlanNumber() + param_first; System.out.println("etape3 : determiner getDouble valeur simNum : " + simNum); TopiaContext db = nextSimulation.getStorage().beginTransaction(); String populationId = nextSimulation.getParameter().getPopulations().get(0).getTopiaId(); PopulationDAO populationDAO = IsisFishDAOHelper.getPopulationDAO(db); Population pop = populationDAO.findByTopiaId(populationId); if (simNum < param_simulationNumber+param_first){ // Modif rules // ----------- List paramRules = nextSimulation.getParameter().getRules(); double eff = matrix.getValue(simNum,EFFECT); double rec = matrix.getValue(simNum,RECRUT); double con = matrix.getValue(simNum,CONNEC); double rul = matrix.getValue(simNum,RULE); int ruleNum = 0; // StatuQuo System.out.println("etape4 , " + eff + rec + con + rul); // Param��tres des r��gles �� modifier pour chaque sc��nario // ------------------------------------------------------ // passage de la flottille actuelle en 18-24 & passage en "pseudo 16m" (scenarios I.1. & I.2.) if(rul == 1){ String ruleName = "Passage_18_24m"; Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.startDate", ""+5); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // OTT interdit }else if(rul == 2){ String ruleName = "OTT_interdit"; Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.cheminFichierAverage", ""+"Q:/PECHALO/Scenarios_analyse_incertitude_2/csv_plan"); propert.put("rule."+ruleNum+".parameter.EffortPropFileName", ""+"/PropMet_OTTinterdit.csv"); propert.put("rule."+ruleNum+".parameter.startDate", ""+5); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // passage de 14h par maree a 75h par semaine - ce qui revient �� une augmentation de 20% de l'effort }else if(rul == 3){ String ruleName = "EffortAugmentation"; Properties propert = new Properties(); double aug = 0.2; propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); propert.put("rule."+ruleNum+".parameter.PercentReduction", ""+aug); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // semaines de 4j (reduction de 20% de l'effort nominal) }else if(rul == 4){ String ruleName = "Semaines4j"; Properties propert = new Properties(); double red = 0.2; propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); propert.put("rule."+ruleNum+".parameter.PercentReduction", ""+red); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // reduction taille flottille actuelle (reduction de 10% de l'effort nominal) }else if(rul == 5){ String ruleName = "EffortReduction_fixe"; /////mettre a jour TF_OTBesp dans regle Properties propert = new Properties(); double red = 0.1; propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); propert.put("rule."+ruleNum+".parameter.PercentReduction", ""+red); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // reduction taille flottille actuelle (reduction de 20% de l'effort nominal) }else if(rul == 6){ String ruleName = "EffortReduction_fixe"; /////mettre a jour TF_OTBesp dans regle Properties propert = new Properties(); double red = 0.2; propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); propert.put("rule."+ruleNum+".parameter.PercentReduction", ""+red); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // reduction taille flottille actuelle (reduction de 30% de l'effort nominal) }else if(rul == 7){ String ruleName = "EffortReduction_fixe"; /////mettre a jour TF_OTBesp dans regle Properties propert = new Properties(); double red = 0.3; propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); propert.put("rule."+ruleNum+".parameter.PercentReduction", ""+red); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // reduction progressive de l'effort : 10-20-30% }else if(rul == 8){ // reduction effort String ruleName = "EffortReduction_10_20_30"; /////mettre a jour TF_OTBesp dans regle Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // reduction progressive de l'effort : 10 - 17.5 - 25 - 32.5 - 40% }else if(rul == 9){ String ruleName = "EffortReduction_7point5"; /////mettre a jour TF_OTBesp dans regle Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert.put("rule."+ruleNum+".parameter.endStep", ""+119); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // arret quand quota d'effort atteint (194j) }else if(rul == 10){ String ruleName = "QuotaEffort194j"; Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.cheminFichierAverage", ""+"/home/zigrid/Bureau/Sophie/lancement_plan_2/csv_plan"); propert.put("rule."+ruleNum+".parameter.EffortMaree", ""+"/tableEffMaree2017.csv"); propert.put("rule."+ruleNum+".parameter.startDate", ""+5); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // arret quand quota d'effort atteint : diminution de 10% du quota d'effort chaque ann��e }else if(rul == 11){ String ruleName = "QuotaEffort_RedProg"; Properties propert = new Properties(); propert.put("rule."+ruleNum+".parameter.cheminFichierAverage", ""+"/home/zigrid/Bureau/Sophie/lancement_plan_2/csv_plan"); propert.put("rule."+ruleNum+".parameter.EffortMaree", ""+"/tableEffMaree2017.csv"); propert.put("rule."+ruleNum+".parameter.startDate", ""+5); RuleStorage ruleStorage = RuleStorage.getRule(ruleName); Rule rule = ruleStorage.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule, propert); paramRules.add(rule); ruleNum+=1; System.out.println("regle : " + rul); // fermeture O2_P3 --> fermeture zone FRA etendue de novembre a avril et 90-100m de septembre �� avril }else if(rul == 12){ // FRA_etendue Zone FRAetendue = IsisFishDAOHelper.getZoneDAO(db).findByName("FRA_etendue"); Gear OTB = IsisFishDAOHelper.getGearDAO(db).findByName("OTB"); Gear OTT = IsisFishDAOHelper.getGearDAO(db).findByName("OTT"); // OTB String ruleName1 = "Cantonnement"; Properties propert1 = new Properties(); propert1.put("rule."+ruleNum+".parameter.zone", FRAetendue.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert1.put("rule."+ruleNum+".parameter.endStep", ""+119); propert1.put("rule."+ruleNum+".parameter.beginMonth", ""+10); //debut novembre propert1.put("rule."+ruleNum+".parameter.endMonth", ""+3); // avril RuleStorage ruleStorage1 = RuleStorage.getRule(ruleName1); Rule rule1 = ruleStorage1.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule1, propert1); paramRules.add(rule1); ruleNum+=1; //OTT String ruleName2 = "Cantonnement"; Properties propert2 = new Properties(); propert2.put("rule."+ruleNum+".parameter.zone", FRAetendue.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.beginStep", ""+60); //debut en janvier de l'annee 2020 propert2.put("rule."+ruleNum+".parameter.endStep", ""+119); // fin en decembre 2025 propert2.put("rule."+ruleNum+".parameter.beginMonth", ""+10); //debut novembre propert2.put("rule."+ruleNum+".parameter.endMonth", ""+3); //avril RuleStorage ruleStorage2 = RuleStorage.getRule(ruleName2); Rule rule2 = ruleStorage2.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule2, propert2); paramRules.add(rule2); // 90-100m Zone quatrevingtdixcentm = IsisFishDAOHelper.getZoneDAO(db).findByName("90m_100m"); // OTT String ruleName3 = "Cantonnement"; Properties propert3 = new Properties(); propert3.put("rule."+ruleNum+".parameter.zone", quatrevingtdixcentm.getTopiaId()); propert3.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert3.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert3.put("rule."+ruleNum+".parameter.endStep", ""+119); propert3.put("rule."+ruleNum+".parameter.beginMonth", ""+8);//debut septembre propert3.put("rule."+ruleNum+".parameter.endMonth", ""+3);//avril RuleStorage ruleStorage3 = RuleStorage.getRule(ruleName3); Rule rule3 = ruleStorage3.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule3, propert3); paramRules.add(rule3); ruleNum+=1; // OTB String ruleName4 = "Cantonnement"; Properties propert4 = new Properties(); propert4.put("rule."+ruleNum+".parameter.zone", quatrevingtdixcentm.getTopiaId()); propert4.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert4.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert4.put("rule."+ruleNum+".parameter.endStep", ""+119); propert4.put("rule."+ruleNum+".parameter.beginMonth", ""+8); // debut septembre propert4.put("rule."+ruleNum+".parameter.endMonth", ""+3); //avril RuleStorage ruleStorage4 = RuleStorage.getRule(ruleName4); Rule rule4 = ruleStorage4.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule4, propert4); paramRules.add(rule4); ruleNum+=1; System.out.println("regle : " + rul); //fermeture dans les 6mn }else if(rul == 13){ Zone sixmn = IsisFishDAOHelper.getZoneDAO(db).findByName("6mn"); //nom zone 6mn Gear OTB = IsisFishDAOHelper.getGearDAO(db).findByName("OTB"); Gear OTT = IsisFishDAOHelper.getGearDAO(db).findByName("OTT"); //OTB String ruleName1 = "Cantonnement"; Properties propert1 = new Properties(); propert1.put("rule."+ruleNum+".parameter.zone", sixmn.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.beginStep", ""+60); //debut en janvier de l'annee 2020 propert1.put("rule."+ruleNum+".parameter.endStep", ""+119); // fin en decembre 2025 propert1.put("rule."+ruleNum+".parameter.beginMonth", ""+4); // debut mai propert1.put("rule."+ruleNum+".parameter.endMonth", ""+6); // fin juillet RuleStorage ruleStorage1 = RuleStorage.getRule(ruleName1); Rule rule1 = ruleStorage1.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule1, propert1); paramRules.add(rule1); ruleNum+=1; //OTT String ruleName2 = "Cantonnement"; Properties propert2 = new Properties(); propert2.put("rule."+ruleNum+".parameter.zone", sixmn.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.beginStep", ""+60); //debut en janvier de l'annee 2020 propert2.put("rule."+ruleNum+".parameter.endStep", ""+119); // fin en decembre 2025 propert2.put("rule."+ruleNum+".parameter.beginMonth", ""+4); // debut mai propert2.put("rule."+ruleNum+".parameter.endMonth", ""+6); // fin juillet RuleStorage ruleStorage2 = RuleStorage.getRule(ruleName2); Rule rule2 = ruleStorage2.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule2, propert2); paramRules.add(rule2); ruleNum+=1; System.out.println("regle : "+ rul); // fermeture zone FRA etendue }else if(rul == 14){ Zone FRA = IsisFishDAOHelper.getZoneDAO(db).findByName("FRA_etendue"); Gear OTB = IsisFishDAOHelper.getGearDAO(db).findByName("OTB"); Gear OTT = IsisFishDAOHelper.getGearDAO(db).findByName("OTT"); //OTB String ruleName1 = "Cantonnement"; Properties propert1 = new Properties(); propert1.put("rule."+ruleNum+".parameter.zone", FRA.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert1.put("rule."+ruleNum+".parameter.endStep", ""+119); propert1.put("rule."+ruleNum+".parameter.beginMonth", ""+0); //fermeture toute l'annee propert1.put("rule."+ruleNum+".parameter.endMonth", ""+11); RuleStorage ruleStorage1 = RuleStorage.getRule(ruleName1); Rule rule1 = ruleStorage1.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule1, propert1); paramRules.add(rule1); ruleNum+=1; //OTT String ruleName2 = "Cantonnement"; Properties propert2 = new Properties(); propert2.put("rule."+ruleNum+".parameter.zone", FRA.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.beginStep", ""+60); //debut en janvier de l'annee 2020 propert2.put("rule."+ruleNum+".parameter.endStep", ""+119); // fin en decembre 2025 propert2.put("rule."+ruleNum+".parameter.beginMonth", ""+0); propert2.put("rule."+ruleNum+".parameter.endMonth", ""+11); RuleStorage ruleStorage2 = RuleStorage.getRule(ruleName2); Rule rule2 = ruleStorage2.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule2, propert2); paramRules.add(rule2); ruleNum+=1; System.out.println("regle : " + rul); // fermeture zone derogation : Fermeture �� plus de 90m d���Octobre �� Avril + fermeture �� plus de 200m toute l���ann��e }else if(rul == 15){ // 90m Zone quatrevingtdixm = IsisFishDAOHelper.getZoneDAO(db).findByName("90m"); Gear OTB = IsisFishDAOHelper.getGearDAO(db).findByName("OTB"); Gear OTT = IsisFishDAOHelper.getGearDAO(db).findByName("OTT"); // OTB String ruleName1 = "Cantonnement"; Properties propert1 = new Properties(); propert1.put("rule."+ruleNum+".parameter.zone", quatrevingtdixm.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert1.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert1.put("rule."+ruleNum+".parameter.endStep", ""+119); propert1.put("rule."+ruleNum+".parameter.beginMonth", ""+9); //debut octobre propert1.put("rule."+ruleNum+".parameter.endMonth", ""+3); // avril RuleStorage ruleStorage1 = RuleStorage.getRule(ruleName1); Rule rule1 = ruleStorage1.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule1, propert1); paramRules.add(rule1); ruleNum+=1; //OTT String ruleName2 = "Cantonnement"; Properties propert2 = new Properties(); propert2.put("rule."+ruleNum+".parameter.zone", quatrevingtdixm.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert2.put("rule."+ruleNum+".parameter.beginStep", ""+60); //debut en janvier de l'annee 2020 propert2.put("rule."+ruleNum+".parameter.endStep", ""+119); // fin en decembre 2025 propert2.put("rule."+ruleNum+".parameter.beginMonth", ""+9); propert2.put("rule."+ruleNum+".parameter.endMonth", ""+3); RuleStorage ruleStorage2 = RuleStorage.getRule(ruleName2); Rule rule2 = ruleStorage2.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule2, propert2); paramRules.add(rule2); // 200m Zone deuxcentm = IsisFishDAOHelper.getZoneDAO(db).findByName("200m"); // OTT String ruleName3 = "Cantonnement"; Properties propert3 = new Properties(); propert3.put("rule."+ruleNum+".parameter.zone", deuxcentm.getTopiaId()); propert3.put("rule."+ruleNum+".parameter.gear", OTT.getTopiaId()); propert3.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert3.put("rule."+ruleNum+".parameter.endStep", ""+119); propert3.put("rule."+ruleNum+".parameter.beginMonth", ""+0);//toute l'ann��e propert3.put("rule."+ruleNum+".parameter.endMonth", ""+11); RuleStorage ruleStorage3 = RuleStorage.getRule(ruleName3); Rule rule3 = ruleStorage3.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule3, propert3); paramRules.add(rule3); ruleNum+=1; // OTB String ruleName4 = "Cantonnement"; Properties propert4 = new Properties(); propert4.put("rule."+ruleNum+".parameter.zone", deuxcentm.getTopiaId()); propert4.put("rule."+ruleNum+".parameter.gear", OTB.getTopiaId()); propert4.put("rule."+ruleNum+".parameter.beginStep", ""+60); propert4.put("rule."+ruleNum+".parameter.endStep", ""+119); propert4.put("rule."+ruleNum+".parameter.beginMonth", ""+0); // toute l'ann��e propert4.put("rule."+ruleNum+".parameter.endMonth", ""+11); RuleStorage ruleStorage4 = RuleStorage.getRule(ruleName4); Rule rule4 = ruleStorage4.getNewInstance(); RuleHelper.populateRule(ruleNum, nextSimulation.getStorage(), rule4, propert4); paramRules.add(rule4); ruleNum+=1; System.out.println("regle : " + rul); } //////////////////////////////////////////////////////////// // Modif Recrutement String recEq_part1 = "double recru = 31296;"; //projection en tenant compte du facteur de correction issu de la calibration if(rec == 1){ recEq_part1 = "double recru = 64960;"; // moyenne sur la s��rie depuis 1998 }else if(rec==2){ recEq_part1 = "double recru = 47298;"; // 1er quartile de la s��rie } //////////////////////////////////////////////////////////////// // modif connectivite String recEq_part2 = "double[] recZone = {0.165,0.835};"; if(con ==1){ recEq_part2 = "double[] recZone = {0.452,0.548};"; }else if(con ==2){ recEq_part2 = "double[] recZone = {0.026,0.974};"; } System.out.println("Avant changement recrutement"); Equation eqq = pop.getReproductionEquation(); String eqqs = eqq.getContent(); System.out.println("eqqs : "+eqqs); String eqqNew = recEq_part1 + recEq_part2 ; eqqs = eqqs.replaceAll("double recru = 31296\\; double\\[\\] recZone = \\{0.165,0.835\\}\\;", eqqNew); /// ATTENTION :: mettre valeur Recrutement de la base !!!! System.out.println("EqqNew : "+eqqNew); eqq.setContent(eqqs); System.out.println("EqqNew : "+ eqq.getContent()); System.out.println("TOTO 6"); //////////////////////////////////////////////////////////// // Modif effectifs initiaux MatrixND mat = nextSimulation.getParameter().getNumberOf(pop); MatrixND mateffInit = null; if(eff == 0){ mateffInit = mateffInit0; }else if(eff == 1){ mateffInit = mateffInit1; } for(MatrixIterator i = mat.iterator(); i.hasNext();){ i.next(); int[] dim = i.getCoordinates(); double val = mateffInit.getValue(dim); i.setValue(val); System.out.println("eff_initiaux" + i.getValue()); } db.commitTransaction(); db.closeContext(); System.out.println("etape 5 : Fin de la mise en place des combinaisons"); return true; } else return false; } /** * Call after each simulation. * * @param context plan context * @param lastSimulation storage used for simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ @Override public boolean afterSimulation(SimulationPlanContext context, SimulationStorage lastSimulation) throws Exception { return true; } }