{"id":830,"date":"2016-02-11T00:06:31","date_gmt":"2016-02-11T06:06:31","guid":{"rendered":"http:\/\/agiltools.com\/blogsp\/?p=830"},"modified":"2016-04-05T14:40:20","modified_gmt":"2016-04-05T20:40:20","slug":"integrar_al_r_1","status":"publish","type":"post","link":"https:\/\/agiltools.com\/blogsp\/integrar_al_r_1\/","title":{"rendered":"Integrando AnyLogic y R Parte 1"},"content":{"rendered":"<div id=\"dslc-theme-content\"><div id=\"dslc-theme-content-inner\"><p>Como se explic\u00f3 en el post\u00a0anterior, R es un poderoso lenguaje de programaci\u00f3n\u00a0especializado en el an\u00e1lisis y manipulaci\u00f3n de datos, gratuito y de gran popularidad a nivel mundial\u00a0(<a href=\"http:\/\/agiltools.com\/blogsp\/intror_paquetes\/\" target=\"_blank\">ver post<\/a>).\u00a0Por su parte AnyLogic es un software de simulaci\u00f3n cuyo lenguaje de base es\u00a0Java lo que permite la integracion de librerias externas (ver <a href=\"https:\/\/es.wikipedia.org\/wiki\/AnyLogic\" target=\"_blank\">wiki<\/a>).<\/p>\n<p>Al combinar ambos sistemas es posible aprovechar de las funcionalidades de cada uno como gr\u00e1ficos, analisis y miner\u00eda de datos, pron\u00f3sticos,\u00a0etc.<\/p>\n<p>En este post explicaremos c\u00f3mo\u00a0llamar\u00a0R a partir de AnyLogic utilizando\u00a0dos diferentes librer\u00edas: AJAL Data Exporter y RCaller (se utilizan por separado y segun el caso se utiliza una u otra).<\/p>\n<p><a href=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/integratingALR.png\" rel=\"attachment wp-att-909\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-909\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/integratingALR.png\" alt=\"integratingALR\" width=\"265\" height=\"212\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<h2>AJAL Data Exporter<\/h2>\n<p>Librer\u00eda\u00a0desarrollada por\u00a0<a href=\"https:\/\/www.linkedin.com\/in\/winchell-qian-0a49a728\" target=\"_blank\">Winchell Qian<\/a> de la universidad de\u00a0Saskatchewan que permite crear una conexi\u00f3n entre AnyLogic y R a trav\u00e9s de un puerto virtual (socket). Una vez finalizada la simulaci\u00f3n\u00a0los datos tipo Array disponibles en AnyLogic (que son almacenados en estad\u00edsticas y\u00a0datasets), son transferidos autom\u00e1ticamente a\u00a0R. El usuario puede entonces aplicar todo tipo de estudios\u00a0desde la consola de R o de un IDE como <a href=\"https:\/\/www.rstudio.com\/\" target=\"_blank\">RStudio<\/a>. Este m\u00e9todo es muy eficiente para an\u00e1lisis posteriores a la simulaci\u00f3n ya que la comunicaci\u00f3n es de\u00a0una sola v\u00eda y no transfiere resultados de R a AnyLogic.<\/p>\n<p>El siguiente video es un demo de como configurar y utilizar esta librer\u00eda:<\/p>\n<p><iframe width=\"960\" height=\"720\" src=\"https:\/\/www.youtube.com\/embed\/SrDoR4ro11Q?feature=oembed\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>AJAL Data Exporter\u00a0es gratuito y puede ser descargado en los siguientes links:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.dropbox.com\/sh\/aglhl4uid8mbf0f\/AABMRyJU0IAkPVZnBYaLP22ua?lst\" target=\"_blank\">AnyLogic 6.9 y\/o 7.1<\/a><\/li>\n<li><a href=\"https:\/\/www.dropbox.com\/sh\/kjbr2qhfit5d3q6\/AAC_-ECijUo-EB6mUzBWVyZJa?dl=0\" target=\"_blank\">AnyLogic 7.2 en adelante<\/a><\/li>\n<\/ul>\n<p>Los links incluyen documentaci\u00f3n y un modelo de ejemplo.<\/p>\n<p>&nbsp;<\/p>\n<h2>RCaller<\/h2>\n<p>RCaller es una librer\u00eda desarrollada por <a href=\"http:\/\/mhsatman.com\/\" target=\"_blank\">Mehmet Hakan Satman<\/a> de la universidad de Estambul\u00a0que permite llamar una instancia virtual de R desde AnyLogic lo que permite transferir datos,\u00a0manipular y realizar an\u00e1lisis\u00a0en tiempo real, as\u00ed como acceder a la l\u00ednea de comandos y los gr\u00e1ficos de R (ver <a href=\"http:\/\/www.sciencedomain.org\/abstract\/4838\" target=\"_blank\">articulo<\/a>).<\/p>\n<p>La librer\u00eda\u00a0puede ser descargada en el siguiente <a href=\"https:\/\/github.com\/jbytecode\/rcaller\" target=\"_blank\">link<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Cu\u00e1l utilizar?<\/h2>\n<p>Como se infiere de las anteriores descripciones, AJAL Data Exporter es \u00fatil cuando se planea utilizar R luego de ejecutar\u00a0la simulaci\u00f3n, por ejemplo para exploraci\u00f3n y manipulaci\u00f3n de datos donde el proceso de an\u00e1lisis\u00a0no est\u00e1 definido. Por el contrario, si se desea hacer manipulaci\u00f3n de datos en tiempo real, bien sea para insertar gr\u00e1ficos avanzados o para elaborar an\u00e1lisis en R que requieren\u00a0ser utilizados durante la simulaci\u00f3n, es mejor\u00a0usar RCaller.<\/p>\n<p>&nbsp;<\/p>\n<h2>Ejemplo<\/h2>\n<p>A continuaci\u00f3n se presenta un sencillo ejemplo de la integraci\u00f3n de R con AnyLogic utilizando la librer\u00eda RCaller (tambi\u00e9n se encuentra\u00a0un\u00a0ejemplo con AJAL Data Exporter en el link de descarga). En un\u00a0siguiente\u00a0post se presentar\u00e1 un caso\u00a0m\u00e1s complejo aplicando t\u00e9cnicas de control de procesos y arboles de clasificaci\u00f3n.<\/p>\n<p>En primer lugar se crea un nuevo modelo\u00a0de AnyLogic (en este ejemplo se llama\u00a0<em>PLE 72 RCaller Test1.alp<\/em>), el cu\u00e1l\u00a0requiere\u00a0importar RCaller a la lista de clases.<\/p>\n<p><a href=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller.png\" rel=\"attachment wp-att-893\"><img loading=\"lazy\" class=\"aligncenter size-large wp-image-893\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller-1024x455.png\" alt=\"importRCaller\" width=\"580\" height=\"258\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller-1024x455.png 1024w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller-300x133.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller-768x341.png 768w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/importRCaller.png 1108w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>A continuaci\u00f3n se importan rcaller y las dem\u00e1s librer\u00edas necesarias para ejecutar el modelo<\/p>\n<p><a href=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/JavaImportRCaller.png\" rel=\"attachment wp-att-894\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-894\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/JavaImportRCaller.png\" alt=\"JavaImportRCaller\" width=\"542\" height=\"96\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/JavaImportRCaller.png 542w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/JavaImportRCaller-300x53.png 300w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/><\/a><\/p>\n<p>Una vez adentro de Main, creamos un bot\u00f3n desde la paleta de controles y lo llamamos R Plot (ver imagen)<\/p>\n<p><a href=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rplotButton.png\" rel=\"attachment wp-att-895\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-895\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rplotButton.png\" alt=\"rplotButton\" width=\"749\" height=\"160\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rplotButton.png 749w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rplotButton-300x64.png 300w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/a><\/p>\n<p>En las secci\u00f3n de acci\u00f3n al pulsar el bot\u00f3n escribimos el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:java decode:true\">RCaller caller = new RCaller();\r\ncaller.setRscriptExecutable(\"C:\/Program Files\/R\/R-3.2.3\/bin\/x64\/Rscript.exe\");\r\nRCode code = new RCode();\r\n\r\ndouble[] numbers = new double[]{1, 4, 3, 5, 6, 10};\r\ncode.addDoubleArray(\"z\", numbers);\r\n\/\/ Generar el plot usando File \r\ntry{\r\n\tFile file = code.startPlot();\r\n\t\/\/ Generar el plot en R\r\n\tcode.addRCode(\"plot(z, pch=19)\");\r\n\t\/\/ Fin del plot\r\n\tcode.endPlot();\r\n\tcaller.setRCode(code);\r\n\t\/\/ El archivo File retiene la informacion del grafico generado\r\n\t\/\/ permitiendo crear objetos tipo ImageIcon a partir de File\r\n\tcaller.runOnly();\r\n\tcode.showPlot(file);\r\n\t}\r\n\tcatch(Exception e){\r\n\t    e.printStackTrace();\r\n\t}\r\n<\/pre>\n<p><strong>Explicaci\u00f3n\u00a0del c\u00f3digo:<\/strong> Primero se crea\u00a0el objeto RCaller, luego se indica la ubicaci\u00f3n del ejecutable de R, en este caso\u00a0C:\/Program Files\/R\/R-3.2.3\/bin\/x64\/Rscript.exe. Luego se inicia un nuevo c\u00f3digo (tipo RCode) el cu\u00e1l almacenar\u00e1 todos los datos, comandos y gr\u00e1ficos de R.\u00a0Luego se crean los vectores y matrices a transferir y luego se inicia un objeto tipo File que contendr\u00e1 los resultados de R.<\/p>\n<p>Finalmente se ejecuta el experimento y una vez inicia se presiona el bot\u00f3n R Plot creando una ventana adicional con un gr\u00e1fico generado por R (ver imagen)<\/p>\n<p><a href=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rCallerExample1.png\" rel=\"attachment wp-att-896\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-896\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rCallerExample1.png\" alt=\"rCallerExample1\" width=\"1014\" height=\"692\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rCallerExample1.png 1014w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rCallerExample1-300x205.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/02\/rCallerExample1-768x524.png 768w\" sizes=\"(max-width: 1014px) 100vw, 1014px\" \/><\/a><\/p>\n<p>El archivo puede ser descargado en el siguiente <a href=\"http:\/\/agiltools.com\/Anylogic\/Files\/PLE%20R%20RCaller1.zip\" target=\"_blank\">link<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>La gama de aplicaciones al combinar estos dos programas es muy amplia en todos los campos (ciencias sociales, ingenier\u00eda, econom\u00eda, etc.).\u00a0Espere nuestro pr\u00f3ximo post donde explicaremos ejemplos mas avanzados.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Nota final:<\/strong> Existen otros paquetes como JRI que permiten\u00a0comunicar Java con R desde ejecici\u00f3n de simples comandos como la inserci\u00f3n de todo el script en la m\u00e1quina virtual de Java. Este paquete puede ser consultado en el siguiente link\u00a0<a href=\"https:\/\/rforge.net\/JRI\">https:\/\/rforge.net\/JRI<\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-830\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/integrar_al_r_1\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-830\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/integrar_al_r_1\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Como se explic\u00f3 en el post\u00a0anterior, R es un poderoso lenguaje de programaci\u00f3n\u00a0especializado en el an\u00e1lisis y manipulaci\u00f3n de datos, gratuito y de gran popularidad a nivel mundial\u00a0(ver post).\u00a0Por su parte AnyLogic es un software de simulaci\u00f3n cuyo lenguaje de base es\u00a0Java lo que permite la integracion de librerias externas (ver wiki). Al combinar ambos [&hellip;]<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-830\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/integrar_al_r_1\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-830\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/integrar_al_r_1\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"spay_email":""},"categories":[3,2,129],"tags":[132,108,131,25,130],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/830"}],"collection":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/comments?post=830"}],"version-history":[{"count":20,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/830\/revisions"}],"predecessor-version":[{"id":961,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/830\/revisions\/961"}],"wp:attachment":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/media?parent=830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/categories?post=830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/tags?post=830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}