1. Resumen ejecutivo
Start Engage Match es un simulador interactivo, autocontenido en un único archivo HTML/JavaScript, que modela cómo un grupo de personas con gustos, orientaciones y niveles de paciencia distintos se cruza en el espacio físico de un bar y, en determinadas condiciones, genera afinidad y —ocasionalmente— una conexión completa («match»).
A lo largo de este documento, la aplicación y el local que representa comparten un único nombre: Start · Engage · Match, que además describe con precisión sus tres fases —se pulsa Empezar, se produce el Engage al cruzarse dos personas, y algunas veces surge el Match—.
https://start-engage-match.netlify.app
El sistema combina cuatro capas de simulación que se ejecutan en tiempo real sobre un lienzo (canvas) de 20×20 metros: un modelo espacial del local (barra, pista de baile, zonas de sofás), un modelo de comportamiento individual (movimiento hacia puntos de interés, paciencia, abandono), un modelo de interacción social (el «engage» o encuentro, con una capa de compatibilidad y una capa de atracción física aleatoria) y un modelo temporal y económico que reproduce el ciclo de una noche real de bar, de 17:00 a 05:00.
El resultado se expresa como una animación en vivo, un panel de estadísticas con métricas de negocio (ingresos, coste por match) y un registro narrativo de los encuentros completos, generado automáticamente.
2. Portada de la aplicación
Al abrir el archivo, antes de acceder al simulador, se muestra una pantalla de portada con el logotipo de la aplicación y un botón «Entrar» que da paso a la sala.

