{"id":59,"date":"2014-07-18T16:24:55","date_gmt":"2014-07-18T15:24:55","guid":{"rendered":"http:\/\/elcep.legtux.org\/?p=59"},"modified":"2014-08-05T15:19:27","modified_gmt":"2014-08-05T14:19:27","slug":"netlogo-et-r","status":"publish","type":"post","link":"http:\/\/elcep.legtux.org\/?p=59","title":{"rendered":"Netlogo et R"},"content":{"rendered":"<p>Quand on se lance dans la mod\u00e9lisation \u00e0 base d&rsquo;agent, on se retrouve r\u00e9guli\u00e8rement face \u00e0 de tr\u00e8s gros jeux de donn\u00e9es issus d&rsquo;analyse de sensibilit\u00e9. Ce travail d&rsquo;excavation des r\u00e9sultats est facilement r\u00e9alisable avec R.<\/p>\n<p>Dans le cas de Netlogo, il existe un certain nombre d\u2019extensions qui permettent, en plus de l&rsquo;utilisation traditionnelle de R pour l&rsquo;exploration des r\u00e9sultats, d\u2019appeler des mod\u00e8les depuis un script R (package RNetlogo), mais \u00e9galement le contraire, c&rsquo;est-\u00e0-dire appeler R dans l&rsquo;interface Netlogo.<\/p>\n<h1>RNetlogo une solution pour le couplage de mod\u00e8le<\/h1>\n<p>La premi\u00e8re solution qui consiste \u00e0 appeler Netlogo dans R par l\u2019interm\u00e9diaire du package <a title=\"cran RNetlogo\" href=\"http:\/\/cran.r-project.org\/web\/packages\/RNetLogo\/index.html\" target=\"_blank\">RNetlogo<\/a> a \u00e9t\u00e9 l&rsquo;objet de l&rsquo;atelier couplage de mod\u00e8le que j&rsquo;ai co-anim\u00e9 avec F. Vinatier en novembre 2013 dans le cadre du projet LACCAVE de l&rsquo;INRA, portant sur l\u2019adaptation au changement climatique de la viticulture.<\/p>\n<p>Voil\u00e0 un exemple d&rsquo;utilisation simple<\/p>\n<pre>rm(list=ls(all=TRUE)) \u00a0\u00a0\u00a0\u00a0# Ligne de code permettant d'effacer toutes les donnees de l'espace de travail\r\n\r\n#Chargement des LIBRAIRIES\r\nlibrary(RNetLogo)\r\n\r\n#Chargement du r\u00e9pertoire dans lequel se trouvent les donn\u00e9es\r\nChemin.datas=\"\/home\/delay\/DONNEES\/\"\r\nChemin.Netlogo=\"\/opt\/netlogo-5.0.4\"\r\nChemin.Model=\"\/home\/delay\/LAME\/LAME\"\r\n\r\n# Chargement de NetLogo\r\nNLStart(nl.path=Chemin.Netlogo,nl.version=5,gui=T) # lancement de Netlogo avec la GUI\r\n\r\n# Chargement du mod\u00e8le\r\nNLLoadModel(paste(Chemin.Model,\"\/Ruissellement.nlogo\",sep=\"\"))    \r\n\r\n# Initialisation du mod\u00e8le\r\nNLCommand(\"clear-all\")\r\nNLCommand(\"setup\")\r\n\r\n# Simulation sur XX pas de temps\r\ncpt=0\r\nwhile(cpt &lt;= 30) {   cpt=cpt+1   NLCommand(\"go\") ##le go doit \u00eatre dans une boucle pour \u00eatre executee plusieurs fois } # r\u00e9cup\u00e9ration des variables des agents population=NLGetAgentSet(c(\"age\",\"capital,\"innovation\"),\"farmers with [innovation &gt; 0], as.data.frame=FALSE, agents.by.row=TRUE )\r\n<\/pre>\n<h1>Netlogo-R, absorber les capacit\u00e9s statistiques de R dans Netlogo<\/h1>\n<p>L&rsquo;exp\u00e9rience contraire qui consiste \u00e0 importer R dans Netlogo via l&rsquo;extension <a title=\"netlogo-R\" href=\"http:\/\/r-ext.sourceforge.net\/\" target=\"_blank\">netlogo-R <\/a>est possible \u00e9galement , mais m&rsquo;a sembl\u00e9 un peu plus <em>tricky,<\/em> surtout \u00e0 installer (m\u00eame s&rsquo;il existe beaucoup de ressources sur l&rsquo;internet)!<\/p>\n<p>La premi\u00e8re chose \u00e0 faire est de t\u00e9l\u00e9charger l&rsquo;extension sur <a title=\"sourceForge\" href=\"http:\/\/sourceforge.net\/projects\/r-ext\/files\/\" target=\"_blank\">source-forge<\/a>, et la d\u00e9compresser dans le dossier extension de Netlogo.<\/p>\n<pre>unzip r_v1.3_for_NL5_R3.0_and_higher.zip \/opt\/netlogo\/extensions\/<\/pre>\n<p>Il vous faudra \u00e9galement installer R (\u00e7a va de soi), et quelques packages additionnels : rJava (pour faire communiquer les deux mondes R et Java) et JavaGD (si vous voulez pouvoir acc\u00e9der \u00e0 des graphes R dans netlogo).<\/p>\n<pre>install.packages(c(\"rJava\",\"JavaGD\"),dependencies=T)\r\n\r\n<\/pre>\n<p>La derni\u00e8re petite chose \u00e0 faire est de charger des variables d&rsquo;environnement ce qui, sous Linux, peut se faire \u00e0 la vol\u00e9e si vous compl\u00e9tez le fichier <em>.profile<\/em> ou <em>.bachrc<\/em> qui va bien pour votre distribution.<\/p>\n<ul>\n<li>sous <a title=\"communaut\u00e9 FR\" href=\"https:\/\/archlinux.fr\/\" target=\"_blank\">Archlinux<\/a> \u00e7a donne \u00e7a :<\/li>\n<\/ul>\n<pre>export JAVA_HOME=\/usr\/lib\/jvm\/java-7-openjdk\r\nexport R_HOME=\/usr\/lib\/R\r\nexport JRI_HOME=\/usr\/lib\/R\/library\/rJava\/jri<\/pre>\n<ul>\n<li>sous <a title=\"fedora fr\" href=\"http:\/\/www.fedora-fr.org\/\" target=\"_blank\">fedora<\/a> 20 \u00e7a :<\/li>\n<\/ul>\n<pre>##export pour R-Netlogo\r\nexport JAVA_HOME=\/usr\/lib\/jvm\/java-1.7.0-openjdk\r\nexport R_HOME=\/usr\/lib64\/R\r\nexport JRI_HOME=\/usr\/lib64\/R\/library\/rJava\/jri<\/pre>\n<p>et vous pouvez faire une petite v\u00e9rification &#8230;<\/p>\n<pre>echo $JRI_HOME<\/pre>\n<p>Il vous faudra maintenant lancer Netlogo en console pour que les variables d&rsquo;environnement soient prises en compte&#8230; Pour faire un rapide tour du propri\u00e9taire de ces nouvelles possibilit\u00e9s, il y a dans l&rsquo;archive que vous avez t\u00e9l\u00e9charg\u00e9e et d\u00e9compress\u00e9e dans votre fichier Netlogo plusieurs scripts Netlogo d&rsquo;exemple.<\/p>\n<pre>\u00a0extensions [r] ;;pour charger l'extension<\/pre>\n<pre>to stat_R ;; des op\u00e9ration stat issu de R \r\n\u00a0 ;; create R list from farmers agents\r\n\u00a0 ask farmers [\r\n\u00a0\u00a0\u00a0 ;;definition de la taille de la m\u00e9moire \r\n\u00a0\u00a0\u00a0 ifelse length capital_list &lt;= 5[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 set capital_list lput capital capital_list\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 set my_time lput ticks my_time\r\n\u00a0\u00a0\u00a0 ][\r\n\u00a0\u00a0\u00a0\u00a0 set capital_list lput capital capital_list\r\n\u00a0\u00a0\u00a0\u00a0 set capital_list remove-item 0 capital_list\r\n\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0 set my_time lput ticks my_time\r\n\u00a0\u00a0\u00a0\u00a0 set my_time remove-item 0 my_time\r\n\u00a0\u00a0\u00a0 ]\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 ifelse length capital_list &lt;= 5 [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ;; send the memory to R\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 r:put \"y\" capital_list\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 r:put \"x\" my_time\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0 ;; calculate correlation between weight and height\r\n\u00a0\u00a0\u00a0\u00a0 r:eval \"fm &lt;- lm(y ~ x)\"\r\n\u00a0\u00a0\u00a0\u00a0 set memory r:get \"fm$coefficient[2]\"\r\n\u00a0\u00a0\u00a0\u00a0 show memory\r\n\u00a0\u00a0\u00a0 ][\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 set memory 0\r\n\u00a0\u00a0\u00a0 ] \u00a0\r\n\u00a0 ]\r\nend<\/pre>\n<p>et voil\u00e0 \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quand on se lance dans la mod\u00e9lisation \u00e0 base d&rsquo;agent, on se retrouve r\u00e9guli\u00e8rement face \u00e0 de tr\u00e8s gros jeux de donn\u00e9es issus d&rsquo;analyse de sensibilit\u00e9. Ce travail d&rsquo;excavation des r\u00e9sultats est facilement r\u00e9alisable avec R. Dans le cas de Netlogo, il existe un certain nombre d\u2019extensions qui permettent, en plus de l&rsquo;utilisation traditionnelle de &hellip; <a href=\"http:\/\/elcep.legtux.org\/?p=59\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Netlogo et R<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[12,9,5,11],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-sma","tag-linux","tag-netlogo","tag-r","tag-statistique"],"_links":{"self":[{"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":7,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":123,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions\/123"}],"wp:attachment":[{"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/elcep.legtux.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}