{"id":1069,"date":"2016-06-26T01:15:14","date_gmt":"2016-06-26T07:15:14","guid":{"rendered":"http:\/\/agiltools.com\/blogsp\/?p=1069"},"modified":"2016-07-04T22:54:26","modified_gmt":"2016-07-05T04:54:26","slug":"sampling-anylogic","status":"publish","type":"post","link":"https:\/\/agiltools.com\/blogsp\/sampling-anylogic\/","title":{"rendered":"Muestreo y an\u00e1lisis de resultados usando AnyLogic PLE"},"content":{"rendered":"<div id=\"dslc-theme-content\"><div id=\"dslc-theme-content-inner\"><p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1085\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/marbles1.jpg\" alt=\"marbles1\" width=\"1024\" height=\"683\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/marbles1.jpg 1024w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/marbles1-300x200.jpg 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/marbles1-768x512.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<script type=\"text\/javascript\"> jQuery(document).ready(function() { jQuery(\"#ffs-tabbed-1\").easyResponsiveTabs({     type: \t\"default\",     width:  \"100%\",     fit: \t false}); var cont_width = jQuery(\"#ffs-tabbed-1.resp-vtabs\").outerWidth() - jQuery(\"#ffs-tabbed-1.resp-vtabs .resp-tabs-list\").outerWidth() - 3;jQuery(\"#ffs-tabbed-1.resp-vtabs .resp-tabs-container\").css({\"width\":cont_width});}); <\/script><style type=\"text\/css\">\n#ffs-tabbed-1 li.resp-tab-active,\n#ffs-tabbed-1.resp-tabs-list li:hover{border-top-color:#71AFFF; border-bottom-color:#71AFFF;}\n#ffs-tabbed-1.resp-vtabs li.resp-tab-active,\n#ffs-tabbed-1.resp-vtabs .resp-tabs-list li:hover{border-left-color:#71AFFF; border-top-color:#C1C1C1; border-right-color:#71AFFF;  border-bottom-color:#C1C1C1;}\n<\/style><div id=\"ffs-tabbed-1\" class=\"ffs-tabbed-nav\"><ul class=\"resp-tabs-list\"><li>Intro<\/li><li>Teor\u00eda<\/li><li>AnyLogic<\/li><li>Muestreo<\/li><li>Descarga<\/li><\/ul><div class=\"resp-tabs-container\">\n<div class=\"fruitful_tab tab-intro\"><\/p>\n<p>Una vez construido un modelo de\u00a0simulaci\u00f3n es necesario ejecutar un\u00a0<strong>An\u00e1lisis Resultados\u00a0<\/strong>para garantizar la robustez de del modelo y la validez de los hallazgos.<\/p>\n<p>El an\u00e1lisis de resultados consiste en ejecutar m\u00faltiples repeticiones de un experimento haciendo o no cambios\u00a0a una o varias variables de manera que se describa\u00a0el comportamiento general del modelo\u00a0y se identifiquen los patrones de los resultados dados diferentes valores de las\u00a0variables de entrada. Si estas repeticiones se hacen con cambios\u00a0incrementales en las variables de entrada, se conoce como <strong>An\u00e1lisis de Sensibilidad<\/strong>.\u00a0Si las variables de entrada tienen una distribuci\u00f3n de probabilidad asociada se puede generar una secuencia combinada basada en dicha distribuci\u00f3n, lo que se conoce como <strong>Monte Carlo<\/strong>. Cuando las\u00a0variaciones son estratificadas (escalas uniformes) sin importar la distribuci\u00f3n asociada se conoce como <strong>Variaci\u00f3n de Par\u00e1metros<\/strong>.<\/p>\n<p>AnyLogic en su versi\u00f3n PLE permite realizar <strong>Variaci\u00f3n de Par\u00e1metros<\/strong> y <strong>Optimizaci\u00f3n<\/strong>. Versiones m\u00e1s avanzadsa como la versi\u00f3n profesional permiten adem\u00e1s realizar <strong>Comparaci\u00f3n de Experimentos<\/strong>, <strong>Monte Carlo<\/strong>, <strong>An\u00e1lisis de Sensibilidad<\/strong>, <strong>Calibraci\u00f3n<\/strong> y <strong>Experimentos personalizados<\/strong> (ver imagen).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1070\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/05\/exp.png\" alt=\"exp\" width=\"537\" height=\"520\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/05\/exp.png 537w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/05\/exp-300x291.png 300w\" sizes=\"(max-width: 537px) 100vw, 537px\" \/><\/p>\n<p>Siendo la variaci\u00f3n de par\u00e1metros el \u00fanico tipo de experimento disponible en la versi\u00f3n PLE para la fase post-simulaci\u00f3n\u00a0a continuaci\u00f3n se explica c\u00f3mo hacer muestreo y an\u00e1lisis de resultados usando este m\u00f3dulo y algunas maneras de implementar rutinas que incrementen su funcionalidad.<\/p>\n<p><\/div>\n<div class=\"fruitful_tab tab-teoria\"><\/p>\n<p>Al construir un\u00a0modelo de simulaci\u00f3n se debe establecer todo el espectro y distribuci\u00f3n de las variables de entrada (par\u00e1metros). Para ello utilizamos muestreo y an\u00e1lisis estad\u00edstico. Esta parte pre-simulaci\u00f3n ser\u00e1 tratada en otro post.<\/p>\n<p>Al finalizar el modelo, se deben ejecurar m\u00faltiples repeticiones con diferentes valores aleatorios y par\u00e1metros para establecer el rango total de salida. Idealmente se deben simular todos los escenarios posibles, sin embargo, en muchas\u00a0ocasiones el n\u00famero total de escenarios es tan alto que simular el espectro completo tarda demasiado. En estos casos es recomendable utilizar muestreo sobre los par\u00e1metros para elegir combinaciones estad\u00edsticamente representativas.<\/p>\n<p>A continuaci\u00f3n se explican los diferentes tipos de muestreo.<\/p>\n<h3>Tipos de Muestreo<\/h3>\n<p><strong>Muestreo Aleatorio:<\/strong> Consiste en generar muestras\u00a0eligiendo n\u00fameros al azar sobre la distribuci\u00f3n de probabilidad acumulada. Esta t\u00e9cnica requiere un elevado n\u00famero de muestras para conseguir una representaci\u00f3n adecuada de la variable en estudio (cientos o miles de repeticiones).<\/p>\n<p><strong>Muestreo Estratificado:<\/strong> Consiste en segmentar la variable en\u00a0grupos o estratos y elegir valores aleatorios al interior de cada sub-grupo para la simulaci\u00f3n. Los estratos son generados a partir de informaci\u00f3n t\u00edpica de la distribuci\u00f3n observada. Requiere tambi\u00e9n de un elevado n\u00famero de repeticiones aunque menor que el muestreo aleatorio.<\/p>\n<p><strong>Muestreo por Hipercubo Latino:<\/strong> Consiste en asignar distribuciones de probabilidad a cada variable de entrada y distribuir cada una en un n\u00famero de intervalos\u00a0equiprobables. Luego se eligen valores al interior de cada grupo y se\u00a0combinan con las dem\u00e1s dimensiones de las otras variables, para obtener vectores completamente independientes y aleatorios como entradas del modelo. Dado que cada muestra es independiente, se requieren menos repeticiones pues se asume que una serie completa de experimentos con esta entrada es estad\u00edsticamente independiente.<\/p>\n<p>Un inconveniente t\u00edpico en este \u00faltimo m\u00e9todo es que la representatividad de los resultados solo se puede evaluar luego de ejecutar todos los experimentos y en caso de no ser satisfactoria, se debe volver a empezar aumentando la cantidad de intervalos equiprobables. Una soluci\u00f3n a este inconveniente es la utilizaci\u00f3n del <strong>Hipercubo Latino Escalable<\/strong>.<\/p>\n<h3>Segmentaci\u00f3n<\/h3>\n<p>En otras ocasiones no es necesario conocer todo el espectro sino un segmento de \u00e9l. Si el segmento es cont\u00ednuo (ejemplo una variable puede distribuirse entre 100 y 200 visitas por hora pero solo se desea evaluar el impacto de mas de 160 visitas al d\u00eda) se considera como una variaci\u00f3n de par\u00e1metros con menos combinaciones. Cuando \u00a0las variaciones son discontinuas y combinadas, es mejor definir los\u00a0escenarios previamente y luego ejecutar experimentos basados \u00fanicamente en la matriz de entrada. En AnyLogic esto se implementa f\u00e1cilmente utilizando bases de datos o archivos externos.<\/p>\n<p><\/div>\n<div class=\"fruitful_tab tab-anylogic\"><\/p>\n<h3>Implementaci\u00f3n en AnyLogic<\/h3>\n<p>Una vez se elige un nuevo experimento de tipo variaci\u00f3n de par\u00e1metros, AnyLogic crea una nueva sesi\u00f3n en blanco donde se define la memoria total a utilizar, el agente de referencia (usualmente Main) y la forma como los par\u00e1metros van a interactuar (ver imagen). Estos par\u00e1metros pueden ser fijos o variables en un rango, es decir se fija un valor \u00fanico o el valor inferior y superior, as\u00ed como el paso (step) para su variaci\u00f3n uniforme.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1150\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVar0.png\" alt=\"parVar0\" width=\"524\" height=\"290\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVar0.png 524w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVar0-300x166.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/p>\n\n<p>De esta forma, si se tiene un modelo con 10 par\u00e1metros de entrada de las cuales 2 se planean fijas y 8 variables con 10 pasos por cada una, se deben tener al menos 100 millones de experimentos\u00a0para cubrir una sola repetici\u00f3n de todas las simulaciones.<\/p>\n<h3>Ejemplo<\/h3>\n<p>Un ejemplo es el siguiente modelo en el cu\u00e1l un taller cuenta con cuatro\u00a0estaciones de trabajo en serie, cada una con un buffer de entrada con capacidad limitada. Las estaciones cuentan con un tiempo de procesamiento tn (9, 12, 8 y 14 minutos respectivamente) distribuido triangularmente m\u00e1s o menos 10% (ver imagen del modelo).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1108\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarMain2-1.png\" alt=\"parVarMain2\" width=\"996\" height=\"685\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarMain2-1.png 996w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarMain2-1-300x206.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarMain2-1-768x528.png 768w\" sizes=\"(max-width: 996px) 100vw, 996px\" \/><\/p>\n<p>Luego de haber ingresado 1000 unidades al sistema el\u00a0modelo se detiene y verifica los indicadores claves de rendimiento. Estos son:<\/p>\n<ul>\n<li>% de piezas completadas<\/li>\n<li>Piezas en proceso promedio (WIP)<\/li>\n<li>Tiempo de ciclo promedio<\/li>\n<li>Tiempo total de operaci\u00f3n del taller<\/li>\n<li>Diferencia promedio de la utilizaci\u00f3n del mayor y menor buffer<\/li>\n<\/ul>\n<p>Si suponemos que las capacidades de cada buffer pueden variar entre 1\u00a0y 20 unidades lo que representa 20\u00a0pasos ya que los variaciones son discretas, se cuenta en total con 160,000\u00a0diferentes configuraciones para evaluar todo el espacio (sin r\u00e9plica).<\/p>\n<p>Para comprobar esto creamos un experimento tipo variaci\u00f3n de par\u00e1metros y asignamos los siguientes valores (ver imagen).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1109\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg1-1.png\" alt=\"parVarImg1\" width=\"518\" height=\"310\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg1-1.png 518w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg1-1-300x180.png 300w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/p>\n<p>Hacemos click en <strong>Create default UI<\/strong> para crear la interfaz. Luego a\u00f1adimos 5\u00a0estad\u00edsticas\u00a0locales (statComplete, statWIP,\u00a0statCycleTime, statTotalTime, statDiffQ) en las cuales guardaremos el resultado de cada experimento as\u00ed como tres histogramas (WIP, tiempo de ciclo y tiempo total).<\/p>\n<p>En la secci\u00f3n indicando qu\u00e9 hacer\u00a0luego de cada simulaci\u00f3n (After simulation run) a\u00f1adimos el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:java decode:true\">statComplete.add((double)root.sink.count()\/(double)root.totalUnits*100);\r\nstatWIP.add(root.statWIP.mean());\r\nstatCycleTime.add(root.statCycleTime.mean());\r\nstatTotalTime.add(root.totalTime);\r\nstatDiffQ.add(root.statDiffQ.mean());\r\ndataWIP.add(root.statWIP.mean());\r\ndataCycleTime.add(root.statCycleTime.mean());\r\ndataTotalTime.add(root.totalTime);<\/pre>\n<p>Y finalmente ejecutamos el experimento (ver imagen inferior).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1114\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg3.png\" alt=\"parVarImg3\" width=\"995\" height=\"684\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg3.png 995w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg3-300x206.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg3-768x528.png 768w\" sizes=\"(max-width: 995px) 100vw, 995px\" \/><\/p>\n<p>Como se puede observar ejecutar 160\u00a0mil \u00a0experimentos tom\u00f3 cerca de 8\u00a0minutos (478.1\u00a0segundos), y los estad\u00edsticos permiten establecer que:<\/p>\n<ul>\n<li>El % de copletado se encuentra entre 91.6 y 99.2 con media de 95.4%<\/li>\n<li>El WIP entre 0.02\u00a0y 70.2 con media de 36.4\u00a0unidades<\/li>\n<li>El tiempo de ciclo entre 112.2\u00a0y 1,077.4 con media de 613.8\u00a0minutos<\/li>\n<li>El tiempo total de operaci\u00f3n entre 12,823 y 13,998 con media de 13,395 minutos<\/li>\n<li>La diferencia promedio de utilizaci\u00f3n de buffers entre 0.4% y 94.9% con media de 37.9%<\/li>\n<\/ul>\n<p>Seg\u00fan se requiera se pueden crear experimentos espec\u00edficos de optimizaci\u00f3n que arrojen la configuraci\u00f3n indicada para por ejemplo minimizar el tiempo total de ciclo o minimizar el tiempo total de operaci\u00f3n o minimizar el trabajo en proceso (otros post se dedicar\u00e1n a la creaci\u00f3n de experimentos de optimizaci\u00f3n).<\/p>\n<p><\/div><\/p>\n<p><div class=\"fruitful_tab tab-muestreo\"><\/p>\n<p>A continuaci\u00f3n explicaremos dos formas de realizar el muestreo de manera que el tiempo total de experimentaci\u00f3n se reduzca.<\/p>\n<h3>M\u00e9todo Alternativo 1: Hipercubo usando R y AnyLogic<\/h3>\n<p>Creamos un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Latin_hypercube_sampling\">hipercubo latino<\/a> utilizando R y transferimos estos valores a AnyLogic para ejecutar espec\u00edficamente simulaciones de estas configuraciones.<\/p>\n<p>En primer lugar creamos un nuevo experimento de tipo variaci\u00f3n de par\u00e1metros. Esta vez no asignamos variabilidad a los par\u00e1metros de entrada (ver imagen). Creamos la interfaz haciendo click en\u00a0<strong>Create default UI.<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1115\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg4.png\" alt=\"parVarRImg4\" width=\"767\" height=\"710\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg4.png 767w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg4-300x278.png 300w\" sizes=\"(max-width: 767px) 100vw, 767px\" \/><\/p>\n<p>Un inconveniente que tiene esta t\u00e9cnica es que la cantidad de experimentos (dimensiones del cubo) son\u00a0definidas a trav\u00e9s de la cantidad de r\u00e9plicas (o usando la forma libre), en este caso escogemos\u00a0un total de 2000 experimentos para representar el espacio total de 160,000 (representando un 1.25% del total de la poblaci\u00f3n).<\/p>\n<p>A continuaci\u00f3n cargamos la librer\u00eda RCaller y la importamos al experimento. As\u00ed mismo definimos las acciones a realizar antes y despu\u00e9s de cada simulaci\u00f3n pasar los par\u00e1metros y capturar las estad\u00edsticas (ver im\u00e1gen siguiente).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1153\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg5.png\" alt=\"parVarRImg5\" width=\"777\" height=\"654\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg5.png 777w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg5-300x253.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg5-768x646.png 768w\" sizes=\"(max-width: 777px) 100vw, 777px\" \/><\/p>\n\n<p>Al igual que en la variaci\u00f3n de par\u00e1metros, en este experimentos creamos cinco estad\u00edsticos y tres histogramas.<\/p>\n<p>Adicionalmente creamos tres variables: totalExperimentos (int), dimensions (int) e hypercube (int[][]). Finalmente creamos una funci\u00f3n llamada getHyperCube con el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:java decode:true\" title=\"getHyperCube\">try { \r\n    RCaller caller = new RCaller();\r\n    RCode code = new RCode();  \r\n    caller.setRscriptExecutable(\"C:\/Program Files\/Microsoft\/MRO\/R-3.2.4\/bin\/x64\/Rscript.exe\");\r\n    code.clear();\r\n    code.R_require(\"lhs\"); \r\n    code.addRCode(\"a&lt;-randomLHS(\" + dimensions + \", 4)\");\r\n    code.addRCode(\"a&lt;-round(a*15+1,0)\");\r\n    caller.setRCode(code);\r\n    caller.runAndReturnResult(\"a\");\r\n    double[][] d =  caller.getParser().getAsDoubleMatrix(\"a\");\r\n    for(int i=0; i&lt;dimensions; i++){\r\n    \tfor(int j=0; j&lt;4; j++){\r\n    \thypercube[i][j]=(int)d[i][j];\r\n    \t}\r\n    }\r\n} catch (Exception e) {\r\n    System.out.println(e.toString());\r\n\t}<\/pre>\n<p>Esta funci\u00f3n se ejecuta al inicio de toda la serie de experimentos para crear el hipercubo en R (utilizando el paquete <a href=\"https:\/\/cran.r-project.org\/web\/packages\/lhs\/index.html\">lhs<\/a>) e importarlo a AnyLogic para almacenarlo en la variable local hypercube. Este hypercubo en realidad es una matriz donde cada fila representa la configuraci\u00f3n de los buffer de cada experimento a correr.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1117\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg6.png\" alt=\"parVarRImg6\" width=\"995\" height=\"683\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg6.png 995w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg6-300x206.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarRImg6-768x527.png 768w\" sizes=\"(max-width: 995px) 100vw, 995px\" \/><\/p>\n<p>Al ejecutar el experimento encontramos:<\/p>\n<ul>\n<li>El tiempo total de simulaci\u00f3n fue de tan solo 21 segundos (23 veces m\u00e1s r\u00e1pido que el experimento original)<\/li>\n<li>El % de copletado se encuentra entre 93.4 y 99.0 con media de 96.1%<\/li>\n<li>El WIP entre 2\u00a0y 54\u00a0con media de 29\u00a0unidades<\/li>\n<li>El tiempo de ciclo entre 138.6 y 867.59\u00a0con media de 511.9\u00a0minutos<\/li>\n<li>El tiempo total de operaci\u00f3n entre 13,061 y 13,947 con media de 13,508 minutos<\/li>\n<li>La diferencia promedio de utilizaci\u00f3n de buffers entre 1.5% y 93.2% con media de 28.3%<\/li>\n<\/ul>\n\n<p>Si bien\u00a0las distribuciones no reflejan los mismos l\u00edmites superiores e inferiores de la variaci\u00f3n de par\u00e1metros anterior, los valores hallados se aproximan bastante, con un tiempo de simulaci\u00f3n 23 veces inferior. Esta t\u00e9cnica es particularmente \u00fatil cuando se cuenta con capacidad limitada de computaci\u00f3n y experimentos complejos donde el espectro completo puede tomar d\u00edas enteros en ser simulado por tanto una muestra con resultados similares en menor tiempo es muy necesaria.<\/p>\n\n<h3>M\u00e9todo Alternativo 2:\u00a0Segmentaci\u00f3n<\/h3>\n<p>En este caso asumimos que solo deseamos simular las siguientes configuraciones:<\/p>\n<ul>\n<li>Buffer 1: variando de 5 a 15 (step=1)<\/li>\n<li>Buffer 2: solo puede ser 1, 5, 10 o 15<\/li>\n<li>Buffer 3: siempre 5<\/li>\n<li>Buffer 4: valores pares de 2 a 20<\/li>\n<\/ul>\n<p>En este caso el total de experimentos a realizar es 440 (11*4*1*10).<\/p>\n<p>Creamos\u00a0entonces un experimento tipo variaci\u00f3n de par\u00e1metros de forma libre con 440 repeticiones (ver imagen) y a\u00f1adimos un archivo de Excel donde hemos creado previamente las 440 configuraciones.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1123\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg6.png\" alt=\"parVarImg6\" width=\"769\" height=\"398\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg6.png 769w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg6-300x155.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg6-768x397.png 768w\" sizes=\"(max-width: 769px) 100vw, 769px\" \/><\/p>\n<p>En las acciones antes y despu\u00e9s creamos el siguiente c\u00f3digo que permite leer el archivo de Excel y llenar la variable local hypercube con todas las configuraciones requeridas. Adicionalmente capturamos las estad\u00edsticas de rendimiento al finalizar cada experimento.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1152\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg7.png\" alt=\"parVarImg7\" width=\"779\" height=\"553\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg7.png 779w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg7-300x213.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg7-768x545.png 768w\" sizes=\"(max-width: 779px) 100vw, 779px\" \/><\/p>\n\n<p>Ejecutamos el experimento.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1125\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg8.png\" alt=\"parVarImg8\" width=\"998\" height=\"685\" srcset=\"https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg8.png 998w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg8-300x206.png 300w, https:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/06\/parVarImg8-768x527.png 768w\" sizes=\"(max-width: 998px) 100vw, 998px\" \/><\/p>\n<p>Esta vez el experimento tom\u00f3 solamente 2.3 segundos (sin repetici\u00f3n). El usuario puede repetir varias veces la matriz Excel y aumentar el n\u00famero de experimentos en AnyLogic para a\u00f1adir repeticiones.<\/p>\n<p><\/div><\/p>\n<p><div class=\"fruitful_tab tab-descarga\"><\/p>\n<p>El modelo soporte, la librer\u00eda RCaller y el archivo Excel pueden ser descargados en el siguiente link.<\/p>\n<p><strong><a href=\"http:\/\/agiltools.com\/Resources\/Hypercube.zip\">Descarga<\/a><\/strong><\/p>\n\n<p><\/div>\n<\/div><\/div><div class=\"clearfix\"><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><\/h2>\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-1069\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/sampling-anylogic\/?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-1069\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/sampling-anylogic\/?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>&nbsp; &nbsp;<\/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-1069\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/sampling-anylogic\/?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-1069\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/agiltools.com\/blogsp\/sampling-anylogic\/?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,7],"tags":[108,163,162,165,25,160,164],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1069"}],"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=1069"}],"version-history":[{"count":24,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1154,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1069\/revisions\/1154"}],"wp:attachment":[{"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}