4 Taller 4 : Plaza de Mercado Modelo Basico

4.1 Taller 4 : Parte Uno

4.2 Taller 4 : Introduccion

Algunos clientes de una plaza de mercado se encuentran dentro de esta haciendo compras (cada uno tiene una lista de compras), la plaza tiene diferentes tiendas de venta (por simplicidad asumiremos inicuialmente que cada tienda vende un solo tipo de producto). Se quiere estudiar el comportamiento de clientes y tiendas de venta en la plaza.

4.3 Taller 4 : Elementos generales del modelo

4.3.1 Razas y atributos (Variables)

Definiremos dos razas (breed) una de clientes y otra de tiendas, los clientes tienen un atributo asociado(lista-de-compras) y las tiendas tienen también un atributo (producto) Definiremos una variable global (productos) que es una lista con todos los productos que se venden en la plaza: Abra NetLogo,la pestaña de código y coloque lo siguiente:

breed[clientes cliente]
breed[tiendas tienda]

globals[productos]

clientes-own[lista-de-compras]
tiendas-own[producto]

4.3.2 Definición del Mundo (Plaza de Mercado)

Usaremos un mundo de tamaño 17x 17 (289 parcelas),oprima el botón configuración y llene la ventana que aparece de la siguiente manera:



4.4 Taller 4 : Setup

Definimos los productos (12 productos de a a l) y colocaremos en el mundo tiendas y clientes al azar

to setup
  clear-all
  set productos ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"]   ; la plaza maneja 12 productos 
   setup-tiendas
   setup-clientes
   reset-ticks
end

to setup-tiendas   ; colocar las tiendas en el mundo con su producto de venta
end

to setup-clientes ; colocar los clientes  en el mundo con su lista-de-compras
end

4.4.1 setup-tiendas

llene el procedimiento setup-tiendas de la siguiente manera:

to setup-tiendas   ; colocar las tiendas en el mundo con su producto de venta
   ask n-of num-tiendas patches [
     sprout-tiendas 1]
   ask tiendas [
     set shape "dot"
     set producto item who productos   ; asegura que cada tienda maneje un producto diferente
   ]
end
Cada tienda manejará un producto diferente, usaremos un deslizador num-tiendas para variar el número de tiendas de la plaza. Al oprimir el botón comprobar NetLogo nos informará del error: “Nothing named num-tiendas has been defined”, definamos el deslizador con las siguientes propiedades


Cree el botón setup y haga clic sobre el, debe aparecer algo parecido a lo siguiente:



Oprima varias veces setup para confirmar la correcta creación de las tiendas.

4.4.2 setup-clientes


to setup-clientes ; colocar los clientes  en el mundo con su lista-de-compras
   ask n-of num-clientes patches [
     sprout-clientes 1]
   ask clientes [
     set shape "arrow"
     set lista-de-compras n-of 5 productos   ; todas las listas de los clientes tendrán 5 productos diferentes
   ]
end

Cada cliente maneja una lista con cinco productos todos diferentes y seleccionados al azar Al oprimir el botón comprobar NetLogo nos informará del error: “Nothing named num-clientes has been defined”, definamos deslizador llamado num-clientes de la siguiente manera:



El setup completo es el siguiente:

breed[clientes cliente]
breed[tiendas tienda]
 
globals[productos]

clientes-own[lista-de-compras]
tiendas-own[producto]

to setup
   clear-all
   set productos ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"]   ; la plaza maneja 12 productos 
   setup-tiendas
   setup-clientes
   reset-ticks
end

to setup-tiendas   ; colocar las tiendas en el mundo con su producto de venta
   ask n-of num-tiendas patches [
     sprout-tiendas 1]
   ask tiendas [
    set shape "dot"
     set producto item who productos   ; asegura que cada tienda maneje un producto diferente
   ]
end
 
to setup-clientes ; colocar los clientes  en el mundo con su lista-de-compras
   ask n-of num-clientes patches [
     sprout-clientes 1]
   ask clientes [
     set shape "arrow"
     set lista-de-compras n-of 5 productos   ; todas las listas de los clientes tendrán 5 productos diferentes
   ]
end

Haga clic varias veces en setup para verficar la correcta creación de tiendas y clientes. En el siguiente applet puede interactuar con el modelo:

