Skip to content

Terrenos

ArielTriana edited this page Nov 24, 2021 · 10 revisions

En el presente se definen los terrenos y la generación de los mismos.

Mapa de alturas

Los terrenos se representan en la aplicación utilizando mapas de alturas, implementados en la clase Heightmap en el archivo heightmap.py. Son matrices bidimensionales de valores en el intervalo [0, 1], donde los valores representan las alturas del terreno.

Generación de mapas de alturas

Los mapas de alturas pueden ser gene1rados por la aplicación. El usuario final debe definir el porciento de elevaciones percentage sobre el nivel del mar que desea que tenga el terreno. Para la generación de los terrenos se implementó un algoritmo genético en el archivo genetic.py.

Creación de la población

Los algoritmos genéticos comienzan a partir de una población inicial. En este caso se generan los mapas de alturas utilizando el Algoritmo de Ruido de Perlin. El Ruido de Perlin es utilizando en la bibliografía para generar mapas de alturas con apariencia natural.

Entonces se genera una población de tamaño poblation_size, ejecutando poblation_size veces el algoritmo de Perlin.

Función fitness

A cada miembro de la población se le asocia una puntuación denominada fitness, que representa qué tan bueno es el miembro de la población, o sea, cuán cerca del porciento de elevaciones está el miembro de la población.

Se define el nivel del mar a partir del cual se define el concepto de elevación. El valor por defecto del nivel del mar es 0.45.

La función fitness en este caso se define como sigue:

  • Se suma la cantidad valores superiores al nivel del mar.
  • Se calcula el porciento de elevaciones.
  • Si el porciento de elevaciones es superior al porciento requerido por el usuario, entonces al miembro se le asocia 0. En otro caso se le asocia ese porciento al miembro.

De esta forma, el valor máximo del fitness es el porciento requerido por el usuario.

Selección

En el proceso de selección se realiza un proceso conocido como selección competitiva. Se seleccionan dos parejas de miembros al azar de la población, de cada pareja se selecciona el miembro con mayor fitness, y estos serán los miembros que se mezclarán.

Mezcla

La mezcla de los progenitores para producir el próximo miembro de la población se realiza con la suma de los progenitores.

Mutación

Una vez obtenido el próximo miembro se realizan mutaciones al mismo. Se genera un nuevo terreno t para utilizar en la mutación. Se tienen definidas dos mutaciones, en dependencia del porciento de elevaciones deseado por el usuario.

  • Si ese porciento es inferior a 0.4 entonces a cada posición por encima del nivel del mar se cambia por h[i][j] - w * (t[i][j] + h[i][j]) donde w = h[i][j] - self.__sea__
  • Si el porciento es superior a 0.4 entonces la mutación es h - 1.5 * t
Clone this wiki locally