Pregunta: Tras dar permisos de ejecución al simulador o al visor 3D me aparece un error indicando que no es posible encontrar ninguno de ellos al tratar de ejecutarlos.

Respuesta: Se está usando la versión de 32 bits del material de prácticas. Descargue la versión de 64 bits.

Pregunta: Al tratar de ejecutar el visor 3D me aparece el siguiente error:

error while loading shared libraries: libGLU.so.1: cannot open shared object file: No such file or directory.

Respuesta: Se está tratando de ejecutar la versión de 32 bits del visor. Ejecute el archivo asedio_player.x86_64.

Pregunta: Al tratar de ejecutar el simulador me aparece el siguiente error:

symbol lookup error: ./../simulador/simulador: undefined symbol: _Z13placeDefensesPPbiiffSt4listIPN6Asedio6ObjectESaIS4_EES1_IPNS2_7DefenseESaIS8_EE.

Respuesta: Se trata de una incompatibilidad con versiones recientes del compilador de GCC. Debe utilizar la versión 4 del compilador para trabajar con el material de prácticas. Si utiliza la versión 5 hay disponible un parche con las bibliotecas compiladas para esa versión. Basta con descomprimir los archivos en la carpeta raíz del material de prácticas.

Pregunta: Al tratar de convertir una imagen en formato PPM a formato PNG me aparece un error indicando que la orden convert es desconocida.

Respuesta: Debe instalar primero la aplicación ImageMagick. En Ubuntu puede instalarla ejecutando la orden:

sudo apt-get install imagemagick

Pregunta: ¿Que distribución de Latex necesito para generar la memoria?

Respuesta: Cualquiera que admita los comandos latex y pdflatex. En Ubuntu puede instalar la distribución TexLive ejecutando la orden:

sudo apt-get install texlive

Si cree que no va disponer de conexión a internet para que se descarguen los paquetes adicionales cuando se requieran, le recomendamos que instale todos ellos ejecutando la siguiente orden en lugar de la anterior. Se requieren alrededor de 2 GB de espacio en disco.

sudo apt-get install texlive-full

Pregunta: Cuando estoy tratando de compilar en un sistema operativo de 64 bits aparece un error como:

