J’ai évoqué le mois dernier le mariage possible entre netlogo et R via l’extension netlogo-R développée par Jan C. Thiele et Volker Grimm. Une extension géniale, mais que je n’arrivais pas à lancer en multithread (la question est toujours en suspens, visiblement un problème de référencement du package rJava ou JRI de R sous Fedora et RedHat ?).
Sur les conseils de Jan C. Thiele, je suis parti à la découverte de l’autre extension pour intégrer R dans netlogo, la bien nommée : NetLogo-Rserve-Extension.
Comme nous commençons à être particulièrement à l’aise avec l’installation d’extensions, cela ne prend pas très longtemps. D’autant plus que l’installation NetLogo-Rserve-Extension semble bien plus facile (pas de modification de $PATH). Une fois l’archive ZIP téléchargée, vous la déposerez dans votre dossier extension de Netlogo
sudo cp -r rserve /opt/netlogo-5.0.5/extensions/
Il vous faudra ensuite installer le package Rserve qui va bien dans R
install.packages('Rserve', dependencies=T)
Vous êtes maintenant presque en mesure de lancer netlogo avec son extension, les petites particularités qu’il vous faudra maintenant prendre en compte sont plus liées au fonctionnement de Rserve que de netlogo.
Avant de lancer un modèle à base d’agents qui appellera R, il faut dans un premier temps lancer le serveur R (doc).
#chargement de la librairie library('Rserve') #lance le daemon du serveur Rserve()
Voilà, vous pouvez maintenant laisser tourner R en tache de fond et vous attaquer à la documentation de l’extension netlogo (qui se trouve pour nous dans /opt/netlogo-5.0.5/extensions/rserve/doc/r-extension.html).
La plupart des fonctions qui étaient portées par l’extension netlogo-R sont présentes en ce qui concerne la discussion entre les deux softs. Mais il faudra tout de même modifier un peu vos scripts. Tout est dans la documentation, mais quelques points sont à mettre en évidence :
Le fonctionnement de cette extension se fait via une connexion TCP/IP avec le serveur R que vous venez d’instancier. Ce qui veut dire qu’il faut en début de script initialiser la connexion (par exemple juste après clear-all)
#initialisation d'une connexion locale rserve:init 6311 "localhost"
Et il faudra fermer cette connexion une fois le modèle terminé
if ticks > 100 [ stop ;;stop le modèle rserve:close ;;ferme la connexion ]
On peut également/alternativement intégrer la fermeture de la connexion dans le BehaviorSpace comme sur la figure suivante.
À partir de là, cela devrait se passer suffisamment bien 🙂 et j’espère que vous ne passerez pas un mois à chercher comment paralléliser netlogo et R… A suivre, il faudra que je teste la chose avec OpenMole, mais le fait de passer par TCP/IP devrait faciliter la chose !.
Bon courage!