¿Qué es Netlogo?

Netlogo es un entorno programable de modelado  para simular fenómenos naturales y sociales. Es especialmente adecuado para modelar sistemas complejos  que se desarrollan en el tiempo. Los modeladores pueden dar instrucciones a cientos o miles de “agentes” independientes todos operando en paralelo. Esto hace que sea posible explorar la relación entre el nivel micro del comportamiento de los individuos y los patrones a nivel macro que emergen de la interacción de muchos individuos.

Página oficial de Netlogo: https://ccl.northwestern.edu/netlogo/

Instalación

Puede ser instalado en Mac, Linux o Windows puede ser descargado por medio del siguiete enlace https://ccl.northwestern.edu/netlogo/download.shtml.

Figura 1. Logo de Netlogo

 

Figura 2. Primer pantallazo de Netlogo al iniciar

 

 

Primer Código

Para comenzar arrestremos en la pantalla un botón de inicio, el cual nos servirá para inicar la simulación con un click.

Figura 3. Del lado izquierdo la creación del boton inicio. Del lado derecho al hacer clic

E incluimos el siguiente código en la pestaña de código:

to inicio
 clear-all
 reset-ticks
 
 ask patches[set pcolor green ]
 
end

En este código nos dice que al botón de nombre inicio ejecute las línas de código hasta end, en este caso le decimos que limpie las variables y que escoja nuestro universo de la simulación de color verde.

Netlogo utiliza unas variables primitivas para trabajar en su código como por ejemplo:

Algunas variables

  • Turtle (tortuga)
  • Patch (parcela)
  • Agentset (conjunto de agentes)
  • Color (color)
  • Task (tarea)
  • Control/Logic (control/lógica)
  • World (mundo)
  • Perspective (perspectiva)
  • Input/Output (entrada/salida)

En el código anterior utilizamos la variable primitiva patches la cual selecciona todas las parcelas de nuestro universo, en este ejemplo las establece de un color definido.

Ahora usemos las tortugas para llenar nuestro mundo de agentes. Incluimos en nuestro universo un desplazador y la llamaremos tortuga:

Figura 4. Creamos un deslizador llamado: ‘tortugas’

Incluimos el código anterior para crear un número de tortugas definidas en el deslizador. Las estableceremos aleatoriamente con setxy.

Las variables random-xcor y random-ycor son variables de turtles y nos ayuda a definir un x y y aleatoria para el turtle que estamos creando. En este caso el número de torturgas definidas en el deslizador.

to inicio
 
  clear-all
  reset-ticks
 
  create-turtles tortugas[
    setxy random-xcor random-ycor
  ]
 
  ask patches[set pcolor green ]
 
end

 

 

Al correr nuestra simulación obtendremos:

Figura 6. Simulación de un número de tortugas.

Listo, ahora hagamos la simulación más iterativa, creamos un botón que se llame movertortuga e incluimos el siguiente código:

to movertortuga
  ask turtles [
    forward 1
 
    set heading random 360
 
    if (pcolor = green)[
      set pcolor blue
    ]
  ]
end

En este código hacemos varias cosas, con la línea 2 solicitamos a cada elemento de turtles que realice la siguientes acciones dentro.

En la línea 3 hacemos que se desplaze una parcela en donde está dirigida la tortuga. En la línea siguiente le decimos que gire a una dirección aleatoria dentro de 360. Y en la parceque que se desplaza preguntamos si es de color verde, si es verde que la establezca azul.

Tenemos entonces una simulación como la figura 7 al presionar el botón de movertortuga varias veces:

Figura 7. Simulación tortugas en movimiento

Ahora vamos hacer que las tortugas mueran, decimos que tienen una resistencia de 10 y por cada movimiento que realice se disminuye un punto de resistencia, pero si come en un pasto verde la resistencia no baja, tendremos entonces el siguiente código:

turtles-own[resistencia]

to inicio
  clear-all
  reset-ticks
 
  create-turtles tortugas[
    setxy random-xcor random-ycor
    set resistencia 10
  ]
 
  ask patches[set pcolor green ]
end
 
to movertortuga
  ask turtles [
    forward 1
    set resistencia resistencia - 1
    set heading random 360
 
    if (pcolor = green)[
      set pcolor blue
      set resistencia resistencia + 1
    ]
 
    if(resistencia = 0)[
      die
    ]
  ]
end

Analicemos algunas línes importantes de este código:

Línea 1: Establecemos un atributo a las tortugas llamado resistencia.

Línea 9: Establecemos a la tortuga una resistencia de 10.

Línea 18: Después de mover una tortuga disminuimos su resistencia en una unidad.

Línea 23: Al cambiar de color que suba una unidad de resistencia.

Líneas 26-28: Si la resistencia es 0, matar a la tortuga.

De esa manera la simulación llegará un punto donde no halla tortuga. Si marcamos en el botón movertortuga, para simular continuamente sin presionar clic obtenemos una pequeña simulación de nuestro programa:

 

Simulación

  • Crear aleatoriamente agentes de 40 y 60 individuos
  • 2 agentes no pueden ocpuar la misma parcela
  • Si un agente tiene todos sus lados con otros agentes, el agente no se mueve
  • Si un agente se mueve en una parcela verde gana 3 de energía.
  • Pierde 1 de energía por moverse.

 

turtles-own[energia]

to start
  clear-all
  clear-output
  reset-ticks

  let total random (21) + 40
 
  ask patches[set pcolor green ]

  create-turtles total[
    set heading one-of [0 90 180 270 360]
    set energia 10
    move-to one-of patches with [pcolor = green]
    ask patch-here [ set pcolor blue]
  ]
 
  show count turtles
end

to next
  ask turtles [
 
    let move 0
    let head one-of [0 90 180 270 360]
    let countTry 4
    let tryy 0
 
    while [tryy = 0]
    [
      set heading head
      forward 1
      set move 1
      set energia energia - 1
 
      if (any? other turtles-here)
      [
        forward -1
        set head head + 90
        set move 0
        set countTry countTry - 1
      ]
 
      if (countTry = 0)
      [
        set tryy 1
      ]
 
      if( move = 1 )
      [
        set tryy 1
      ]
 
    ]
 
    if (pcolor = green)[
      set pcolor blue
      set energia energia + 3
    ]
 
    if( energia < 1)
    [
      die
    ]
  ]
  show count turtles
 
end

La simulación queda entonces: