Salut Eric, le préscript ne compile pas et pas d'indication sur ce qui ne va pas. Pourrais tu y jeter un oeil s'il te plait ? ci dessous prescript et message d'erreur. Merci ! -------------------------- Prescript : import fr.ifremer.isisfish.annotations.Doc; import fr.ifremer.isisfish.simulator.*;//SimulationParameter; import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.math.matrix.MatrixND; import rules.EffortReduction_Fermetures_PreSimu_Delmoges; import fr.ifremer.isisfish.types.Month; import java.util.*; import java.io.*; import java.util.regex.*; //recup num de simu String simu = context.getSimulationControl().getId(); java.util.regex.Pattern simulNamePattern =java.util.regex.Pattern.compile("^.+_(\\d+)$"); // pour un nom de simu quelconque terminant par "_XXX" XXX etat des chiffres java.util.regex.Matcher matcher =simulNamePattern.matcher(simu); matcher.find(); int numero =Integer.parseInt(matcher.group(1)); SimulationParameter parameter = context.getSimulationStorage().getParameter(); // parameter.clearRules(); // suppresison des regles deja existante ? non il y aura le forcage d effort a laisser // read matrice d'experience matExp // [simu x rules] contient les modalités String param_pathExpMatrix ="InputsDelmoges/MatExp_fev2025.csv" ; int matrix_length =47; int parameterNumber =9; MatrixND matExp =MatrixFactory.getInstance().create(new int[]{matrix_length,parameterNumber}); matrix.importCSV(new FileReader(new File(param_pathExpMatrix)),new int[]{0,0}); List<Integer> dim0 =new ArrayList<Integer>(); for (int i=0;i <matrix_length;i++) { dim0.add(i); } matExp.setSemantic(0,dim0); matExp.setSemantic(1,Arrays.asList( new String[]{"simu","ferm1startMonth","ferm1duree","ferm1endMonth","ferm2startMonth","txReduction", "Realloc","txRealloc","txNavAQuai"})); System.out.println("plan d'exp :"+matExp); ///////////////////////////////////////////////////////////////////////////// // Read matrix values double txNavQuai =matExp.getValue(numero,"txNavAQuai"); double txRed =matExp.getValue(numero,"txReduction"); double txRealloc =matExp.getValue(numero,"txRealloc"); int Realloc =matExp.getValue(numero,"Realloc"); int deb1 =matExp.getValue(numero,"ferm1startMonth"); int fin1 =matExp.getValue(numero,"ferm1endMonth"); int deb2 =matExp.getValue(numero,"ferm2startMonth"); List<Month> months =Month.getMonths(Month.JANUARY,Month.DECEMBER); Boolean Brealloc =true; if(Realloc ==0)Brealloc =false; // ajout regle 1 EffortReduction_Fermetures_PreSimu_Delmoges ruleDelmoges =new EffortReduction_Fermetures_PreSimu_Delmoges(); ruleDelmoges.param_beginMonthFermeture = months.get(deb1); ruleDelmoges.param_endMonthFermeture = months.get(fin1); ruleDelmoges.param_txReduction =txRed; ruleDelmoges.param_reallocation =Brealloc; ruleDelmoges.param_txReallocation =txRealloc; ruleDelmoges.param_txAquai =txNavQuai; parameter.addRule(ruleDelmoges); // ajoute regle 2 : fermeture ete si besoin if (deb2 !=13){// remettre les 2 memes pour l'ete } EffortReduction_Fermetures_PreSimu_Delmoges ferm2 =new EffortReduction_Fermetures_PreSimu_Delmoges(); ferm2.param_beginMonthFermeture =months.get(deb2); ferm2.param_endMonthFermeture =months.get(deb2); ruleDelmoges.param_txReduction =0; ruleDelmoges.param_reallocation =Brealloc; ruleDelmoges.param_txReallocation =txRealloc; ruleDelmoges.param_txAquai =txNavQuai; parameter.addRule(ferm2); } -------------------------- Message d'erreur : 2025-02-21 10:41:02,559 INFO [pool-3-thread-2] (SimulationStorage.java:560) getSimulation - Try to open simulation sim_test_prescriptDelmoges_2025-02-21-10-35_0(C:\Users\slehuta\isis-fish-4\isis-database\simulations\sim_test_prescriptDelmoges_2025-02-21-10-35_0) 2025-02-21 10:41:03,420 INFO [monitor-thread] (SimulationControl.java:206) setText - Simulation terminée 2025-02-21 10:41:03,428 WARN [monitor-thread] (SimulationMonitor.java:521) checkProgression - Simulation exception : fr.ifremer.isisfish.simulator.SimulationException: Can't evaluate simulation prescript at fr.ifremer.isisfish.simulator.SimulationPreScriptListener.beforeSimulation(SimulationPreScriptListener.java:85) at fr.ifremer.isisfish.simulator.SimulationContext.fireBeforeSimulation(SimulationContext.java:279) at fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher.localSimulateSameThread(InProcessSimulatorLauncher.java:434) at fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher$SimThread.run(InProcessSimulatorLauncher.java:262) Caused by: fr.ifremer.isisfish.IsisFishRuntimeException: Impossible de compiler le script : C:\Users\slehuta\isis-fish-4\isis-sim-build\sim_test_prescriptDelmoges_2025-02-21-10-35_0\fr.ifremer.isisfish.simulator\SimulationPreScriptPreScript.java at fr.ifremer.isisfish.util.EvaluatorHelper.compile(EvaluatorHelper.java:398) at fr.ifremer.isisfish.util.EvaluatorHelper.compileAndGetClass(EvaluatorHelper.java:283) at fr.ifremer.isisfish.util.EvaluatorHelper.evaluate(EvaluatorHelper.java:350) at fr.ifremer.isisfish.simulator.SimulationPreScriptListener.beforeSimulation(SimulationPreScriptListener.java:77) ... 3 more Caused by: fr.ifremer.isisfish.IsisFishRuntimeException: Impossible de compiler le script : -1 at fr.ifremer.isisfish.util.EvaluatorHelper.compile(EvaluatorHelper.java:395) ... 6 more Le 05/02/2025 à 12:24, Eric Chatellier a écrit :
Le 05/02/2025 à 11:56, Sigrid LEHUTA a écrit :
Salut Eric, Bonjour,
j'avance sur mon préscript (en pj) mais j'ai plein de questions car je n'ai jamais utilisé ça avant :
- ou dois je le ranger (quel dossier ?). Faut-il le copier/coller dans l'nterface ? Il n'y a pas de dossier, il faut le copier dans l'interface
- comment je recupère le SimulationContext ? L'objet "context" est disponible.
- Y at'il une syntaxe de début de script ? un main ou autre ? non aucune. Il faut supposer qu'on est déjà dans le main
- puis je vérifier la compilation avant de lancer ? Il ne me semble pas.
- Comment il sait qu'il y a plusieurs simus ? j'ajoute un plan d'exp qui ne fait que limiter le nb de simus ?
Le precript ne s'execute que dans le cas d'une simulation unitaire.
Pour détecter que la simulation fait partie d'un plan, on peut utiliser :
- context.getSimulationStorage().getParameter().getSimulationPlanNumber()
ou l'astuce avec le nom de la simulation qui termine par "_xxx"
SimulationControl control = context.getSimulationControl(); String id = control.getId(); int number = -1; // si ca fini par _xx, alors on est dans un plan ou une as if (id.matches(".*_\\d+")) { number = Integer.parseInt(id.substring(id.lastIndexOf("_") + 1)); }
-- /!\ Boite mail saturée (en cours de nettoyage laborieux) Pour ma santé mentale et l'environnement, merci d'éviter les pièces jointes au maximum. -- Sigrid LEHUTA ><> __/\__ ~ ><> ~ \____/ ~ Fisheries modeller IFREMER - HALGO-EMH Ecology and modeling for fisheries science DECOD Dynamics and sustainability of ecosystems: from source to sea AFH Association Française d'Halieutique (AFH) Centre Atlantique - Rue de l'Ile d'Yeu BP 21105 - 44311 Nantes Cedex 03 Tel. : 02 40 37 42 38 (8238) Participez à l'ENQUETE Réduction des captures de dauphins :https://http-proxy.cloud.codelutin.com/enquete_delmoges https://peche.ifremer.fr/Le-role-de-l-Ifremer/Recherche/Projets/Description-... https://www.francefilierepeche.fr/projets/gemmbe/ https://delmoges.recherche.univ-lr.fr/presentation-du-projet/ https://www.ices.dk/advice/ESD/Pages/Bay-of-Biscay-and-the-Iberian-Coast_Lan... https://halgo.ifremer.fr/en https://www.umr-decod.fr/en https://www.association-francaise-halieutique.fr/