Base de données non modifiée pendant une AS
Bonjour, J'essaye de modifier une matrice via une règle (règle en PJ). L'idée est de faire varier un facteur (coeffHake) qui est un paramètre de la règle; facteur qui est utilisé pour créer une matrice avec un script R. La matrice est ensuite lue, puis la base de données ISIS doit être modifiée (changeDB). La nouvelle valeur dans l'AS est bien utilisée, les nouvelles matrices sont écrites (et différentes des matrices de base), lues, les matrices de la base de données sont mises à jour (verif sur une matrice l340 : la matrice écrite est différente de la matrice de base). Pourtant, tout se passe comme si je n'avais rien fait dans le reste de la simulation, les outputs sont strictement identiques entre simulations (les exports d'abondance par groupe de pop sont identiques par exemple ... comme tout le reste). Ce n'est pas normal, étant donné qu'il s'agit de matrices de transition régissant la croissance. Dans l'interface ISIS, les indices de sensibilité calculés sont 0 ou NA, comme il n'y a pas de différence entre simus. Rien à signaler dans le debug. Dans les parameter.properties de chaque simulation, les generatedPreScript sont différents; je retrouve par exemple params.setProperty("rule.0.parameter.coeffHake","0.8") , ce qui indique qu'ISIS a bien fait tourner la règle avec une valeur autre que 1, la valeur par défaut. Que je fasse la MàJ de la base de données en init ou en preAction, j'ai les mêmes symptômes. Comment résoudre le problème? Audric
Le 03/05/2019 à 13:51, Audric Vigier a écrit :
Pourtant, tout se passe comme si je n'avais rien fait dans le reste de la simulation
Il est normal que ce qui est fais dans un pas de temps soit annulé à la fin du pas de temps. Ce n'est pas ça ton problème ? -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
On 03/05/2019 13:20, Eric Chatellier wrote:
Le 03/05/2019 à 13:51, Audric Vigier a écrit :
Pourtant, tout se passe comme si je n'avais rien fait dans le reste de la simulation
Il est normal que ce qui est fais dans un pas de temps soit annulé à la fin du pas de temps.
Ce n'est pas ça ton problème ?
Je viens d'essayer avec result = true pour les tous les pas de temps dans la condition; et en faisant les calculs soit dans la preAction soit dans l'init, même problème. Et il n'y a pas moyen de modifier la base une seule fois en début de simulation plutôt qu'à chaque pas de temps? (je pensais que tout faire en init faisait l'affaire?)
Le 03/05/2019 à 15:21, Audric Vigier a écrit :
Je viens d'essayer avec result = true pour les tous les pas de temps dans la condition; et en faisant les calculs soit dans la preAction soit dans l'init, même problème.
Et il n'y a pas moyen de modifier la base une seule fois en début de simulation plutôt qu'à chaque pas de temps? (je pensais que tout faire en init faisait l'affaire?)
Pas dans une règle. Elle ont un fonctionnement par pas de temps. Dans un script de préSimulation, c'est possible. -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
On 03/05/2019 14:25, Eric Chatellier wrote:
Le 03/05/2019 à 15:21, Audric Vigier a écrit :
Je viens d'essayer avec result = true pour les tous les pas de temps dans la condition; et en faisant les calculs soit dans la preAction soit dans l'init, même problème.
Et il n'y a pas moyen de modifier la base une seule fois en début de simulation plutôt qu'à chaque pas de temps? (je pensais que tout faire en init faisait l'affaire?)
Pas dans une règle. Elle ont un fonctionnement par pas de temps.
Dans un script de préSimulation, c'est possible.
Oui mais je passe par une règle parce qu'on ne peut pas faire d'AS avec des scripts de pré-simu.
Le 03/05/2019 à 15:25, Eric Chatellier a écrit :
Le 03/05/2019 à 15:21, Audric Vigier a écrit :
Je viens d'essayer avec result = true pour les tous les pas de temps dans la condition; et en faisant les calculs soit dans la preAction soit dans l'init, même problème.
Et il n'y a pas moyen de modifier la base une seule fois en début de simulation plutôt qu'à chaque pas de temps? (je pensais que tout faire en init faisait l'affaire?)
Pas dans une règle. Elle ont un fonctionnement par pas de temps.
En fait je dis des bêtises. Ce qui est fais dans l'init() est validé pour la simulation. Ce qui est fait en pre/postAction() et annulé à la fin du pas de temps. Donc ce que tu fais dans l'init() n'a aucune influence ? -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
On 03/05/2019 14:36, Eric Chatellier wrote:
Le 03/05/2019 à 15:25, Eric Chatellier a écrit :
Le 03/05/2019 à 15:21, Audric Vigier a écrit :
Je viens d'essayer avec result = true pour les tous les pas de temps dans la condition; et en faisant les calculs soit dans la preAction soit dans l'init, même problème.
Et il n'y a pas moyen de modifier la base une seule fois en début de simulation plutôt qu'à chaque pas de temps? (je pensais que tout faire en init faisait l'affaire?)
Pas dans une règle. Elle ont un fonctionnement par pas de temps.
En fait je dis des bêtises.
Ce qui est fais dans l'init() est validé pour la simulation.
Ce qui est fait en pre/postAction() et annulé à la fin du pas de temps.
Donc ce que tu fais dans l'init() n'a aucune influence ?
Oui
Le 03/05/2019 à 15:38, Audric Vigier a écrit :
Donc ce que tu fais dans l'init() n'a aucune influence ?
Oui
Tu pourrais essayer sans creer de nouvelle transaction ? Juste en utilisant context.getDB(); et sans context.getSimulationStorage(), nextSimulation.getStorage().beginTransaction(), db.commitTransaction(), db.closeContext() ? -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
On 03/05/2019 14:46, Eric Chatellier wrote:
Le 03/05/2019 à 15:38, Audric Vigier a écrit :
Donc ce que tu fais dans l'init() n'a aucune influence ?
Oui
Tu pourrais essayer sans creer de nouvelle transaction ?
Juste en utilisant context.getDB();
et sans context.getSimulationStorage(), nextSimulation.getStorage().beginTransaction(), db.commitTransaction(), db.closeContext() ?
Problème résolu avec ce que tu viens de proposer (script en PJ). Merci Éric!
participants (2)
-
Audric Vigier -
Eric Chatellier