4.5 Taller 4 : Parte Dos

4.6 Taller 4 : Introduccion

Ya construimos el setup de nuestro modelo básico ahora definiremos la interacción del modelo (go). La funcionalidad básica de nuestro modelo va a ser la siguiente:

Los clientas van recorriendo “al azar” la plaza de mercado mientras tengan algo que comprar ( lista-de-compras- no vacía) y cuando encuentran una tienda verifican si el producto de la tienda está en su lista de compras, en este caso compran el artículo (el arículo se remueve de la lista-de-compras) todom termina cuando nadie tiene nada que comprar.

Abra el Modelo anterior (setup)

4.7 Taller 4 : Procedimiento go

Coloquemos en la pestaña de código (debajo de todas las definiciones del setup) lo siguiente:

to go
   if all? clientes [ empty? lista-de-compras ] [stop]
   ask clientes [
     if not empty? lista-de-compras [a-comprar]
   ]
   tick
end
 
to a-comprar
end

Si no hay compras que hacer el modelo para cada cliente revisa su lista de compras, si no esta vacia va a comprar lo que falta.(a-comprar)

to a-comprar
   if any? tiendas-here
   [
     intente-comprar
   ]
   avanzar    ; compre o no compre debe avanzar
 end
 
to intente-comprar
end
 
to avanzar
   move-to one-of neighbors
end

Si el cliente llega a una sitio donde hay tiendas, mira si el producto de alguna de las tiendas del lugar hace parte de su lista-de-compras y en ese caso lo compra (intente-comprar)

to intente-comprar
   let una-tienda one-of tiendas-here
   if member? [producto] of una-tienda lista-de-compras     ; el producto está en la lista de compras
   [set lista-de-compras remove ([producto] of una-tienda) lista-de-compras    ; se "tacha" (remueve) el producto de la lista
   ]
end

una-tienda es una de las tiendas del lugar member? verifica si un elemento ([producto] of una una-tienda) hace parte de una lista (en este caso lista-de-compras) si el producto esta en la lista-de- se remueve el producto de la lista (remove ([producto] of una-tienda) lista-de-compras)



Defina los botones go y step y corra el modelo, coloque tiendas en 12 y clientes en 10. ¿Cuanto tiempo se demoran en promedio los clientes para comprar todos los productos de sus listas? Corra el modelo varias veces.

Finalmente construiremos una gráfica para observar visulamente que el número de productos comprados va disminuyendo hasta cero. Defina en NetLogo la siguiente gráfica


(Nota: sum [length lista-de-compras] of clientes el total de productos en todas las listas de compra.

El código completo del modelo es:

breed[clientes cliente]
breed[tiendas tienda]
 
globals[productos]
 
clientes-own[lista-de-compras]
tiendas-own[producto]

to setup
   clear-all
   set productos ["a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"]   ; la plaza maneja 12 productos
   setup-tiendas
   setup-clientes
   reset-ticks
end
 
to setup-tiendas   ; colocar las tiendas en el mundo con su producto de venta
   ask n-of num-tiendas patches [
     sprout-tiendas 1]
   ask tiendas [
     set shape "dot"
     set producto item who productos   ; asegura que cada tienda maneje un producto diferente
   ]
end
 
to setup-clientes ; colocar los clientes  en el mundo con su lista-de-compras
   ask n-of num-clientes patches [
     sprout-clientes 1]
   ask clientes [
     set shape "arrow"
     set lista-de-compras n-of 5 productos   ; todas las listas de los clientes tendrán 5 productos diferentes
   ]
end


to go
   if all? clientes [ empty? lista-de-compras ] [stop]
   ask clientes [
     if not empty? lista-de-compras [a-comprar]
   ]
   tick
end
 
to a-comprar
   if any? tiendas-here
   [
     intente-comprar
   ]
   avanzar    ; compre o no compre debe avanzar
end
 
to intente-comprar
   let una-tienda one-of tiendas-here
   if member? [producto] of una-tienda lista-de-compras     ; el producto está en la lista de compras
   [set lista-de-compras remove [producto] of una-tienda lista-de-compras    ; se "tacha" (remueve) el producto de la lista
   ]
end
 
to avanzar
   move-to one-of neighbors
end

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Listo !!!!!!!!!!!!!!

En el siguiente applet puede interactuar con el modelo: