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 à 11:56, Sigrid LEHUTA a écrit :
Salut Eric,Bonjour,
Il n'y a pas de dossier, il faut le copier dans l'interface
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 ?
L'objet "context" est disponible.
- comment je recupère le SimulationContext ?
non aucune. Il faut supposer qu'on est déjà dans le main
- Y at'il une syntaxe de début de script ? un main ou autre ?
Il ne me semble pas.
- puis je vérifier la compilation avant de lancer ?
- 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-projets/DEFIPEL
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_Landing.aspx
https://halgo.ifremer.fr/en
https://www.umr-decod.fr/en
https://www.association-francaise-halieutique.fr/