Package frsf.cidisi.exercise.arqueologic.situationCalculus

Source Code of frsf.cidisi.exercise.arqueologic.situationCalculus.ArqueologicState

package frsf.cidisi.exercise.arqueologic.situationCalculus;

import frsf.cidisi.faia.agent.ActionFactory;
import frsf.cidisi.faia.agent.Perception;
import frsf.cidisi.faia.agent.situationcalculus.KnowledgeBase;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusPerception;
import frsf.cidisi.faia.exceptions.PrologConnectorException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;

import Clases.Aldea;
import Clases.Cofre;
import Clases.Mundo;

public class ArqueologicState extends KnowledgeBase {

  private double capacidadRestante;
    private String origen;
    private String posicionActual;
    private String destino;
    private Mundo mundo;
    private ArrayList<Cofre> acoplado;
  private ArrayList<String> aldeasVisitadas;
  private int disMin;
  private int disRecorrida;
  private int [][] distanciasMin;
  private int percepcionCofre;
 
  public ArqueologicState() throws PrologConnectorException {

    //TODO: Replace file name 
        super("arqueoLogic.pl");

        this.initState();
    }

    @Override
    public ActionFactory getActionFactory() {
        return ArqueologicAgentActionFactory.getInstance();
    }

    @Override
    public String getSituationPredicate() {
        return "situacionActual";
    }

    @Override
    public String getBestActionPredicate() {
        return "mejorAccion";
    }

    @Override
    public String getExecutedActionPredicate() {
        return "accionEjecutada";
    }

    @Override
    public void updateState(Perception p) {
        this.tell((SituationCalculusPerception) p);
    }

    @Override
    public void initState() {
      
      this.capacidadRestante = 450.0;
      this.origen = Aldea.ARAGAEY;
    this.posicionActual = this.getOrigen();
    this.destino = Aldea.CENEDE;
    this.acoplado = new ArrayList<Cofre>();
        this.mundo = new Mundo();
        this.aldeasVisitadas = new ArrayList<String>();
        aldeasVisitadas.add(posicionActual);
        this.disMin = -1;
        this.disRecorrida = 0;
        this.distanciasMin = mundo.distanciasMinimas();
        this.percepcionCofre=ArqueologicAgentPerception.UNKNOWN_PERCEPTION;
   
        this.addKnowledge("capacidadRestante(450,0)");
        this.addKnowledge("situacionActual(0)");
        this.addKnowledge("posicion(aragaey,0)");
       
    }

