Erreur règle de gestion sans arrêt de simulation + obtenir l'abondance
Bonjour, bonne année à la communauté ISIS, Je suis confronté à 2 problèmes aujourd'hui : 1/ J'ai revu l'écriture d'une de mes règles de gestion dans ISIS. Dans la condition, je suis souhaite accéder à l'abondance du pas de temps courant, avant que le moindre processus de population, pêche ou gestion ne s'applique : double abundance = matResult.getMatrix(step, onePop, MatrixAbundance.NAME).copy().sumAll(); // 0 step 1 group 2 zone Cette commande ne marche pas, car la matrice d'abondance du pas de temps courant n'est disponible qu'après la pré-action. Pourtant, j'ai vraiment besoin d'accéder à ces valeurs d'abondance dès la condition. AbundanceBeginMonth du pas de temps précédent n'est pas un bon équivalent, car elle n'a pas encore subi les mortalités du pas de temps précédent. Quel subterfuge je peux employer pour récupérer l'abondance du début du pas de temps courant? 2/ Malgré ceci, la simulation ne s'arrête pas et revient au début de la boucle de condition sur les métiers. Or je pensais que ce problème de "non plantage" était résolu ? (j'utilise ISIS 4.4.2.2). Pouvez-vous faire en sorte que ce genre d'erreur fasse s'arrêter immédiatement la simulation svp? Bonne soirée, Audric
Bonjour, En ce qui concerne le pb 1/ , je l'ai résolu en bricolant un nouveau simulateur. Ses différences avec DefaultSimulator : j'ai déplacé la boucle if "Keep modification's information done in rule" avant les boucles for des condition et pré-action (pas sûr que ça aie servi), et juste avant ces boucles for, j'en ai rajouté une sur les populations, et qui reprend les premières lignes de computeMonth() servant à ajouter les résultats. Il est en PJ. Comme mes règles de gestion ne modifient pas le contenu des résultats en condition et pré-action, normalement ça ne devrait pas créer d'anomalie. Mais j'ignore peut-être les raisons qui font qu'en temps normal, les résultats que je voulais sont rajoutés après les pré-action et condition. Est-ce qu'un déplacement de l'ajout de ces résultats avant pré-action/condition pourriat être envisageable dans de futures versions? Ou ça compromet des modèles existants? (auquel cas, juste l'ajouter dans la liste des simulateurs lors de l'installation d'ISIS?) Bonne soirée, Audric On 17/01/2019 17:08, Audric Vigier wrote:
Bonjour, bonne année à la communauté ISIS,
Je suis confronté à 2 problèmes aujourd'hui :
1/
J'ai revu l'écriture d'une de mes règles de gestion dans ISIS. Dans la condition, je suis souhaite accéder à l'abondance du pas de temps courant, avant que le moindre processus de population, pêche ou gestion ne s'applique :
double abundance = matResult.getMatrix(step, onePop, MatrixAbundance.NAME).copy().sumAll(); // 0 step 1 group 2 zone
Cette commande ne marche pas, car la matrice d'abondance du pas de temps courant n'est disponible qu'après la pré-action. Pourtant, j'ai vraiment besoin d'accéder à ces valeurs d'abondance dès la condition. AbundanceBeginMonth du pas de temps précédent n'est pas un bon équivalent, car elle n'a pas encore subi les mortalités du pas de temps précédent. Quel subterfuge je peux employer pour récupérer l'abondance du début du pas de temps courant?
2/
Malgré ceci, la simulation ne s'arrête pas et revient au début de la boucle de condition sur les métiers. Or je pensais que ce problème de "non plantage" était résolu ? (j'utilise ISIS 4.4.2.2). Pouvez-vous faire en sorte que ce genre d'erreur fasse s'arrêter immédiatement la simulation svp?
Bonne soirée,
Audric
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 21/01/2019 à 18:58, Audric Vigier a écrit :
Bonjour,
Bonjour,
En ce qui concerne le pb 1/ , je l'ai résolu en bricolant un nouveau simulateur. Ses différences avec DefaultSimulator : j'ai déplacé la boucle if "Keep modification's information done in rule" avant les boucles for des condition et pré-action (pas sûr que ça aie servi), et juste avant ces boucles for, j'en ai rajouté une sur les populations, et qui reprend les premières lignes de computeMonth() servant à ajouter les résultats. Il est en PJ. Les utilisateurs peuvent modifier les scripts "Simulator" pour répondre à leur besoin. Donc ça peut être une bonne solution. Comme mes règles de gestion ne modifient pas le contenu des résultats en condition et pré-action, normalement ça ne devrait pas créer d'anomalie. Mais j'ignore peut-être les raisons qui font qu'en temps normal, les résultats que je voulais sont rajoutés après les pré-action et condition. Est-ce qu'un déplacement de l'ajout de ces résultats avant pré-action/condition pourriat être envisageable dans de futures versions? Ou ça compromet des modèles existants? (auquel cas, juste l'ajouter dans la liste des simulateurs lors de l'installation d'ISIS?)
Les regles peuvent modifier la structure de la base de données avant de faire une simulation, qui influence les résutats, c'est sans doute pour cela qu'elles doivent passer avant de faire le pas de temps courant. Mais on peut très bien prévoir d'ajouter des choses avant que les règles s'execute, cela serait à discuter avec tout le monde, et bien documenté pour différencier les résultats qui ne peuvent du coup pas être influencer par les règles de gestion. Mais, pour ton /1, une autre solution ne pourrait-elle pas être de récuperer la biomass du pas de temps précédent ? Ca devrait être la même valeur qu'au début du pas de temps courant non ?
2/
Malgré ceci, la simulation ne s'arrête pas et revient au début de la boucle de condition sur les métiers. Or je pensais que ce problème de "non plantage" était résolu ? (j'utilise ISIS 4.4.2.2). Pouvez-vous faire en sorte que ce genre d'erreur fasse s'arrêter immédiatement la simulation svp?
Le "non plantage" n'a été résolu que pour les equations. Pour les règles, dans le "DefaultSimulator.java", il y a un try/catch autour de l'appel de la "condition", donc si ton code en question est dans la condition, cela ne fera pas échouer la simulation. S'il est dans la "preAction", par contre, ça devrait arrêter la simulation. -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
Le 21/01/2019 à 18:58, Audric Vigier a écrit :
Bonjour,
Bonjour,
En ce qui concerne le pb 1/ , je l'ai résolu en bricolant un nouveau simulateur. Ses différences avec DefaultSimulator : j'ai déplacé la boucle if "Keep modification's information done in rule" avant les boucles for des condition et pré-action (pas sûr que ça aie servi), et juste avant ces boucles for, j'en ai rajouté une sur les populations, et qui reprend les premières lignes de computeMonth() servant à ajouter les résultats. Il est en PJ. Les utilisateurs peuvent modifier les scripts "Simulator" pour répondre à leur besoin. Donc ça peut être une bonne solution. OK Comme mes règles de gestion ne modifient pas le contenu des résultats en condition et pré-action, normalement ça ne devrait pas créer d'anomalie. Mais j'ignore peut-être les raisons qui font qu'en temps normal, les résultats que je voulais sont rajoutés après les pré-action et condition. Est-ce qu'un déplacement de l'ajout de ces résultats avant pré-action/condition pourriat être envisageable dans de futures versions? Ou ça compromet des modèles existants? (auquel cas, juste l'ajouter dans la liste des simulateurs lors de l'installation d'ISIS?)
Les regles peuvent modifier la structure de la base de données avant de faire une simulation, qui influence les résutats, c'est sans doute pour cela qu'elles doivent passer avant de faire le pas de temps courant.
Mais on peut très bien prévoir d'ajouter des choses avant que les règles s'execute, cela serait à discuter avec tout le monde, et bien documenté pour différencier les résultats qui ne peuvent du coup pas être influencer par les règles de gestion.
Mais, pour ton /1, une autre solution ne pourrait-elle pas être de récuperer la biomass du pas de temps précédent ? Ca devrait être la même valeur qu'au début du pas de temps courant non ? En fait il n'y avait pas d'autre solution, l'abondance la plus récente que je pouvais récupérer étant l'abondance BeginMonth du pas de temps
Bonjour On 04/02/2019 09:18, Eric Chatellier wrote: précédent, qui n'a pas encore subi les mortalités, ni les post-actions de règles (dans mon cas les post-actions peuvent modifier l'abondance). Mais modifier le simulateur a bien fonctionné.
2/
Malgré ceci, la simulation ne s'arrête pas et revient au début de la boucle de condition sur les métiers. Or je pensais que ce problème de "non plantage" était résolu ? (j'utilise ISIS 4.4.2.2). Pouvez-vous faire en sorte que ce genre d'erreur fasse s'arrêter immédiatement la simulation svp?
Le "non plantage" n'a été résolu que pour les equations.
Pour les règles, dans le "DefaultSimulator.java", il y a un try/catch autour de l'appel de la "condition", donc si ton code en question est dans la condition, cela ne fera pas échouer la simulation. S'il est dans la "preAction", par contre, ça devrait arrêter la simulation.
Je viens d'essayer et ça marche, la simulation a bien échoué, et avec des indications sur les raisons du plantage en debug (que j'ai pu résoudre). Finis les débuggages à la vitesse d'un escargot :) Pour le coup, je pense que c'est une bonne idée d'enlever ce try/catch par défaut, qui pour moi masque de potentielles erreurs dans le code des règles de gestion et ralentit le développoment des scripts. Mais bon, à discuter à la réunion je suppose. Merci pour la réponse, Audric
participants (2)
-
Audric Vigier -
Eric Chatellier