On Fri, 26 May 2017 16:52:19 +0200 Audric Vigier <Audric.Vigier@ifremer.fr> wrote:
Bonjour,
Je souhaite utiliser une équation de recrutement seule pour décrire la distribution spatio-temporelle du recrutement pour plusieurs années. Le problème est multiple :
-bien que l'équation de recrutement compile, ISIS-Fish ne l'utilise pas. Dans le debug, je retrouve une erreur fatale :
2017-05-26 16:22:05,124 INFO [Thread-12] (SubProcessSimulationLauncher.java:302) run - dans un sous processus>2017-05-26 16:22:05,121 FATAL [SimThread sim_simuGdGCalib2010NoAlgo_2017-05-26-16-19] (PopulationImpl.java:863) getRecruitmentMatrix - Error in matrix recruitment creation 2017-05-26 16:22:05,124 INFO [Thread-12] (SubProcessSimulationLauncher.java:302) run - dans un sous processus>fr.ifremer.isisfish.IsisFishRuntimeException: Impossible d'évaluer l'équation: [recopie toute l'équation]
Il indique surtout que ce n'est pas une erreur java, mais une erreur métier en disant: Caused by: java.util.NoSuchElementException: L'objet pass<E9> en argument n'a pas <E9>t<E9> retrouv<E9> ou la dimension donn<E9>e ne convient pas:zone_merlu_reproduction in [merluccius Group 0, merluccius Group 1, merluccius Group 2, merluccius Group 3, merluccius Group 4, merluccius Group 5, merluccius Group 6, merluccius Group 7, merluccius Group 8, merluccius Group 9, merluccius Group 10, merluccius Group 11, merluccius Group 12, merluccius Group 13, merluccius Group 14, merluccius Group 15, merluccius Group 16, merluccius Group 17, merluccius Group 18, merluccius Group 19, merluccius Group 20, merluccius Group 21, merluccius Group 22, merluccius Group 23, merluccius Group 24, merluccius Group 25, merluccius Group 26, merluccius Group 27, merluccius Group 28, merluccius Group 29, merluccius Group 30, merluccius Group 31, merluccius Group 32, merluccius Group 33, merluccius Group 34, merluccius Group 35, merluccius Group 36, merluccius Group 37, merluccius Group 38, merluccius Group 39, merluccius Group 40, merluccius Group 41, merluccius Group 42, merluccius Group 43, merluccius Group 44, merluccius Group 45, merluccius Group 46, merluccius Group 47, merluccius Group 48, merluccius Group 49, merluccius Group 50, merluccius Group 51, merluccius Group 52, merluccius Group 53, merluccius Group 54, merluccius Group 55, merluccius Group 56, merluccius Group 57, merluccius Group 58, merluccius Group 59, merluccius Group 60, merluccius Group 61, merluccius Group 62, merluccius Group 63, merluccius Group 64] En gros tu demandes à retrouver zone_merlu_reproduction dans les groupes de population :( Je pense que ça vient de cette ligne: result.setValue(zone,recrudszone); //affectation du recrutement au prorata de la ssb dans la zone Car si on ouvre l'éditeur dans Isis et que l'on clique sur "Recruitment" tout en haut, ça ouvre la javadoc (http://www.isis-fish.org/apidocs/fr/ifremer/isisfish/equation/PopulationRecr...) ou l'on peut lire: result - la matrice resultat que l'equation doit remplir, il s'agit d'une matrice groupes/zones Il te manque le groupe auquel tu veux affecter la valeur dans le setValue. il faudrait aussi éviter les System.out.println qui ne permettent pas d'avoir les traces dans le simulation.log, ni de supprimer ces sorties lorsque l'équation est débuggée (ce qui fait perdre du temps à la simulation) Je vois que tu utilises aussi des Randoms, il faut faire attention car du coup la simulation n'est pas reproductible et vu que tu ne sauves pas en tant que résultat ton random, tu ne sais pas avec quoi le calcul est fait.
-Malgré l'erreur fatale, ma simu ISIS tourne jusqu'à la fin. Le recrutement a donc dû être modélisé d'une certaine manière (très différente du contenu de l'équation), mais je ne vois pas comment. J'aurais préféré que la simu s'arrête dès que l'erreur est renvoyée.
Oui, je suis d'accord, il serait sans doute préférable que la simulation s'arrête. -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com