    @Override
    public String toString() {
      String str = "";

      str = str + "Posici�n=\"" + this.getPosicion() + "\"\n";
        str = str + "Capacidad restante=\"" + this.getCapacidadRestante() + "\"\n";
        str = str + "Vecinos=\"" + this.getVecinosProlog() + "\"\n";
        //str = str + "Aldeas Visitadas=\"" + this.getAldVisProlog() + "\"\n";
        str = str + "Mejor accion=\"" + this.getMejorAccion() + "\"\n";
        //str = str + "Carga del acoplado=\"" + this.cargaTotal() + "\"\n";
        //str = str + "Valor del acoplado=\"" + this.valorTotal() + "\"\n";
        //str = str + "Cantidad de cofres=\"" + this.acoplado.size() + "\"\n";
        //str = str + "Distancia recorrida=\"" + this.disRecorrida + "\"\n";
        //str = str + "Mundo=\" \n";
        /**
         * Para imprimir las adyacencias de las ditintas aldeas.
         */
/*        for (int row = 0; row < 11; row++) {
            str = str + "[ ";
            for (int col = 0; col < 11; col++) {
              str = str + mundo.getDistancias()[row][col] + " ";
            }
            str = str + " ]\n";
        }
        str = str + " \"";
        str = str + "Aldeas visitadas: ";
        Iterator<String> it = aldeasVisitadas.iterator();
    while(it.hasNext()){
      str=str+it.next()+"; ";
    }*/   
        return str;
    }
    public String getPosicion(){
        //return posicionActual;
      String posicion="";
      String consulta = "posicion(X," + this.getSituation() + ")";
     
     Hashtable[] resultado = this.query(consulta);
   
     posicion = resultado[0].get("X").toString();
    
    return posicion;
    }
    public void setPosicion(String arg){
        posicionActual = arg;
    }
    public double getCapacidadRestante(){
        //return capacidadRestante;
      String consulta = "capacidadRestante(C," + this.getSituation() + ")";
     
     Hashtable[] resultado = this.query(consulta);
   
     double capacidad = Double.parseDouble(resultado[0].get("C").toString());
    
    return capacidad;
    }
    public void setCapacidadRestante(double arg){
        capacidadRestante = arg;
    }
    public String getVecinosProlog(){
      String name = "";
      String consultaPosicion = "vecinos("+this.getPosicion()+",Y,D,"+this.getSituation()+")";
        Hashtable[] resultado = this.query(consultaPosicion);
        for (Hashtable h : resultado) {
         name += h.get("Y").toString()+" " +h.get("D").toString()+ "   ";
       }
      return name;
    }
    public String getMejorAccion() {
        String consultaEstado = "mejorAccion(A,T,"+this.getSituation()+")";
      Hashtable[] resultado = this.query(consultaEstado);
      if(resultado.length==0)return "";
      return resultado[0].get("A").toString()+" -> "+resultado[0].get("T").toString();

  }
    public String getAldVisProlog(){
      String name = "";
      String visitadas = "aldeaVisitada(AL,"+this.getSituation()+")";
        Hashtable[] resultado = this.query(visitadas);
        for (Hashtable h : resultado) {
         name += h.get("AL").toString()+" ";
       }
      return name;
    }
  public String getOrigen() {
    return origen;
  }
  public void setOrigen(String origen) {
    this.origen = origen;
  }
    public String getDestino(){
        return destino;
    }
    public void setDestino(String arg){
         destino = arg;
    }
    public Mundo getmundo(){
        return mundo;
    }
    public ArrayList<Cofre> getcarga(){
        return acoplado;
    }
    public void setcarga(ArrayList<Cofre> arg){
        acoplado = arg;
    }
  public double cargaTotal(){
    double cargaT = 0.0;
    Iterator<Cofre> it = acoplado.iterator();
   
    while(it.hasNext()){
      cargaT += it.next().getPeso();
    }
    return cargaT; 
  }
  /**
   * Funcion que retorna el valor total de los tesoros que lleva el
   * agente en el acoplado.
   * @return valorT
   */
  public int valorTotal(){
    int valorT = 0;
    Iterator<Cofre> it = acoplado.iterator();
   
    while(it.hasNext()){
      valorT += it.next().getValor();
    }
    return valorT; 
  }
  /**
   * Resibe como parametro un elemento de la clase Cofre, y lo agrega al
   * acoplado del agente.
   * @param co
   */
  public void agregarCofre(Cofre co){
    this.acoplado.add(co);
  }

  public ArrayList<String> getAldeasVisitadas() {
    return aldeasVisitadas;
  }

  public void setAldeasVisitadas(ArrayList<String> aldeasVisitadas) {
    this.aldeasVisitadas = aldeasVisitadas;
  }
  /**
   * Esta funcion retorna una ArrayList de Strings con los nombres de los vecinos de
   * la posicion actual.
   * @return vec
   */
  public Collection<String> getVecinos() {
    ArrayList<String> vec = new ArrayList<String>();
    int indice = this.mundo.getNombres().indexOf(this.getPosicion());
    int dist[][] = this.mundo.getDistancias();
   
    for(int i = 0; i < 11; i++){
      if(dist[indice][i] > 0){
        vec.add(this.mundo.getNombres().get(i));
      }
    }
    return vec;
  }
  public int getDisMin(){
    return disMin;
  }
  public int getDisRecorrida(){   
    return disRecorrida;
  }
  public void sumarDistancia(int dis){
    disRecorrida += dis;
  }
  public void agregarAldeaVisitada(String string) {
    this.aldeasVisitadas.add(string);
  }
  public ArrayList<Cofre> getAcoplado() {
    return acoplado;
  }
    public int getDistMin(){
      int indiceA = this.mundo.getNombres().indexOf(posicionActual);
      int indiceD = this.mundo.getNombres().indexOf(destino);
      return distanciasMin[indiceA][indiceD];
    }
    public String ultimaAldeaVisitada(){
      int cantAl = this.aldeasVisitadas.size();
      if(cantAl > 1){
        return this.aldeasVisitadas.get(cantAl - 2);
      }
      return this.aldeasVisitadas.get(cantAl - 1);
    }
  public void quitarUltimaAldeaVisitada() {
    int cantAl = this.aldeasVisitadas.size();
    if(cantAl > 1){
      this.aldeasVisitadas.remove(cantAl - 1);
    }
  }
  public int getPercepcionCofre() {
    return percepcionCofre;
  }
  public void setPercepcionCofre(int percepcionCofre) {
    this.percepcionCofre = percepcionCofre;
  }
}
TOP

Related Classes of frsf.cidisi.exercise.arqueologic.situationCalculus.ArqueologicState

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.