Categorías: Squeak | Sistemas Multiagente |
|
Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia |
Modelo de segregación de Schelling
El modelo de segregación de Schelling describe la forma en que dos poblaciones interactuan y cómo se forman gethos de acuerdo a la intolerancia de cada uno de los miembros de las poblaciones a estar rodeados de vecinos que sean de otra población.
Para mayor información se recomienda visitar:
El modelo de Schelling de Segregación (en inglés) Texto introductorio al modelo
Modelo de simulación en Kedama (en Francés)
Modèle de ségrégation de Schelling (en Francés) Explica la construcción de algunas partes del modelo. El documento presente en este wiki no es una traducción literal, pero está fuertemente basado en este artículo. También está la página en frances del proyecto, con enlaces al archivo Squeak que lo implementa y un video del proyecto.
Contents
1. Implementación
Para implementar el modelo de segregación hacemos lo siguiente:
Arrastramos un mundo Kedama del catalogo de objetos al mundo y luego dos parches (un parche es el lugar a través del cual se comunican las tortugas). Uno de los parches es para los agentes de una población y otra para los agentes de otra población, por lo tanto podemos renombrarlos como patchRojos y patchAzules, respectivamente.
Sacamos un ejemplar de tortuga para un tipo de población, digamos la azul. Cambiamos su nombre a azul.
Sacamos un ejemplar de tortuga para el otro tipo de población, es decir la roja. Cambiamos su nombre a rojo.
A cada uno de los ejemplares de tortuga le agregámos una única variable booleana, que dice si el agente está satisfecho o no. Le llamamos, naturalmente satisfecho
En cada ciclo de ejecución el agente realiza tres acciones principales:
- Calcula el nivel de satisfacción.
- Si el agente no está satisfecho, se desplaza.
- El agente indica su presencia.
El algoritmo en Squeak que guíará todo el proceso es algo así:
Vamos a implementar cada uno de los métodos y variables que hacen que ese algoritmo funcione. Primero crearemos dichos métodos vacios y en la medida en que vamos avanzando los llenaremos de contenido.
Empezamos arrastrando guiones desde la categoría de guiones del agente rojo al mundo y les colocamos los siguientes nombres: probarSatisfacción, mover, y marcarPresencia. Estos guiones a su vez dependen de otros que iremos mostrando en la medida en que los vayamos desarrollando.
1.1. Implementando "probarSatisfaccion"
Para calcular la satisfacción el agente:
- Cuenta la cantidad de vecinos, discriminando los que son de su color y los que no.
- Luego calcula el porcentaje de los unos y los otros y mira si el porcentaje de vecinos de su mismo color son iguales o mayores a su porcentaje de tolerancia (es decir la tolerancia está referida en un sentido "no tradicional", a los habitantes que son de su misma población).
- En caso de que los vecinos de su mismo color sean mayores o iguales a su tolerancia a los vecinos del mismo color:
- se muestra satisfecho.
- de lo contrario se muestra insatisfecho
Por lo pronto mostraremos una captura de pantalla del código que implementa el método anterior, sin entrar en más detalles (veremos si es posible hacia futuro)
1.2. Implementando mostrarInsatisfecho
1.3. Implementando mostrarSatisfecho
1.4. Desplazamiento
Esta función de desplazamiento evita que dos agentes se superpongan. Para esto necesitaremos un nuevo parche que se encargue de controlar las posiciones (a fin de evitar colisiones). Arrastramos un nuevo parche desde el mundo Kedama y le llamamos posicionamiento. Luego implementamos el método mover, que explicamos a continuación
1.4.1. Mover
1.4.2. MoverBis
1.5. Interacción con el entorno
1.5.1. Marcar Presencia
Para esto se usa la función de difusión de un parche. Cuando se invoca dicha función sobre un valor presente en un parche, esta difunde el valor número entre sus vecinos. Por ejemplo si invocamos la función en una grilla con la siguiente disposición:
000
090
000El resultado será:
111
111
111Más aún, si hay dos elementos juntos, es decir con una vecindad compartida, los elementos de la vecidad se ven influenciados por la difusión de los elementos centrales, así, difundir una grilla con el patrón:
00000
09090
00000Produce:
11211
11211
11211Usaremos entonces la función de difusión sobre dos parches para indicar la presencia de un elemento de cada color (los de la población roja y los de la población azul) de este modo:
1.5.2. Marcar la posición
Esto se hace mediante la función iniciar que explicaremos después. Por lo pronto una captura de pantalla:








