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-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/