1/6/10

Crecer, reproducirse y urbanizar

En muchas ocasiones no nos damos cuenta de la cantidad de algoritmos y fórmulas que subyacen bajo la mecánica de juego de Simutrans. Desde fórmulas estadísticas hasta algoritmos de cálculo de rutas, grafos y diferentes mecanismos de optimización. Uno de los aspectos donde se hace un uso intensivo de elementos de este tipo es en la generación de los mapas. Hoy vamos a hablar un poco de la generación de las ciudades y su tamaño.
Leer más...

Hace poco se abrió un discusión sobre el tema de tamaño de las ciudades que se generan al inicio de un mapa de Simutrans. Inkelyad, un miembro reciente de la comunidad de Simutrans, sugirió que el tamaño de las ciudades debería seguir una distribución basada en la Ley de Zipf

Puede parecer un tema secundario, pero es más importante de lo que parece, ya que el tamaño de ciudades condiciona muchos de los otros elementos del mapa. Desde el emplazamiento de las ciudades y las industrias, hasta el tamaño de las mismas, las necesidades energéticas del mapa, etc...

La ley de Zipf está más relacionada con el campo de la linguística, pero se aplica también a otros campos cuando se contempla el aspecto de las frecuencias. Esta ley viene a establecer la frecuencia de los elementos de un determinado conjunto, en este caso el conjunto es los distintos valores de los tamaños de las ciudades.

En definitiva viene a decir que en todas las lenguas conocidas la longitud de las palabras es inversamente proporcional a su frecuencia de aparición (cuantas más veces aparece una palabra en un idioma, más corta es)


Aplicando esto a la generación de ciudades, se podría formular como que el tamaño de las ciudades es inversamente proporcional a la frecuencia de aparición de su población. Es decir, cuanto más grande sea la ciudad, menos debería aparecer.

Aquí podéis ver una comparativa de la desviación de los tamaños de las ciudades respecto de la media usando la distribución Zipf y la estandar.



Para cantidades pequeñas de ciudades (menos de 15), ambas distribuciones se distancian bastante de la cantidad media que se supone, tendría que tener el mapa. Sin embargo, a medida que aumenta la cantidad, ambas distribuciones se acercan a la media teórica y prácticamente generan distribuciones y tamaños parecidos. En otras palabras, la fórmula estandar que usa Simutrans es bastante parecida a la distribución Zipf, incluso mejor en casos puntuales.

En esta otra serie de imágenes podéis ver los gráficos de barras que muestran la cantidad de ciudades por tamaño que se generan con distintas variaciones de la distribución Zipf y la estandar de Simutrans.



Como podéis observar, la fórmula estandar tiende a crear más ciudades pequeñas que grandes, mientras que la fórmula Zipf en sus distintas variantes tiende a crear más ciudades de tamaño medio y grande. En cierto sentido, la distribución Zipf tiene a ser más equilibrada en la generación de ciudades, pero eso también puede reducir las posibilidades de desarrollo del mapa. Si las ciudades ya están muy desarrolladas y tiene mucha población, el margen de crecimiento es menor y por tanto el mapa tendrá menos atractivo y potencial.

Aún se están afinando los detalles del algoritmo y la posibilidad de que aparezca como opción configurable a través del interfaz. Además, es posible que se incorpore primero a Simutrans Experimental antes de pasar a la versión estandar, para observar como se comporta y si gusta a los jugadores. En el hilo del foro tenéis un parche disponible. Personalmente creo que este tipo de discusiones son muy instructivas y muestran al resto de la comunidad que Simutrans no es solo gráficos, también hay una parte matemática muy interesante y que aún puede mejorar.