/usr/bin/ld: DefenseStrategy.o: relocation R_X86_64_32S against `.rodata’ can not be used when making a shared object; recompile with -fPIC
DefenseStrategy.o: could not read symbols: Bad value

Respuesta: Se está usando la versión de 32 bits del material de prácticas. Descargue la versión de 64 bits.

Pregunta: ¿Cómo convierto coordenadas en el mapa en coordenadas expresadas en celdas y viceversa?

Respuesta: Depende de las dimensiones de las celdas. En cualquier caso, las siguientes funciones de ejemplo pueden ser utilizadas para tal fin.

// Devuelve la posición en el mapa del centro de la celda (i,j)
// i – fila
// j – columna
// cellWidth – ancho de las celdas
// cellHeight – alto de las celdas
Vector3 cellCenterToPosition(int i, int j, float cellWidth, float cellHeight){ return Vector3((j * cellWidth) + cellWidth * 0.5f, (i * cellHeight) + cellHeight * 0.5f, 0); }

// Devuelve la celda a la que corresponde una posición en el mapa
// pos – posición que se quiere convertir
// i_out – fila a la que corresponde la posición pos (resultado)
// j_out – columna a la que corresponde la posición pos (resultado)
// cellWidth – ancho de las celdas
// cellHeight – alto de las celdas
void positionToCell(const Vector3 pos, int &i_out, int &j_out, float cellWidth, float cellHeight){ i_out = (int)(pos.y * 1.0f/cellHeight); j_out = (int)(pos.x * 1.0f/cellWidth); }

Pregunta: ¿Por qué se muestran desplazadas las defensas al ejecutar el simulador?

Respuesta: Las dimensiones del planeta son en realidad algo superiores a las que usted maneja. Se reserva un espacio en los márgenes del terreno para la creación de los ucos. Esta diferencia de tamaño es gestionada por el simulador y no es necesario que lo tenga en cuenta. Solo notará que las ubicaciones de las defensas aparecen desplazadas en la traza del simulador. La posición de los obstáculos es corregida automáticamente por el simulador para que usted no tenga que tener en cuenta este desplazamiento al programar su biblioteca dinámica.

Pregunta: ¿Puedo colocar más de una defensa en una celda?

Respuesta: Aunque es posible técnicamente (dependiendo del tamaño de las celdas), recuerde que en el esquema general de los algoritmos voraces una vez seleccionado uno de los candidatos, este no vuelve a ser evaluado. Desde el punto de vista teórico no se trataría de una solución válida.

Pregunta: ¿Como accedo a los atributos de las defensas o de los obstáculos?

Respuesta: Todas las entidades heredan de la clae Object, definida en el archivo BASE/simulador/Asedio.h. El resto de atributos de las defensas se encuentran definidos en la clase Defense, declarada en el arhivo BASE/simulador/Defense.h. Consulte el guión de la práctica 0 para entender el significado de todos los atributos.

Pregunta: ¿Puedo modificar el valor de los atributos de las defensas?

Respuesta: Como habrá podido comprobar, los atributos de los obstáculos y las defensas se han definido como atributos públicos. A pesar de ello, la modificación de los atribibutos de estas entidades no surte ningún efecto en el desarrollo de la batalla. Esto se debe a que las entidades pasadas por argumento a las funciones de las bibliotecas dinámicas son en realidad copias de las entidades que realmente se utilizan en la simulación. El simulador solo trasladará el valor del atributo position de las copias a las defensas reales.

Pregunta: ¿Cuándo se marca una celda como inválida en la matriz freeCells recibida como argumento en la práctica 1?

Respuesta: Depende de la opción que se encontraba descomentada en el fichero BASE/simulador/Asedio.h en el momento de la compilación del simulador:

//#define PESIMISTIC_FREE_CELLS 1 // mark cell as invalid if any of its borders collide with an obstacle
//#define OPTIMISTIC_FREE_CELLS 1 // mark cell as invalid only if all of its borders collide with an obstacle
#define DEFAULT_FREE_CELLS 1 // mark cell as invalid only if its center collides with an obstacle

El fichero usado en la compilación es el mismo que se publica con las diferentes versiones que tenéis disponibles. Para la evaluación de las prácticase se usará la última de las versiones publicadas.

En cualquier caso, puede obviar la información contenida en la matriz freeCells o modificarla a su antojo.

Pregunta: ¿Puedo decidir el orden el el que se colocan las defensas en la práctica 2?

Respuesta: No es posible. Las defensas se colocarán de acuerdo a la estrategia por defecto (lo más cerca posible del centro de extración) y siguiendo el orden en el que aparecen en la lista pasada como argumento a la función. Es decir, que la primera defensa de la lista se colocará en la mejor posición, la segunda en la siguiente mejor posición, etc. Recuerde que la lista pasada como argumento es una copia de la lista original. La variación en el orden de sus elementos no tendrá consecuencias.

Pregunta: ¿Puedo probar varios niveles en una única ejecución?

Respuesta: No es posible, pero puede construir un pequeño script, como el que se muestra a continuación, para realizar varias simulaciones.

#!/bin/bash
niveles=(124 234 262 457)
for j in «${niveles[@]}»
do
../simulador/simulador -level $j
done

Pregunta: ¿Por qué para algunos niveles obtengo una puntuación de 0 segundos con mi estrategia de ubicación de las defensas en la práctica 1?

Respuesta: Puede ocurrir por múltiples motivos. Si obtiene un mensaje indicando que la ubicación de alguna defensa no es válida, posiblemente su algoritmo no ha encontrado una posición válida para colocarla. Por defecto, las ubicaciones de las defensas son aleatorias. Eso no tiene necesariamente que significar que ha cometido un error. Hay algunos niveles (pocos) en los que por sus características no es posible colocar todas las defensas. Esos niveles no se tendrán en cuenta en la evaluación. Para asegurarse, puede utilizar la estrategia de colocación de defensas por defecto, incluída el material de prácticas.

Pregunta: ¿Por qué obtengo una puntuación de 0 segundos con mi estrategia de selección de defensas en la práctica 2?

Respuesta: Puede ocurrir por varios motivos. El más probable es que no haya incluído en su selección el centro de extración de minerales. Esto hace que el simulador entienda que la base ha sido destruída nada más comenzar la simulación. También puede ser que se haya olvidado de seleccionar la estrategia por defecto de colocación de defensas, o que haya elegido un planeta en el que realmente no hay suficiente espacio para colocar todas las defensas.

Pregunta: ¿Cómo sé si mi estrategia es buena?

Es difícil de decir, porque entre otras cosas depende de lo bien o lo mal que lo estén haciendo sus compañeros. Como orientación, a continuación se muestran los resultados medios y máximos obtenidos por sus compañeros en el curso 2014/15. Los niveles que se utilicen para evaluar su práctica serán diferentes, pero puede darle una idea sobre lo bien o mal que lo está haciendo.

Práctica 1:
Nivel: 1324 1625 1854 2356 2856 3456 3552 3728 4356 4592
Promedio: 60,98 129,15 203,99 237,13 203,39 410,98 353,73 305,15 403,94 542,12
Máximo: 76,10 215,00 378,41 385,51 470,02 622,00 622,70 451,52 672,68 862,44

Práctica 2:
Nivel: 3124 3125 3054 3056 3056 3056 3052 3028 4056 4092
Pases 0,5 0,6 0,4 0,5 0,7 1 0,5 0,6 0,3 0,5
Defenses 30 40 40 50 40 50 40 60 70 80
Defensetypes 30 40 30 40 20 50 40 50 70 70
Defenserandomness 0,5 0,6 0,4 0,5 0,7 0,5 0,5 0,6 0,3 0,5
Promedio: 312,69 303,90 99,20 380,67 555,18 474,60 122,47 573,59 209,01 326,84
Máximo: 512,02 507,92 155,50 525,32 647,89 562,11 259,21 927,12 392,41 589,80

Práctica 4:
Nivel 1224 2225 2054 2056 2556 2556 2452 2428 3256 3292
Promedio: 113,82 237,56 154,89 158,24 307,03 307,03 375,67 313,15 282,55 274,28
Mínimo: 33,10 94,90 32,00 38,50 122,00 122,00 151,00 158,50 147,30 86,20