Session R restant ouverte durant toute la simulation
Bonjour, pour le module XSA, j'ai besoin que R se lance lors de l'initialisation , pour l'import des séries temporelles, donc j'ai fait : REngine engine = new RProxy(); dans la methode init,jusque là tout va bien R répond etc Par contre je fais à nouveau appel à R en post action, pour mettre à jour les objets R créés en init, donc il faut que ce soit la même session de R. J'imagine qu'il faut que je lance une session en dehors de la méthode init mais je n'y arrive pas. (et oui toujours limité en java..) En gros pour résumer : R se lance en initialisation , création d'un objet stock dans R. En post action, si c'est le bon mois -> mise à jour du même objet stock dans R. Si quelqu'un a une idée, elle est la bienvenue. Merci, Benoit
Si quelqu'un a une idée, elle est la bienvenue. En fait, ce qu'il faut c'est que tu aies toujours le même objet engine. Donc soit tu le crée à un endroit où tu peux le récupérer en
Benoit Archambault wrote: post-action, sinon, tu le passes en paramètre de toutes méthodes. Quoi qu'il arrive, si tu fais un new RProxy(), tu auras toujours une nouvelle session R avec rien dedans. Sinon une autre méthode à laquelle je pense, c'est d'enregistrer dans un RData tes modifs : - init, tu crées le REngine, tu initialise tous les objets R, tu sauvegardes la session, tu fermes le REngine. - post action, tu crées le REngine, tu charge la session, tu fais tes modifs, tu réenregistre ta session, tu fermes le REngine. Bien sûr ça marchera que si tu enregistre/charge toujours la même session (le fichier RData). Jean
Concrètement ou dois-je créer l'objet engine pour pouvoir le récupérer en init et en post action ? J'ai essayé de bidouiller sans grand succès. J'avais pensé au coup du RData mais j'ai peur que ca alourdisse la procédure, je me trompe ? Benoit
Benoit Archambault wrote:
Concrètement ou dois-je créer l'objet engine pour pouvoir le récupérer en init et en post action ? Tu peux essayer de mettre le engine en attribut de ta classe et de mettre le new dans l'init (appelé qu'une fois). Comme ça en post-action tu auras toujours la même instance du REngine. J'ai essayé de bidouiller sans grand succès. J'avais pensé au coup du RData mais j'ai peur que ca alourdisse la procédure, je me trompe ? Pas du tout, c'est lourd ça c'est sûr, c'est une méthode à n'utiliser que si tu ne peux pas faire autrement. Cela dit, c'est assez puissant car ça te permet de persister ta session entre plusieures simus par exemple (on sais jamais ;) ). Et c'est d'autant plus à éviter que les règles sont appelées très souvent.
Jean
Concrètement ou dois-je créer l'objet engine pour pouvoir le récupérer en init et en post action ? Tu peux essayer de mettre le engine en attribut de ta classe et de mettre le new dans l'init (appelé qu'une fois). Comme ça en
Benoit Archambault wrote: post-action tu auras toujours la même instance du REngine.
Le 29/03/2010 17:07, Jean Couteau a écrit : public class IsisRule extends AbstractRule { protected REngine engine; public void init(SimulationContext context) throws Exception { engine = new RProxy(); } public void preAction(SimulationContext context, Date date, Metier metier) throws Exception { engine.doSomethings(); } public void postAction(SimulationContext context, Date date, Metier metier) throws Exception { engine.doOtherSomethings(); } } -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Eric Chatellier wrote:
Le 29/03/2010 17:07, Jean Couteau a écrit :
Benoit Archambault wrote:
Concrètement ou dois-je créer l'objet engine pour pouvoir le récupérer en init et en post action ?
Tu peux essayer de mettre le engine en attribut de ta classe et de mettre le new dans l'init (appelé qu'une fois). Comme ça en post-action tu auras toujours la même instance du REngine.
public class IsisRule extends AbstractRule {
protected REngine engine;
public void init(SimulationContext context) throws Exception { engine = new RProxy(); }
public void preAction(SimulationContext context, Date date, Metier metier) throws Exception { engine.doSomethings(); }
public void postAction(SimulationContext context, Date date, Metier metier) throws Exception { engine.doOtherSomethings(); }
}
C'est vrai qu'avec l'example c'est plus clair ;) Merci Eric
participants (3)
-
Benoit Archambault -
Eric Chatellier -
Jean Couteau