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: