Sí.
En DijkstraTestBasico se usan ficheros sistemáticamente; por ejemplo
public void testCaminoLargo() {
try {
File f = new File(ficheroPrueba);
FileWriter writer = new FileWriter(f);
BufferedWriter salida = new BufferedWriter(writer);
salida.write("3");
salida.newLine();
salida.write("0 1 50");
salida.newLine();
salida.write("0 2 5");
salida.newLine();
salida.write("2 1 5");
salida.newLine();
salida.close();
g.leeGrafo(ficheroPrueba);
CaminoMinimo d = new Dijkstra(g);
assertEquals(10, d.getCaminoMinimo(0, 1));
}
catch (Exception e) {
fail("No debería haber saltado ninguna Excepción");
}
}
exactamente el mismo caso de prueba se puede escribir como
public void testCaminoLargo() {
try {
Grafo grafo= new Grafo(3);
grafo.setArco(0, 1, 50);
grafo.setArco(0, 2, 5);
grafo.setArco(2, 1, 5);
CaminoMinimo d = new Dijkstra(grafo);
assertEquals(10, d.getCaminoMinimo(0, 1));
}
catch (Exception e) {
fail("No debería haber saltado ninguna Excepción");
}
}
Y ¿qué forma es mejor?
Es indiferente: usa lo que te parezca más claro.
lunes, 21 de mayo de 2007
jueves, 17 de mayo de 2007
se me ha ocurrido un algoritmo óptimo para p4 que ...
No quiero ni verlo: olvídalo.
Es que Edsger Dijkstra era matemático e inventó el algoritmo hace muchos años
y desde entonces está mas que absolutamente requeteprobado
(por ejemplo, es el que se usa en Internet para comunicar nodos
y parece que funciona).
Si tu asunto es aspirar al premio Nobel, sigue inventando algoritmos;
pero si quieres un consejo para esta asignatura
LIMITATE A PASAR EL ALGORITMO DE CASTELLANO A JAVA
Este es un curso de programación, no de algoritmos.
Ya tendrás tiempo de inventar ... cuando hayas aprobado.
Es que Edsger Dijkstra era matemático e inventó el algoritmo hace muchos años
y desde entonces está mas que absolutamente requeteprobado
(por ejemplo, es el que se usa en Internet para comunicar nodos
y parece que funciona).
Si tu asunto es aspirar al premio Nobel, sigue inventando algoritmos;
pero si quieres un consejo para esta asignatura
LIMITATE A PASAR EL ALGORITMO DE CASTELLANO A JAVA
Este es un curso de programación, no de algoritmos.
Ya tendrás tiempo de inventar ... cuando hayas aprobado.
jueves, 10 de mayo de 2007
p4: ese infinito me está volviendo loc@
Lo primero,
no pongas "0", pon "Grafo.INFINITO"
donde necesites referirte a infinito.
Lo segundo, infinito no es ni menor ni mayor que nada,
así que si quieres comparar dos cantidades que pueden valer infinito
if (a < b)
puede ser una buena idea hacer un método privado que haga lo lógico
a == infinito -> falso
b == infinito -> cierto
compara a < b normalmente
Y si necesitas sumarle algo a infinito,
ves con cuidadito, porque
infinito + x = infinito
x + infinito = infinito
también puede ser buena idea un método auxiliar
espero que se veas por qué confundir infinito con cero llevará a resultados demenciales.
no pongas "0", pon "Grafo.INFINITO"
donde necesites referirte a infinito.
Lo segundo, infinito no es ni menor ni mayor que nada,
así que si quieres comparar dos cantidades que pueden valer infinito
if (a < b)
puede ser una buena idea hacer un método privado que haga lo lógico
a == infinito -> falso
b == infinito -> cierto
compara a < b normalmente
Y si necesitas sumarle algo a infinito,
ves con cuidadito, porque
infinito + x = infinito
x + infinito = infinito
también puede ser buena idea un método auxiliar
espero que se veas por qué confundir infinito con cero llevará a resultados demenciales.
viernes, 4 de mayo de 2007
p5: no me pasa las pruebas, ¿qué hago mal?
La respuesta tradicional es "pon trazas".
El comportamiento del simulador es lo bastante complejo como para que
uno se pierda con facilidad.
Sólo unas trazas enfocadas en cada cosa pueden ayudar a "ver".
Por ejemplo, en Zorro,
puede ser muy útil tener una traza específica para el método encontrarComida
private final static Logger LOGGER_COMIDA =
Logger.getLogger("mundovirtual.Zorro.encontrarComida");
Aunque hay mucha libertad,
este podría ser un ejemplo de trazas cuando se ejecuta el TestAnimal
mundovirtual.Zorro.encontrarComida [info]: zorro <5, 5> [1] :: encontrarComida(..., %lt;5, 5>)
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 5>
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 4>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 4>
mundovirtual.Zorro.encontrarComida [fine]: encontrado: conejo <4, 4> [0]
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 5>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <5, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <5, 4>
mundovirtual.Zorro.encontrarComida [info]: encontrarComida devuelve <4, 4>
no olvides que la búsqueda es aleatoria:
en cada llamada se visitan las posiciones adyacentes en un orden diferente
El comportamiento del simulador es lo bastante complejo como para que
uno se pierda con facilidad.
Sólo unas trazas enfocadas en cada cosa pueden ayudar a "ver".
Por ejemplo, en Zorro,
puede ser muy útil tener una traza específica para el método encontrarComida
private final static Logger LOGGER_COMIDA =
Logger.getLogger("mundovirtual.Zorro.encontrarComida");
Aunque hay mucha libertad,
este podría ser un ejemplo de trazas cuando se ejecuta el TestAnimal
mundovirtual.Zorro.encontrarComida [info]: zorro <5, 5> [1] :: encontrarComida(..., %lt;5, 5>)
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 5>
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 4>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 4>
mundovirtual.Zorro.encontrarComida [fine]: encontrado: conejo <4, 4> [0]
mundovirtual.Zorro.encontrarComida [finer]: busca en <6, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 5>
mundovirtual.Zorro.encontrarComida [finer]: busca en <4, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <5, 6>
mundovirtual.Zorro.encontrarComida [finer]: busca en <5, 4>
mundovirtual.Zorro.encontrarComida [info]: encontrarComida devuelve <4, 4>
no olvides que la búsqueda es aleatoria:
en cada llamada se visitan las posiciones adyacentes en un orden diferente
¿Qué pruebas debo hacer?
Aunque está explicado en los apuntes,
quizás convenga una breve chuleta resumen de lo que hay que hacer:
http://jungla.dit.upm.es/~pepe/doc/lprg/PreparacionPruebas.pdf
quizás convenga una breve chuleta resumen de lo que hay que hacer:
http://jungla.dit.upm.es/~pepe/doc/lprg/PreparacionPruebas.pdf
jueves, 3 de mayo de 2007
p5: ¿hay que cambiar el constructor de Simulador?
Sí.
ArrayList<Object> -- pasa a -- List<Animal>
Algo así
/**
* Crea un simulador que trabajará con una serie de especies que se pasan como parámetro y que empieza en
* el primer paso de la simulación con una lista de animales prefijada.
*
* @param especies Lista con las clases que representan las distintas especies que se considerarán en el simulador.
* @param colores Lista con los colores a asignar a cada una de las especies que se indicó en el parámetro anterior, "especies".
* @param animales Lista con los animales a incluir en el campo y con los que se iniciará la simulación. Cada animal ha de tener correctamente prefijada su localización.
*/
public Simulador(List<Class> especies, List<Color> colores, List<Animal> animales) {
ArrayList<Object> -- pasa a -- List<Animal>
Algo así
/**
* Crea un simulador que trabajará con una serie de especies que se pasan como parámetro y que empieza en
* el primer paso de la simulación con una lista de animales prefijada.
*
* @param especies Lista con las clases que representan las distintas especies que se considerarán en el simulador.
* @param colores Lista con los colores a asignar a cada una de las especies que se indicó en el parámetro anterior, "especies".
* @param animales Lista con los animales a incluir en el campo y con los que se iniciará la simulación. Cada animal ha de tener correctamente prefijada su localización.
*/
public Simulador(List<Class> especies, List<Color> colores, List<Animal> animales) {
lunes, 16 de abril de 2007
p4: ¿qué trazas pongo?
Por lo menos
traza INFO
cada vez que se mete un nodo en el conjunto S
traza FINE
cada vez que se recalcula (y cambia) la distancia a un nodo
como consecuencia de meter otro en S
puedes usar como inspiración
http://jungla.dit.upm.es/~pepe/doc/lprg/trazas-p4.txt
que son las trazas cuando se ejecuta
DijkstraTestBasico
traza INFO
cada vez que se mete un nodo en el conjunto S
traza FINE
cada vez que se recalcula (y cambia) la distancia a un nodo
como consecuencia de meter otro en S
puedes usar como inspiración
http://jungla.dit.upm.es/~pepe/doc/lprg/trazas-p4.txt
que son las trazas cuando se ejecuta
DijkstraTestBasico
Suscribirse a:
Entradas (Atom)