Package modelo

Source Code of modelo.BusquedaAestrella

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package modelo;

import baseconocimiento.utilidades.Mapeo;
import java.util.ArrayList;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import modelo.utilidades.NodoArbol;

/**
*
* @author UNL
*
*/
public class BusquedaAestrella {

    private Mapa mapa;
    private ArrayList<Localidad> localidades;
    private JTextArea areaConsola;
  

    public BusquedaAestrella(Mapa mapa, JTextArea areaConsola) {
        this.mapa = mapa;
        this.localidades = this.mapa.getLocalidades();
        this.areaConsola = areaConsola;
    }

    public ArrayList<Integer> buscarRutaOptima(Localidad puntoOrigen, Localidad puntoDestino) {
        areaConsola.append("[\n");


        ArrayList<Integer> recorrido = new ArrayList<Integer>();
        ArrayList<Integer> estadosYaEstudiados = new ArrayList<Integer>();

        int estadoActual = puntoOrigen.getBarrio().getId();
        int estadoDestino = puntoDestino.getBarrio().getId();

        areaConsola.append("\t[");
        areaConsola.append("\t\tESTADO INICIAL: " + puntoOrigen.getBarrio() + "\n");
        areaConsola.append("\t\tESTADO DESTINO: " + puntoOrigen.getBarrio() + "\n");
        areaConsola.append("\t]");

        int estadoSucesor;
        Localidad estadoSucesorLocalidad = null;
        int contador = 0;
        recorrido.add(estadoActual);

        areaConsola.append("\t[ ITERACIONES\n");

       

        while (estadoActual != estadoDestino) {
         

            areaConsola.append("\t\t[ iteracion: " + contador);

            System.out.println("-" + contador++ + "-");
            System.out.println("Estado actual: " + estadoActual);

            areaConsola.append("\t\t\t[ESTADO ACTUAL: " + estadoActual + "]\n");

            ArrayList<Integer> reglas = localidades.get(estadoActual - 1).getVecinosID();

            System.out.println("Reglas-----------------");
            areaConsola.append("\t\t\t[REGLAS: " + estadoActual + "\n");
            int contador1 = 0;
            for (Integer idRegla : reglas) {
                areaConsola.append("Regla " + contador1 + " :" + idRegla);
                System.out.println("Regla " + contador1++ + " :" + idRegla);
            }
            areaConsola.append("\t\t\t]\n");
            System.out.println("Fin reglas-----------------");
            ArrayList<Coste> listaCostes = new ArrayList<Coste>();

            while (!reglas.isEmpty()) {
                estadoSucesor = reglas.get(0);
              
                estadoSucesorLocalidad = this.localidades.get(estadoSucesor - 1);
                estadosYaEstudiados.add(estadoSucesor);
                Coste coste = new Coste();
                int coste1 = estadoSucesorLocalidad.getHeuristicaDLR().get(estadoActual - 1);
                int coste2 = estadoSucesorLocalidad.getHeuristicaDLR().get(estadoDestino - 1);
                System.out.println("Coste 1: " + coste1);
                System.out.println("Coste 2: " + coste2);
                coste.setIdBarrio(estadoSucesor);
                coste.setDistancia(coste1 + coste2);
              
                listaCostes.add(coste);
                reglas.remove(0);
            }

            System.out.println("Lista de costes-----------------");
            for (Coste coste : listaCostes) {
                System.out.println("Coste: " + coste.getIdBarrio() + "|" + coste.getDistancia());
            }

            System.out.println("fin lista costes----------------");
            estadoActual = buscarMenorCoste(listaCostes).getIdBarrio();
           
            recorrido.add(estadoActual);
            areaConsola.append("\t\t]");
        }
        areaConsola.append("\t]");
        areaConsola.append("]");

        return recorrido;
    }

    public boolean buscarRepetido(ArrayList<Integer> estadosYaEstudiados, int estadoacomprobar) {
        for (Integer elemento : estadosYaEstudiados) {
            if (elemento == estadoacomprobar) {
                return true;
            }
        }
        return false;
    }

    public Coste buscarMenorCoste(ArrayList<Coste> listaCostes) {
        Coste menorCoste = listaCostes.get(0);
        for (Coste coste : listaCostes) {
            if (coste.getDistancia() < menorCoste.getDistancia()) {
                menorCoste = coste;
            }
        }
        return menorCoste;
    }

    public static void main(String[] args) {
        Mapa mapa = new Mapa(1, "Mapa Loja", new Mapeo().mapearLocalidades());
        Localidad localidadInicio = mapa.getLocalidades().get(4);
        Localidad localidadDestino = mapa.getLocalidades().get(1);


        System.out.println("-------------------------------------------------------------------------------------------------------");
        System.out.println("|                                    EJECUCION DE LA BUSQUEDA A*                                      |");
        System.out.println("-------------------------------------------------------------------------------------------------------");

        System.out.println("Localidad Inicio: " + localidadInicio.getBarrio());
        System.out.println("Localidad Destino: " + localidadDestino.getBarrio());
        /*BusquedaAestrella busqueda = new BusquedaAestrella(mapa, new JTextArea(), new JTree());
        ArrayList<Integer> recorrido = busqueda.buscarRutaOptima(localidadInicio, localidadDestino);
        System.out.println("Recorrido: ");
        for (Integer integer : recorrido) {
        System.out.print(integer + "-");
        }
         *
         */
    }
}
TOP

Related Classes of modelo.BusquedaAestrella

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.