# Experimento de variación de parámetros y recopilación de datos con conjunto de datos

Como en la nube, AnyLogic tiene un experimento de variación de parámetros, el **Parameter Variation**.

Antes de ponerse manos a la obra, una buena nota: AnyLogic ejecuta experimentos con replicaciones utilizando **processamento paralelo**, para que desencadene una replicación por centro disponible en la CPU de su computadora.&#x20;

¡Velocidad, amigos! :woman\_running: :man\_running:&#x20;

Crear nuevos experimentos es intuitivo y solo sigue la secuencia de comandos del menú desplegable **File > New > Experiment:**

![](https://lh4.googleusercontent.com/L1MQRjONaoNY3LqLqTv3j2P9aiMLwdt_S3kj0vY3wfDCCfcsfI4cP99RDPD8wjwlDHrdeaSge8YVgtx1h1Ir_GyYwqSCq4u-gKnw4NI0UYvCyhRGmtj7HUAtvXzQ0hwj7GKlen1S)

Aunque ya creamos varias salidas para el modelo, todas fueron creadas en el experimento **Simulation**. En el experimento recién creado **ParametersVariation: Main**, todavía no hay salida.&#x20;

El primer paso, por tanto, es crear elementos de recogida de datos (**Dataset, Statistics, Histogram data** etc.), de donde se pueden extraer las distribuciones de los parámetros de salida.&#x20;

Usaremos dos resultados en el análisis: la curva de tasa de conversión de boca en boca y otro valor muy específico, cuántos clientes se alcanzaron en 6 meses.&#x20;

## Curva de tasa de conversión de boca en boca

Si se hace clic con el segundo botón del mouse en los bloques y elementos de la pantalla, generalmente tienen opciones de recopilación de datos. Haga clic derecho en la secuencia **taxaDeConversão** y crea instantáneamente un **Data Set** on la opción **Create Data Set**:

![](https://lh5.googleusercontent.com/ciyz9rjV3zDXY4G_8aPszJjtNkERkEqYIvGT4KEfC7teKXfj_js-vRsZdSy0-6kjmz2E5G7z01u7Nek6wBIeBgdYUHOK5DCLmPoaEAXg1NHbEeg-5cbJoySyBVU39m2eVf_mpyR6)

Por defecto, el **Data Set** se crea sin la opción de actualización automática de datos (más adelante le mostraré cómo hacerlo). Para la hora, active la opción de recogida automática de datos y salga con la opción de recogida mensual de valores (el **Data Set** almacenará un número por mes):

![](https://lh6.googleusercontent.com/Ctc9uGJ5jU4jAREPhPTWRy3QDwN3WjZ0dfY09pmdlUTirIla_DrHZmWTaqdYM2VLLs6BBpDYEq3yYTetZSmbnFLTxfMY5AnID0cdqc_1N6Rqy7KESey3Y9lJ9RWCtcKYCswAiUx0)

## Número de clientes alcanzados en 6 mese**s**

Este es un poco más comp... ¡FÁCIL! La opción **Output** en la paleta **Analysis** nacida para ello. Haga clic y arrastre el elemento **Output** y nombrarlo **metaOutput**:

![](https://lh6.googleusercontent.com/zcZ8grRBYXN9a900ginIyq2pJsdMUPPKR8Xpd1Kt32UQLzM84jBKbIQZ1evkoAaHLhdlwe47IT67SbT1LTdWHmC1YEPrUrEe5ud9Pmuph8VmeavPGT8wO7gRkLiKds4x4BTAO3Du)

El bloque **Output** solo necesita dos datos: qué va a medir (en este caso, el número de Clientes) y cómo lo va a hacer (en este caso, recopilando datos después de un tiempo de simulación de seis meses):

![](https://lh4.googleusercontent.com/V9j58yrXhmx2Ulu9QIhZ3dUA4IRR7OT277KxuXWnvjSgBnjDGsbRlTIGWOpC76zNZ7E8clPwzTq-aVh0jrUIhQZMRews0JyPgUEcoE9Je75C6k_egw90CV7x0bsfhNHJTCGUOl_c)

¡Prueba el modelo, simula! :woman\_astronaut:&#x20;

![](https://lh6.googleusercontent.com/K5YLCuHCZmo2qsxgErSuyBstz9GDi7u1_LU88vL0FWdAFYK2EV4SIa71Y1oscieeFwQIs-slnAT_osOEEYEYzQJQ4ZPoOUpc2QfV36FqBWQ2-_oMO0OHJAXmj168egVh2ZuCd_9p)

## Poniendo todo junto en el **Parameter Variation**

Volver a la pestaña del experimento **ParametersVariation** y ve a la ventana **Properties**.

Inicialmente, cree una interfaz predeterminada haciendo clic en el botón **Create default UI**:

![](https://lh3.googleusercontent.com/pvuBYO5_TehAkAALhS8nxAD2Akw84BL90LQcdvVOvZ-bDxIda6-x6vPeGr7XcyQbQKWOsXxnBg_VCQl9mO2YFdiEwMoRrDTrtRPJIVgYl8MSmQjShUbPmxwn1XBgh4wb3gaUIKMq)

Ahora, mira cómo en la pestaña **Parameters** puedes variar los parámetros (como hiciste hace un tiempo, allá en la nube). Varíe el número de meses entre 0 y 10 meses modificando la columna **Type** del parámetro meses:

![](https://lh5.googleusercontent.com/NM2B8tEN9r7fxdrGA02s3hY9f7Vko-p4xMF1lAFEcZ8SGDCXHjXLEO41blINGZGaUJFFMISY5nWTf3-YJ543EStMDACpzdktiUKAH2XcaOPNnRbRSRsB4pem8mGauWiZZQ5Cmsou)

La región de la pantalla de **ParametersVariation** acepta comandos de análisis de datos (gráficos, histogramas, resultados, etc.), así que agreguemos un **Time Plot** presentar los resultados de la curva de tasa de conversión, para cada escenario simulado:

![](https://lh3.googleusercontent.com/Bw1HmgpnZEO3dl03xGHfWnzOTZPdi8aVCSToMYXIupOUozwcl_XXLY6baWJuvPPlFw5fVob9rTwswFMOWE49ATojoNu5HwIUxI_5dVACp31LK0UWH98N0QBpGxFqDmTm0hNVSNi2)

* Eliminar cualquier elemento de la pestaña **Data** (ya que los datos no se recopilarán automáticamente);
* Seleccione la opción **Do not update data automatically** y
* No olvides cambiar la opción **Time window** dela **Scale**, para **40**:

![](https://lh6.googleusercontent.com/ZSY2XHUbxDj7vhTzEXPGRWGQUovS1BjIDV4ce3_n5ZGAMJ1klB0ZIlz9KFrLadB0F_UZBMZVdN8qg3gzQ-aYRCPnIO-5VjLAgR1xW112eIBkR3Ku6fLjvf4j1mLS3oXzxwZ9vLC2)

A diferencia de todos los gráficos que hemos hecho hasta ahora, este es el tipo de gráfico que no recopila datos automáticamente, sino que recibirá un comando para agregar datos a cada ejecución de simulación.

Una tarea relativamente sencilla, dado que cada elemento de recopilación de datos (como el **Time Plot**) tiene un comando **addDataSet**.

Ubique, en la ventana **Properties**, la línea **After simulation run**, sin menú **Java actions**:

![](https://lh5.googleusercontent.com/dqn5JqlD0aeNB6xy5W64bMTvH4I99OtvyRiJ95hKtGkbdKcMbiOB9FarkJuH68wYGw8F1Z7TigVTvShqB8uR98OVgK3FbNof8uvZDExz0VtPLGuAEhPmuwuygsc9iUIO8ainNg9n)

Esta línea de comando (que actualmente está vacía) siempre se ejecuta cuando AnyLogic termina de simular una replicación. Necesitamos agregar el resultado almacenado al final de cada simulación en el **Dataset taxaDeConversaoDS** no gráfico **taxasDeConversao**.

Con **CTRL + Espaço**, ingrese la línea de código (elija la segunda opción de **addDataSet**):

`plot.addDataSet(ds, title)`

![](https://lh5.googleusercontent.com/oLdWtpwwKSHJmkhuwhB2DK4cEBcNRStmN0X_gu6pl4utcllPfpl9lplnVQnYqIK75uuAy2mD9EV9djX3BGwUgc_nOBfGSNNzRMKtIoYYM3egR_lIJsrwx3xOGNaRfgdUpws-bh-k)

{% hint style="info" %}
**Importante**

* Hay 5 comandos **addDataSet** ¿en la lista? Bienvenido a la programación orientada a objetos. De ahora en adelante siempre será así: **CTRL + Espacio**, escriba algo y aparecerán todos los comandos disponibles dentro de eso objeto. No hay forma de memorizar estos comandos, ya que la cantidad de opciones va un poco más allá del infinito;&#x20;
* Acostúmbrate, como (espero) que te acostumbraste a andar en bicicleta y cuenta con Ayuda para comandos más difíciles. Como regla general, todo lo que haga haciendo clic, completando campos o conectándose se podrá construir con los comandos disponibles en el [API](https://pt.wikipedia.org/wiki/Interface_de_programa%C3%A7%C3%A3o_de_aplica%C3%A7%C3%B5es) del AnyLogic.
  {% endhint %}

La opción de **addDataSet** pide dos parámetros, el Conjunto de datos y tu título. Como el **dataset taxaDeConversaoDS** está no **Main**, necesitamos acceder a él desde el experimento actual.&#x20;

Pero hay un detalle más: si colocas el mouse sobre la lucecita amarilla en la línea **After simulation run**, recibirá la pista de la palabra **root**.

![](https://lh5.googleusercontent.com/6n-ykos6EI2ywRsjTiTI0WG2vCbNtfyQ0eyBNCUofQoynLiWnUtZTgff9cj2gyeF3Y5R_z7MW6OSDxSk1M0T11WoaiiqwXdXYWvhJw27QcT4OqwupHpoOotg4tR1Gu_AZ0xGQQyT)

Con el comando **root**, accede a cada replicación en ejecución o finalización. Complete el comando informó los dos parámetros de la función: el **Data Set** está en **String** indicando qué mes fue simulado (en cada punto escrito, **Ctrl+Espacio** y no olvides el punto y coma al final):

![](https://lh6.googleusercontent.com/wSk73-WXWpgk6Tmb2I7OMPMPxybP8p4uiVe1KBeSe9RvCOCV3nZQAC3rr7kQCgUTjgnie5IqVaoDFbTVb_fxEO1Ou8WVuca6ZQ1joCEuo-jris1o7u86qvdb0E88aHLBv1l_78ym)

¡Simular! :woman\_astronaut:&#x20;

(no olvides presionar el boton **Run**!)

<img src="https://images.unsplash.com/photo-1546546274-1703737efede?crop=entropy&#x26;cs=srgb&#x26;fm=jpg&#x26;ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHw5fHxyb2NrZXR8ZW58MHx8fHwxNjM0NjQyODA3&#x26;ixlib=rb-1.2.1&#x26;q=85" alt="" data-size="original">

![](https://lh3.googleusercontent.com/FB2Qr7ygiO4Unr1eEeiIuaMmqpo7fufcHAEa2aFvpfAGM4QzLUH3vpgXVmbHH7Ds99EjkoN13N4C-Z0aVfBVjZAXI7cQCvGbDCbYTpIL-O87MbmA0I8bvtynemdanr1Rt0r4IQXk)

Un poco rápido, ¿eh? ¡Bienvenido al procesamiento paralelo! Si su computadora tiene 8 núcleos como el mío, entonces AnyLogic procesó 8 escenarios en paralelo en la primera ejecución y luego 3 escenarios más, totalizando 11 simulaciones..

Disfruta del pack y crea un **Dataset** para almacenar el **metaOutput** que creamos en  **Main**. Vvolver a la línea **After simulation run** con la ayuda de **CTRL+Espaço**, busque el comando **add** adentro del **metaDS**:

![](https://lh5.googleusercontent.com/k5EOwPmukkYZTp-qwDNVuH_fYlEfeWbEY0Uawp3TPU1fv7D0G3xyuqZNk1ba0c9f7zbltOPlHNhioqqDYpxYaNlKMEhlkdTgzJ0b6AzVrAxBAuxO3KLk86gywt-t_kfBMuKbwNOs)

¿Por qué elegí un **Data Set**? Porque quiero almacenar los valores de cada escenario simulado.

Como en el caso del gráfico, necesitamos sumar el valor al final de cada simulación:

![](https://lh5.googleusercontent.com/_ZE6APGzVwN4wMtcH_U8hsra0myOxZHagf0jCq9RGTSuPYcdcAKXjWCLqByIGFLRsHsPkrhjWzwsWHLfwNqeIZkeRrO0xBwwRjpgV_pUFJOqxnu0G3XlsHJzyNTDK5tKkXK4Shce)

Con o **root**, llegamos fácilmente a los valores de simulación:

![](https://lh6.googleusercontent.com/601_bxhaaJI9oRzJu6G_RybXpA-NGIjlnzEt6cUkj1zk10MJDcmBuqJAn8gNh2FWpik4RGl6sL5IKoRxKKW12EM45zVTsGVMLS6kfoWoqdVVp6pcJoVMTcHlfUe_QgazuQ45d3Ng)

¡Simula! :woman\_astronaut:&#x20;

![](https://lh5.googleusercontent.com/bPxAns3I6kMcZoPxuSRqoimV9y1v2rFqEnsbJ0lJ7RJJloBeC40Fd6LohMvXGOsYYha71mrhVaMq0f1iOkEAgjFoWhzjMoZ-Ea0kXLEeRM-F9WQknsWotFhSIkvzSYclAW1ik95k)

Analizando los resultados del modelo, el período mínimo de inversión en marketing es de 6 meses.

Un breve resumen de lo que hemos hecho hasta ahora:

1. Creamos un bloque **Data Set** y un bloque de **Output** no agente **Main**;
2. En el experimento **ParametersVariation** creamos un **Time Plot** es un **Data Set**  para almacenar, respectivamente, cada **Data Set**(conjunto de datos) que representa la curva de conversión y cada **Output** (valor único) del número de clientes alcanzados en el 6º mes generado en cada simulación;
3. En las propiedades del experimento **ParametersVariation**,colocamos no campo **After simulation run** eso es todo **Java actions**, el comando:&#x20;

* `plot.addDataSet(root.taxaDeConversaoDS, "Meses = " + root.meses);`
* `metaDS.add(root.meses, root.metaOutput);`

{% hint style="success" %}
**Sugerencias**

* Los experimentos se almacenan junto con las plantillas y puede crear tantos como desee. Entonces, haga lo que hacen los profesionales: copie y pegue lo que ya ha hecho (gráficos, conjuntos de datos, código, etc.) de un modelo al siguiente.&#x20;
* Esté atento a los ejemplos (casi 400), que siempre tienen alguna idea en la que puede inspirarse.&#x20;
* ¿Quieres saber más sobre el experimento **Parameter Variation?**, ¿Cómo lidiar con las repeticiones, el tiempo de calentamiento, etc.? una manera es [esta sección del Volumen I](https://tutorial.anylogicbrasil.com.br/apendice-ou-coisas-que-deixariam-o-tutorial-ainda-maior/simulacao-com-replicacoes) en esta serie de tutoriales.
  {% endhint %}
