/** * Luego de elegir entre las posibles jugadas, este metodo devuelve las coordenadas que nos llevan * a esa jugada elegida. * * @param jugador * @return */ public int[] elegirMovimiento(int jugador) { Jugada ultima = movimientos.ultimo(); Arbol<Jugada> arbolDecision = crearArbol(ultima, jugador); logger.debug("El arbol de decision tiene " + arbolDecision.cantidadNodos() + " nodos"); logger.debug("El arbol de decision tiene profundidad " + arbolDecision.altura() + " nodos"); logger.debug("El arbol de decision tiene grado " + arbolDecision.grado()); this.numeroNodosUltima = arbolDecision.cantidadNodos(); Jugada decision = elegirJugada(arbolDecision, jugador); int[] movida = ultima.coordenadaParaLlegarA(decision); return movida; }
/** * Crea un arbol de TODOS los posibles movimientos a partir de una jugada. Este metodo puede ser * bastantee pesado ya que puede crear un arbol de varios miles de nodos al menos para la primera * jugada. Alternativamente luego de cada jugada cambia de jugador para simular TODAS las posibles * jugadas. * * @param movida * @param jugador * @return */ public Arbol<Jugada> crearArbol(Jugada movida, int jugador) { Arbol<Jugada> result = new Arbol<Jugada>(); Arbol.Nodo<Jugada> nodoRaiz = result.insertarHijo(null, movida); Cadena<Jugada> posiblesJugadas = movida.getPosiblesJugadas(jugador); int otroJugador = (jugador == JUGADOR ? COMPUTADORA : JUGADOR); Iterator<Jugada> iter = posiblesJugadas.iterator(); while (iter.hasNext()) { Jugada hijo = iter.next(); Arbol.Nodo<Jugada> nodoHijo = result.insertarHijo(nodoRaiz, hijo); Arbol<Jugada> arbolHijo = crearArbol(hijo, otroJugador); nodoHijo.colocarHijosDeRaizDeArbol(arbolHijo); } return result; }
/** @param args the command line arguments */ public static void main(String[] args) { Arbol a1 = new Arbol("1", 120, 2, "naranjo"); Arbol a2 = new Arbol("2", 120, 2, "naranjo"); Arbol a3 = new Arbol("3", 120, 2, "naranjo"); Arbol a4 = new Arbol("4", 120, 2, "naranjo"); Arbol a5 = new Arbol("5", 120, 2, "naranjo"); Arbol a6 = new Arbol("6", 120, 2, "naranjo"); Arbol a7 = new Arbol("7", 120, 2, "naranjo"); Arbol a8 = new Arbol("8", 120, 2, "naranjo"); Arbol a9 = new Arbol("9", 120, 2, "naranjo"); Bosque b1 = new Bosque("1", "bosque adsi", 18000); b1.agregarArbol(a1); b1.agregarArbol(a2); b1.agregarArbol(a3); b1.agregarArbol(a4); b1.agregarArbol(a5); b1.agregarArbol(a6); b1.agregarArbol(a7); b1.agregarArbol(a8); b1.agregarArbol(a9); b1.agregarArbol(a1); List<Arbol> listaTempo = b1.getArboles(); System.out.println(listaTempo.get(0).getIdArbol()); listaTempo.remove(1); System.out.println(listaTempo.size()); System.out.println(listaTempo.get(2).getIdArbol()); for (Arbol arbol : listaTempo) { System.out.println(arbol.toString()); } Arbol a10 = new Arbol("9", 120, 2, "naranjo"); b1.talarArbol(a9); List<Arbol> listaTempo2 = b1.getArboles(); for (Arbol arbol : listaTempo2) { System.out.println(arbol.toString()); } }
/** * Elige una jugada a partir del arbol de decision obtenido para el jugador pasado en parametro. * Para esto lo que hace es contar la cantidad de victorias que le da cada uno de los hijos de la * raiz (las posibles jugadas). Luego, lo unico que se hace es elegir el hijo que da la mayor * cantidad de victorias. * * @param arbolDecision * @param jugador * @return */ private Jugada elegirJugada(Arbol<Jugada> arbolDecision, int jugador) { int maxCantidadVictorias = Integer.MIN_VALUE; Jugada elegida = null; Cadena<Arbol.Nodo<Jugada>> posibles = arbolDecision.getRaiz().getHijos(); Iterator<Arbol.Nodo<Jugada>> iter = posibles.iterator(); while (iter.hasNext()) { Arbol.Nodo<Jugada> nodo = iter.next(); logger.debug("Jugada: \n" + nodo.getValor()); int cantidadVictorias = getCantidadVictoriasAPartirDe(nodo, jugador, 1); logger.debug("Tiene " + cantidadVictorias + " victorias posibles"); if (cantidadVictorias >= maxCantidadVictorias) { elegida = nodo.getValor(); maxCantidadVictorias = cantidadVictorias; } } return elegida; }
/** @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here // Arbol tree = new Arbol(17); Arbol tree; // Arbol tree2 = new Arbol(99); List lista = new List(); lista.pushback(45); lista.pushback(20); lista.pushback(15); lista.pushback(10); lista.pushback(7); lista.pushback(5); tree = lista.Huffman(lista); System.out.println(tree.getRaiz()); /*tree.addNodo(new Nodo(44)); tree.addNodo(new Nodo(8)); tree.addNodo(new Nodo(5)); tree.addNodo(new Nodo(14)); tree.addNodo(new Nodo(4)); tree.addNodo(new Nodo(34)); tree.addNodo(new Nodo(2)); tree.addNodo(new Nodo(52)); tree.addNodo(new Nodo(21)); tree.addNodo(new Nodo(52)); tree.addNodo(new Nodo(11)); tree.addNodo(new Nodo(12)); tree.addNodo(new Nodo(91)); tree.addNodo(new Nodo(17)); */ // tree2.addNodo(tree.getRaiz()); /* System.out.println(tree.getRaiz().getValue()); System.out.println(tree.getRaiz().getDerecha().getValue()); System.out.println(tree.getRaiz().getIzquierda().getValue()); System.out.println(tree.getRaiz().getDerecha().getDerecha().getValue()); System.out.println(tree.getRaiz().getDerecha().getIzquierda().getValue()); System.out.println(tree.getRaiz().getIzquierda().getDerecha().getValue()); System.out.println(tree.getRaiz().getIzquierda().getIzquierda().getValue()); tree.getRaiz().getDerecha().setPadre(tree.getRaiz()); tree.getRaiz().getIzquierda().setPadre(tree.getRaiz()); tree.getRaiz().getDerecha().getDerecha().setPadre(tree.getRaiz().getDerecha()); tree.getRaiz().getDerecha().getIzquierda().setPadre(tree.getRaiz().getDerecha()); tree.getRaiz().getIzquierda().getDerecha().setPadre(tree.getRaiz().getIzquierda()); tree.getRaiz().getIzquierda().getIzquierda().setPadre(tree.getRaiz().getIzquierda()); System.out.println(""); System.out.println(tree.getRaiz().getDerecha().getPadre().getValue()); System.out.println(tree.getRaiz().getIzquierda().getPadre().getValue()); System.out.println(tree.getRaiz().getDerecha().getDerecha().getPadre().getValue()); System.out.println(tree.getRaiz().getDerecha().getIzquierda().getPadre().getValue()); System.out.println(tree.getRaiz().getIzquierda().getDerecha().getPadre().getValue()); System.out.println(tree.getRaiz().getIzquierda().getIzquierda().getPadre().getValue()); System.out.println(""); */ /* System.out.println(tree2.getRaiz().getValue()); System.out.println(tree2.getRaiz().getIzquierda().getValue()); System.out.println(tree2.getRaiz().getIzquierda().getDerecha().getValue()); System.out.println(tree2.getRaiz().getIzquierda().getIzquierda().getValue()); */ }