El logotipo es un lockup horizontal —icono y nombre en la misma línea, como cualquier marca convencional—: a la izquierda, un pequeño icono con dos siluetas de género indefinido (sin rasgos que las identifiquen como hombre o mujer), cada una de un color distinto (ámbar y violeta, los mismos tonos que identifican la barra y la pista de baile dentro del propio simulador), con los morros encontrándose y un pequeño corazón en el punto de contacto; a la derecha, el nombre «Start · Engage · Match». El mismo icono, en una versión más pequeña, se repite junto al título dentro de la aplicación para mantener la identidad visual coherente en toda la interfaz. Es una pieza gráfica simple, generada íntegramente en SVG vectorial dentro del propio archivo, sin imágenes externas.
3. Objetivo y motivación
El proyecto nace como ejercicio de modelización de un fenómeno social —el encuentro casual entre personas— usando herramientas propias del análisis espacial y la simulación basada en agentes (agent-based modelling), aplicadas aquí a un dominio lúdico en lugar de a un dominio geográfico convencional. ¿Todo es GIS?. La respuesta es no, ¡pues eso!
Cada persona se comporta como un agente autónomo con reglas de movimiento, atributos propios y una función de decisión (el «engage») que determina si, al cruzarse físicamente con otro agente, se produce algún tipo de conexión. El objetivo explícito no es predecir comportamiento real, sino disponer de una maqueta interactiva y visual sobre la que iterar reglas de compatibilidad, probabilidad y economía, viendo el efecto agregado de cada cambio de forma inmediata.
4. Modelo del espacio físico
El local se representa como un cuadrado de 20 × 20 metros (560 × 560 píxeles en pantalla). Dentro de ese cuadrado se han definido cuatro zonas de interés, cada una con su propia probabilidad de ser elegida como destino por los agentes, y dos puertas físicamente separadas:
- Barra: franja a lo largo de la pared superior (18 × 2,4 m). Probabilidad de ser destino: 30 %.
- Pista de baile: zona central (10 × 7 m), la de mayor densidad esperada. Probabilidad: 40 %.
- Sofás y Mesas altas: dos rincones en las esquinas inferiores (4,5 × 3,5 m cada uno). Probabilidad: 12 % cada uno.
- Deambular libre: un punto aleatorio del local, sin zona asociada. Probabilidad: 6 %.
La Entrada está fijada en el centro de la pared inferior; toda persona nueva accede siempre por ese punto. La Salida está fijada en la pared izquierda, en una posición distinta de la entrada. Esta separación física busca un flujo más orgánico: quien entra atraviesa la sala hacia su primer destino, y quien se marcha recorre el local en sentido contrario hacia una puerta distinta, en lugar de desaparecer por el borde más cercano en el momento de irse.
5. Modelo de la población
Cada persona (agente) se genera con los siguientes atributos, fijados en el momento de entrar y constantes durante toda su estancia salvo que se indique lo contrario:
- Nombre: asignado aleatoriamente de un listado de nombres españoles, distinto para cada género.
- Género: masculino o femenino, con probabilidad 50/50.
- Orientación sexual: heterosexual, homosexual o bisexual (ver apartado 7).
- Preferencias personales: un vector de 5 gustos booleanos (Viajar, Cocina, Estudiar, Deporte, Música), cada uno asignado de forma independiente con probabilidad 50 %. Estas preferencias son la base de la compatibilidad (apartado 9).
- Historial de intentos: el conjunto de personas con las que ya se ha intentado un encuentro (con o sin éxito), para no repetir nunca el mismo emparejamiento.
- Paciencia acumulada: contador de tiempo en el local sin lograr un match completo (apartado 10).
6. Modelo de movimiento
En lugar de un paseo aleatorio uniforme por todo el local —que en la práctica apenas generaría cruces entre pocas personas repartidas en 400 m²—, cada agente elige un punto de destino concreto dentro de una de las zonas de interés (ver apartado 4) y camina hacia él en línea recta con velocidad propia (0,5–1,0 m/s equivalentes).
Al llegar a su destino, el agente permanece inmóvil un intervalo aleatorio (entre 0,7 y 2,2 segundos simulados aproximadamente) —simulando que pide en la barra o baila— y a continuación elige un nuevo destino, repitiendo el ciclo. Esta atracción hacia puntos calientes concretos (sobre todo la pista de baile) es lo que produce cruces frecuentes y realistas incluso cuando la población activa es reducida.
7. Modelo de atracción y orientación sexual
Antes de intentar cualquier encuentro, el sistema comprueba si existe atracción mutua real entre las dos personas que se han cruzado físicamente, en función de su género y orientación:
- Heterosexual: atracción únicamente hacia el género opuesto.
- Homosexual: atracción únicamente hacia su mismo género.
- Bisexual: atracción hacia ambos géneros.
La atracción debe ser mutua: si una persona no está interesada en el género de la otra, no se produce ningún intento de encuentro, aunque se hayan cruzado físicamente; simplemente siguen su camino, y ese cruce queda registrado como «sin interés» para no volver a evaluarse entre esas dos mismas personas. Esto significa, por ejemplo, que dos hombres heterosexuales que se crucen nunca iniciarán un encuentro entre sí, mientras que dos mujeres bisexuales sí podrán hacerlo.
El porcentaje de población no heterosexual y el reparto entre bisexualidad y homosexualidad dentro de ese porcentaje son parámetros configurables (apartado 16).
8. El encuentro: «engage» y «challenge» visual
Cuando dos personas con atracción mutua se cruzan físicamente (sus círculos se solapan en el lienzo) y no se han probado antes entre sí, ambas quedan congeladas en el sitio durante aproximadamente 1,8 segundos: es el «challenge». Durante ese tiempo se dibuja una línea de conexión entre ambas y, de forma escalonada, van apareciendo cinco casillas de color —una por cada una de las cinco preferencias—, iluminadas si ambas personas coinciden en esa preferencia (ya sea porque a las dos les gusta o porque a ninguna le gusta) y apagadas si no coinciden.
Transcurrido ese tiempo se resuelve el encuentro (apartado 9) y ambas personas quedan marcadas como ya intentadas entre sí, de modo que nunca vuelven a evaluarse la una a la otra.
Periodo de gracia de entrada: durante los primeros 5 segundos desde que una persona ha entrado por la puerta, no puede iniciar ningún encuentro. Sin esta pausa, dado que todo el mundo entra por el mismo punto, la mayoría de los encuentros se producirían de forma artificial justo en el umbral de la puerta, antes de que la gente tuviera ocasión de dispersarse hacia la barra, la pista o los rincones.
9. Compatibilidad y «chispa»: el modelo de dos niveles
La resolución del encuentro se calcula en dos pasos independientes, lo que da lugar a tres desenlaces posibles:
Paso 1 — Compatibilidad de intereses: se cuenta en cuántas de las 5 preferencias coinciden ambas personas. Si ese número iguala o supera un umbral configurable (por defecto 4 de 5, ajustable por franja horaria; ver apartado 11), se consideran «compatibles».
Paso 2 — La chispa: solo si son compatibles, se lanza una probabilidad —la «chispa»— configurable (50 % por defecto). Solo si esta también se cumple se considera un match completo.
Los tres desenlaces posibles son, por tanto:
- Match completo (compatibles + chispa): aparece un destello dorado con un corazón, ambas personas brillan, se muestra su nombre y se genera una entrada en el registro narrativo (apartado 13). Salen juntas del local.
- Compatible sin chispa (compatibles, pero sin suerte): destello azul, no hay match; ambas personas siguen su noche con normalidad, contando ese intento como uno de los tres disponibles.
- Sin compatibilidad: destello rojo; mismo efecto práctico que el caso anterior.
Esta separación entre «compatibilidad objetiva» y «chispa aleatoria» evita que el modelo sea puramente determinista: dos personas con gustos idénticos no están garantizadas de conectar, igual que en la vida real la afinidad de intereses no siempre se traduce en atracción.
10. Condiciones de abandono del local
Cada persona puede abandonar el bar por cuatro vías distintas, todas ellas evaluadas continuamente:
- Tres intentos agotados: si una persona acumula 3 encuentros sin lograr un match completo, ya no puede conseguirlo esa noche. Se le concede un breve intervalo de «terminando la copa» (entre 0,8 y 2,2 segundos) antes de dirigirse a la salida.
- Paciencia agotada: si pasa un tiempo prudencial (configurable, 25 segundos reales por defecto) sin lograr ningún match completo, se cansa de esperar y abandona, con el mismo intervalo de cortesía anterior.
- Sin candidatos disponibles: si a una persona no le queda nadie activo en el local con quien no haya probado ya (o con quien no exista atracción mutua), abandona de inmediato, sin ningún intervalo de cortesía —no tiene sentido que siga esperando si no hay nadie más con quien intentarlo—. Este es el caso típico de las dos últimas personas del local que ya se probaron entre sí sin éxito.
- Cierre del local: a las 05:00 (apartado 11) se detiene la entrada de gente nueva; quienes ya estén dentro siguen su curso normal hasta resolverse, momento en el que la simulación concluye.
11. Modelo temporal: el ciclo de una noche
La simulación reproduce el horario de un bar real, de 17:00 a 05:00 (12 horas), comprimido en un intervalo de tiempo real configurable (5 minutos por defecto). El reloj interno se muestra en pantalla y determina tres franjas horarias con reglas propias:
- 17:00 – 00:00 («ambiente tranquilo»): se aplican el umbral de compatibilidad y la probabilidad de chispa configurados por el usuario, sin modificación.
- 00:00 – 04:00 («late», «la cosa se anima»): el umbral de compatibilidad baja automáticamente a un máximo de 3 de 5 (es decir, hace falta coincidir en menos cosas para ser compatible), y la probabilidad de chispa aumenta de forma gradual y lineal desde el valor configurado hasta un 90 %, a medida que se acerca la última hora.
- 04:00 – 05:00 («última hora»): el umbral se mantiene en 3 de 5 y la chispa se produce siempre (100 %) si hay compatibilidad, reproduciendo la conocida sensación de «cuanto más tarde, menos exigente se es».
Visualmente, el local se tiñe de un violeta muy sutil durante la franja intermedia y de un tono cálido/rojizo durante la última hora, a modo de ambientación de «última copa».
12. Modelo económico
La entrada al local tiene un coste fijo por persona: 5 € hasta medianoche, y el doble — 10 € — desde las 00:00 en adelante. Una vez dentro, la persona no vuelve a pagar y puede permanecer el tiempo que desee, sujeto únicamente a las condiciones de abandono del apartado 10.
El panel de estadísticas (la «cuenta del bar») acumula en tiempo real los ingresos totales realmente cobrados —no una simple multiplicación, sino la suma de lo que pagó cada persona según la hora exacta en la que entró— y calcula un coste medio por match completo (ingresos totales entre número de matches completos), como indicador simplificado de la rentabilidad del local en relación con su función social.
13. Generación narrativa del registro de la noche
Cada vez que se produce un match completo, el sistema compone automáticamente una breve crónica combinando los nombres reales de ambas personas, una frase de apertura elegida al azar de un banco de diez variantes (miradas, silencios, una sonrisa de más), una frase de cierre que menciona los gustos concretos que ambos comparten —o, si no comparten ningún gusto en positivo, que coinciden en lo que no les va—, una mención a la orientación de cada persona cuando no es heterosexual (por ejemplo, «(ambos son gais)» o «Marta es bisexual»), y finalmente un epílogo elegido al azar de un banco de seis variantes con distintos grados de insinuación, siempre sugerente y nunca explícito.
Estas crónicas se muestran en una sección con desplazamiento propio dentro del panel de estadísticas, conservando las últimas 25 entradas.
14. Ambientación sonora
El simulador incorpora una pista de música electrónica generada en tiempo real mediante la Web Audio API del navegador —no se reproduce ningún archivo de audio externo, evitando así cualquier cuestión de derechos—. El motor sintetiza un bombo (kick) con caída de frecuencia, un bajo en patrón repetitivo de cuatro notas y un hi-hat de ruido filtrado, todo ello a 126 pulsaciones por minuto en bucle continuo, con un interruptor para activarla o silenciarla.
15. Panel de métricas
El panel «Cuenta del bar» muestra en todo momento: entradas totales, personas en sala, número de encuentros intentados, cruces sin interés por incompatibilidad de orientación, encuentros compatibles, matches completos, personas que abandonaron sin match, la tasa de match completo por encuentro, el precio de entrada vigente, los ingresos totales acumulados y el coste medio por match completo.
16. Parámetros configurables
Todos los parámetros del modelo son ajustables en tiempo real mediante controles deslizantes, lo que permite explorar el efecto de cada regla sin modificar el código:
| Parámetro | Rango / valor por defecto | Efecto |
| Personas | 6 – 60 (24 por defecto) | Tamaño de la población simulada |
| Umbral match | 2 – 5 sobre 5 (4 por defecto) | Coincidencias necesarias para ser «compatibles» (antes de medianoche) |
| Chispa | 10 % – 90 % (50 % por defecto) | Probabilidad de match completo una vez hay compatibilidad |
| Paciencia | 10 – 60 s (25 s por defecto) | Tiempo sin match completo antes de abandonar por cansancio |
| % no heterosexual | 0 – 30 % (12 % por defecto) | Proporción de la población gay, lesbiana o bisexual |
| De ese %, % bi | 0 – 100 % (50 % por defecto) | Reparto entre bisexualidad y homosexualidad exclusiva |
| Noche dura | 3 – 20 min (5 min por defecto) | Minutos reales que representan las 12 horas de apertura |
| Reponer gente | activado / desactivado | Si se genera gente nueva para sustituir a quien se va |
| Música | activada / desactivada | Pista electrónica de ambientación |
17. Notas de implementación técnica
El simulador es un único archivo HTML autocontenido (HTML, CSS y JavaScript en el mismo documento), sin dependencias externas ni conexión a internet, por lo que funciona igual abierto como archivo local que servido desde un navegador. El motor de animación usa Canvas 2D con un bucle basado en requestAnimationFrame; la física de movimiento, las colisiones y la resolución de encuentros se recalculan en cada fotograma sobre una lista de agentes en memoria, sin frameworks ni librerías externas.
Esta sencillez deliberada facilita que cualquier regla del modelo —umbrales, probabilidades, zonas, horarios— pueda ajustarse directamente en el código o mediante los controles de la interfaz, sin necesidad de recompilar ni de dependencias de terceros.
18. Limitaciones y posibles líneas futuras
- El modelo de compatibilidad es simétrico y binario por preferencia (gusta / no gusta); no pondera la intensidad de cada gusto ni introduce afinidades parciales.
- La orientación bisexual se modela como atracción indiferenciada a ambos géneros, sin matices adicionales.
- El coste de entrada y los ingresos son indicadores simplificados; no se ha modelado gasto en consumiciones ni otros ingresos del local.
- Posibles ampliaciones: perfiles de personalidad más ricos (más de 5 preferencias, pesos distintos), grupos de amigos que entran y se mueven juntos, eventos especiales (barra libre, DJ invitado) que alteren temporalmente las reglas, o exportación de los resultados de una noche simulada a un informe descargable.
Ahora, si os gusta, a a contarlo,
Alberto Concejal
GIS Analyst