sábado, 20 de abril de 2013

Tarea 3 - Algoritmo básico de búsqueda en Java - José Sáez


Tarea 3 - Algoritmo básico de búsqueda en Java


  • En forma individual, investigar e implementar en Java un algoritmo de búsqueda.  Se recomienda que desarrolle un programa que permita crear un árbol binario, recorrerlo en diferente orden, y haber búsqueda de un elemento dentro del árbol. También puede usar otra estructura de datos.
  • Publicar en su blog y responder esta entrada, indicando su nombre y la url de su tarea en el blog de su grupo.  

Para esta tarea se ha desarrollado un árbol de búsqueda binario, el cual es un tipo de datos abstracto ideado para almacenamiento de elementos ordenados y su posterior búsqueda.

Esta implementación contiene los metódos de lookup, insert, printAsc y printDesc para poder saber si un valor se encuentra dentro del árbol, insertar otros, imprimir directamente a terminal tanto de menor a mayor como de mayor a menor.

WARNING: Este programa fue compilado directamente mediante el compilador de java, por lo tanto, para poder usarlo en alguna IDE como NetBeans podría ser necesario agregar algunos detalles como un package o algo similar.

public class TrinaryBee{
public static void main(String[] args){
TrinaryBee arbol = new TrinaryBee();
       System.out.println(arbol.insert(5).getMessage());
       System.out.println(arbol.insert(2).getMessage());
       System.out.println(arbol.insert(8).getMessage());
       System.out.println(arbol.insert(7).getMessage());
       System.out.println(arbol.insert(3).getMessage());

       System.out.println(arbol.lookup(5).getMessage());
       System.out.println(arbol.lookup(2).getMessage());
       System.out.println(arbol.lookup(7).getMessage());
       System.out.println(arbol.lookup(2).getMessage());
       System.out.println(arbol.lookup(8).getMessage());

arbol.printAsc();
arbol.printDesc();

 
}
/**
*I accept nothing as a parameter because 
*I don't know what kind of data I'm expected to receive
*/
public TrinaryBee(){
rootNode = null;
}
/**
*I can only insert integer values because I'm just an example
*please extend my functionality if it becomes necessary
*/
public ActionStatus insert(int aValue){
if(rootNode == null)
{
rootNode = new TrinaryBeeNode(aValue);
return new ActionStatus("Insertion -"+"Value "+rootNode.getValue()+" succesfully inserted",true);
}
else
{
TrinaryBeeNode node = rootNode;
while(node != null)
{
if (node.getValue() == aValue)
{
return new ActionStatus("Insertion -"+"Value "+ node.getValue() +" already in tree",false);
}
else if(node.getValue() > aValue)
{
//try to insert left
if(node.getLeftNode() == null)
{
node.setLeftNode( new TrinaryBeeNode(aValue) );
return new ActionStatus("Insertion -"+"Value " + node.getLeftNode().getValue() + " succesfully inserted",true);
}
else
{
node = node.getLeftNode();
}
}
else
{
//try to insert right
if(node.getRightNode() == null)
{
node.setRightNode( new TrinaryBeeNode(aValue) );
return new ActionStatus("Insertion -"+"Value "+node.getRightNode().getValue()+" succesfully inserted",true);
}
else
{
node = node.getRightNode();
}
}
}
return new ActionStatus("Insertion -"+"This should never happen", false);
}


public ActionStatus lookup(int value){
//Default will be in-order, because it's cooler
if(rootNode == null){
return new ActionStatus("Lookup -"+"Tree doesn't have a root!", false);
}

if (checkLeftNode(rootNode, value))
return new ActionStatus("Lookup -"+"Value "+value+" found", true);
else
return new ActionStatus("Lookup -"+"Value "+value+" not found", false);

}
public void printDesc(){
TrinaryBeeNode node = rootNode;
if(node.getRightNode() != null )
{
printDesc(node.getRightNode());
}
System.out.print(" " + node.getValue());
if(node.getLeftNode() != null)
{
printDesc(node.getLeftNode());
}
System.out.println("");
return;
}

private void printDesc(TrinaryBeeNode node){
if(node.getRightNode() != null)
{
printDesc(node.getRightNode());
}
System.out.print(" " + node.getValue());
if(node.getLeftNode() != null)
{
printDesc(node.getLeftNode());
}
return;
}


public void printAsc(){
TrinaryBeeNode node = rootNode;
if(node.getLeftNode() != null)
{
printAsc(node.getLeftNode());
}
System.out.print(" " + node.getValue());
if(node.getRightNode() != null )
{
printAsc(node.getRightNode());
}
System.out.println("");
return;
}

private void printAsc(TrinaryBeeNode node){
if(node.getLeftNode() != null)
{
printAsc(node.getLeftNode());
}
System.out.print(" " + node.getValue());
if(node.getRightNode() != null)
{
printAsc(node.getRightNode());
}
return;
}

private boolean checkLeftNode(TrinaryBeeNode node, int value){
boolean st = false;
if(node.getLeftNode() != null)
{
st = checkLeftNode(node.getLeftNode(), value);
}
if(node.getValue() == value)
{
return true;
}
if(node.getRightNode() != null && !st)
{
st = checkLeftNode(node.getRightNode(), value);
}
return st;

}

private void setRoot(TrinaryBeeNode node){
rootNode = node;
}

private TrinaryBeeNode rootNode;

private class ActionStatus{
public ActionStatus(String aMessage, boolean success, int aValue){
message = aMessage;
status = success;
value = aValue;
}

public ActionStatus(String aMessage, boolean success){
message = aMessage;
status = success;
value = 0;
}

public String getMessage(){
return message;
}
public boolean isSuccess(){
return status;
}

public int getValue(){
return value;
}

private String message;
private boolean status;
private int value;

}
private class TrinaryBeeNode{
public TrinaryBeeNode(int aValue){
this.value = aValue;
leftNode = null;
rightNode = null;
}

public int getValue(){
return value;
}

public void setValue(int aValue){
value = aValue;
}

public void setLeftNode(TrinaryBeeNode aNode){
leftNode = aNode; 
}

public void setRightNode(TrinaryBeeNode aNode){
rightNode = aNode; 
}

public TrinaryBeeNode getLeftNode(){
return leftNode;
}

public TrinaryBeeNode getRightNode(){
return rightNode;
}

public void unsetLeftNode(){
leftNode = null;
}

public void unsetRightNode(){
rightNode = null;
}


private int value;
private TrinaryBeeNode leftNode;
private TrinaryBeeNode rightNode;
}
}


viernes, 19 de abril de 2013

Tarea 3 - Algorítmo de Búsqueda en JAVA

Enunciado:

•   En forma individual, investigar e implementar en Java un algoritmo de búsqueda. Se recomienda que desarrolle un programa que permita crear un árbol binario, recorrerlo en diferente orden, y haber búsqueda de un elemento dentro del árbol. También puede usar otra estructura de datos.

•  Publicar en su blog y responder esta entrada, indicando su nombre y la url de su tarea en el blog de su grupo. Este trabajo debe quedar publicado para la clase del día sábado 20 de abril.

------------------------------------------------------------------------------------------------------------

Implementación de un Arbol binario
Por Rodrigo Lagos Lagos.
Nota: Blogspot no permite mas de 4000 caracteres por comentario , se crea nueva entrada.

 
/* * RODRIGO LAGOS LAGOS * Arbol Binario en JAVA. */ package arbolbinariorll; import java.io.*; /** * * @author rodrigo.lagos * @version 1.0 */ public class ArbolBinarioRLL { /** * @param args the command line arguments */ private Boolean existeNumero=false; public static void main(String[] args) { // TODO code application logic here new ArbolBinarioRLL().ejecutarArbolBinario(); } private static class Nodo { Nodo izquierda; Nodo derecha; int numero; int posicion; public Nodo() { } public Nodo(int numeroEntero) { this.numero = numeroEntero; } public Nodo(int numeroEntero, int numeroPos) { this.numero = numeroEntero; this.posicion = numeroPos; } } public void ejecutarArbolBinario() { BufferedReader teclado=new BufferedReader(new InputStreamReader(System.in)); int totalNodos = 0; Boolean correcto=false; do{ String entrada=null; try { System.out.print("\nIngrese la cantidad de nodos que tendrá el árbol: "); try{entrada = teclado.readLine();}catch(IOException e){entrada = null;} totalNodos=Integer.parseInt(entrada); if(totalNodos <= 2) { System.out.println("\nLa cantidad debe ser mayor que 2."); } else { correcto = true; } } catch(NumberFormatException e) { System.out.println("\nValor ingresado no es entero."); } }while(correcto == false); // Declarando el arbol Nodo raiz = null; System.out.println("\n========================================"); for(int indice=1; indice<=totalNodos; indice++) { int numero = 0; Boolean salir = false; do{ String entrada=null; try { System.out.print("\nIngrese número entero para nodo [" + indice + "] : "); try{entrada = teclado.readLine();}catch(IOException e){entrada = null;} numero=Integer.parseInt(entrada); VerificarExistencia(raiz, numero); if(this.existeNumero == true) { System.out.println("\nValor ingresado ya existe."); this.existeNumero = false; } else { salir = true; } } catch(NumberFormatException e) { System.out.println("\nValor ingresado no es entero."); } }while(salir==false); // para asegurarme que ingresó un número. if(raiz==null) { raiz=new Nodo(numero, indice ); }else{ // Insertando número en el nodo insertarNumero(raiz, numero, indice); } }//fin ciclo FOR System.out.println("\n================================="); System.out.println("\nOrdenando el árbol:"); System.out.println("\n================================="); imprimirEnOrden(raiz); System.out.println("\n================================="); int numero = 0; Boolean salir = false; do{ String entrada=null; try { System.out.print("\nIngrese número a buscar: "); try{entrada = teclado.readLine();}catch(IOException e){entrada = null;} numero=Integer.parseInt(entrada); salir = true; } catch(NumberFormatException e) { System.out.println("\nValor ingresado no es entero."); } }while(salir==false); // para asegurarme que ingresó un número. VerificarExistencia(raiz, numero); if(this.existeNumero) { ImprimeBusqueda(raiz, numero); } else { System.out.println(" El número # " + numero + " No esta ingresado."); } } public void insertarNumero(Nodo rama, int numeroIngresado, int numeroPos) { if (numeroIngresado < rama.numero) { if (rama.izquierda != null) { insertarNumero(rama.izquierda, numeroIngresado, numeroPos); } else { System.out.println(" Se inserta el # " + numeroIngresado + " a la izquierda del nodo #" + rama.numero); rama.izquierda = new Nodo(numeroIngresado, numeroPos); } } else if (numeroIngresado > rama.numero) { if (rama.derecha != null) { insertarNumero(rama.derecha, numeroIngresado, numeroPos); } else { System.out.println(" Se inserta el # " + numeroIngresado + " a la derecha del nodo # " + rama.numero); rama.derecha = new Nodo(numeroIngresado, numeroPos); } } } public void imprimirEnOrden(Nodo rama) { if (rama != null) { imprimirEnOrden(rama.izquierda); System.out.println(" Orden # " + rama.numero); imprimirEnOrden(rama.derecha); } } public void ImprimeBusqueda(Nodo rama, int valorBuscado) { if (rama != null) { ImprimeBusqueda(rama.izquierda, valorBuscado ); if(valorBuscado == rama.numero){ System.out.println(" El número # " + valorBuscado + " existe en " + "la posicion [" + rama.posicion + "]"); } ImprimeBusqueda(rama.derecha, valorBuscado); } } public void VerificarExistencia(Nodo rama, int valorBuscado) { if (rama != null) { VerificarExistencia(rama.izquierda, valorBuscado); if(valorBuscado == rama.numero){ this.existeNumero = true; } VerificarExistencia(rama.derecha, valorBuscado); if(valorBuscado == rama.numero){ this.existeNumero = true; } } } } // run: // Ingrese la cantidad de nodos que tendrá el árbol: 8 // ======================================== // Ingrese número entero para nodo [1] : 6 // Ingrese número entero para nodo [2] : 8 // Se inserta el # 8 a la derecha del nodo # 6 // Ingrese número entero para nodo [3] : 8 // Valor ingresado ya existe. // Ingrese número entero para nodo [3] : 6 // Valor ingresado ya existe. // Ingrese número entero para nodo [3] : 5 // Se inserta el # 5 a la izquierda del nodo #6 // Ingrese número entero para nodo [4] : 4 // Se inserta el # 4 a la izquierda del nodo #5 // Ingrese número entero para nodo [5] : 3 // Se inserta el # 3 a la izquierda del nodo #4 // Ingrese número entero para nodo [6] : 2 // Se inserta el # 2 a la izquierda del nodo #3 // Ingrese número entero para nodo [7] : 99 // Se inserta el # 99 a la derecha del nodo # 8 // Ingrese número entero para nodo [8] : 77 // Se inserta el # 77 a la izquierda del nodo #99 // ================================= // Ordenando el árbol: // ================================= // Orden # 2 // Orden # 3 // Orden # 4 // Orden # 5 // Orden # 6 // Orden # 8 // Orden # 77 // Orden # 99 // ================================= // Ingrese número a buscar: 6 // El número # 6 existe en la posicion [1] // BUILD SUCCESSFUL (total time: 53 seconds)

Tarea 3 - Algorítmo de Búsqueda en JAVA

Enunciado:


•   En forma individual, investigar e implementar en Java un algoritmo de búsqueda. Se recomienda que desarrolle un programa que permita crear un árbol binario, recorrerlo en diferente orden, y haber búsqueda de un elemento dentro del árbol. También puede usar otra estructura de datos.

•  Publicar en su blog y responder esta entrada, indicando su nombre y la url de su tarea en el blog de su grupo. Este trabajo debe quedar publicado para la clase del día sábado 20 de abril.

------------------------------------------------------------------------------------------------------------

Implementación de un Arbol binario
Ivan Barrera Olivares

package busqueda_2;

import com.sun.accessibility.internal.resources.accessibility;

public class NodoBinario {
int dato;
NodoBinario Hizq,Hder;

//Constructores
NodoBinario (int Elem){
    dato=Elem;
    NodoBinario Hizq, Hder = null;
}

//Insercion de un elemento

public void InsertaBinario (int Elem){
    if(Elem < dato){
        if (Hizq==null)
            Hizq = new NodoBinario(Elem);
        else
            Hizq.InsertaBinario(Elem);
        }
    else {
        if (Elem>dato){
            if (Hder == null)
                Hder = new NodoBinario(Elem);
            else
                Hder.InsertaBinario(Elem);
        }
    }
}

}

//Derfinicion de la clase Arbol

class Arbol{
    Cola Cola = new Cola();
    NodoBinario Padre;
    NodoBinario Raiz;
   
    //Constructor
    public Arbol(){
        Raiz=null;
    }
   
    //Insercion de un elemento en el arbol
    public void InsertaNodo(int Elem){
        if (Raiz ==null)
            Raiz=new NodoBinario(Elem);
        else
            Raiz.InsertaBinario(Elem);
    }
   
    //Preorden Recursivo del arbol
    public void Preorden (NodoBinario Nodo){
        if (Nodo == null)
            return;
        else{
            System.out.print(Nodo.dato+"");
            Preorden(Nodo.Hizq);
            Preorden(Nodo.Hder);
        }
    }
   
    //PostOrden recursivo del arbol
    public void PostOrden (NodoBinario Nodo){
        if (Nodo==null)
            return;
        else{
            PostOrden(Nodo.Hizq);
            PostOrden(Nodo.Hder);
            System.out.print(Nodo.dato + "");
        }
    }
   
    //Inorden Recursivo del arbol
    public void Inorden (NodoBinario Nodo){
        if (Nodo==null)
            return;
        else{
            Inorden(Nodo.Hizq);
            System.out.print(Nodo.dato + "");
            Inorden(Nodo.Hder);
        }
    }
   
    //Busca un elemento en el arbol
    void Busqueda (int Elem, NodoBinario A){
        if((A==null)|(A.dato==Elem)){
            System.out.print(A.dato + "Elelemnto buscado:");
            return;
        }
        else{
            if (Elem>A.dato)
                Busqueda(Elem, A.Hder);
            else
                Busqueda(Elem, A.Hizq);
        }
    }
   
    //Altura del arbol
    public int Altura (NodoBinario Nodo){
        int Altder = (Nodo.Hder==null? 0:1 + Altura(Nodo.Hder));
        int Altizq = (Nodo.Hizq==null? 0:1 + Altura (Nodo.Hizq));
        return Math.max(Altizq, Altizq);
    }
   
    //Recorrido en anchura del arbol
    public void Anchura(NodoBinario Nodo){
        Cola cola = new Cola();
        NodoBinario T = null;
        //System.out.print("El recorrido en anchura es:");
        if (Nodo !=null){
            cola.InsertaFinal (Nodo);
            while (!(cola.VaciaLista())){
                T=cola.PrimerNodo.datos;
                cola.EliminaInicio();
                System.out.print(T.dato + "");
                if (T.Hizq!=null)
                    cola.InsertaFinal(T.Hizq);
                if(T.Hder!=null)
                    cola.InsertaFinal (T.Hder);
           }
        }
        System.out.println();
    }
}

//Definicion de la Clase NodoLista
class NodosListaA{
    NodoBinario datos;
    NodosListaA siguiente;
   
    //Constructor Crea un nodo del tipoObject
    NodosListaA(NodoBinario valor) {
    datos=valor;
    siguiente=null; //siguiente con valor de nulo
    }
   
    //Constructor crea unnodo del tipo object y al siguiente nodo de la lista
    NodosListaA (NodoBinario valor, NodosListaA signodo){
        datos=valor;
        siguiente=signodo;//siguiente se refiere al siguiente nodo
    }
}

//Definicion de la clase Lista
class Cola{
    NodosListaA PrimerNodo;
    NodosListaA UltimoNodo;
    String Nombre;
   
    //constructor construye una lista vacia conun anombre de List
    public Cola (){
        this("Lista");
    }
   
    //Cosntructor
    public Cola (String s){
        Nombre = s;
        PrimerNodo=UltimoNodo=null;
     }
   
    //retorna True si Lista Vacia
    public boolean VaciaLista(){
        return PrimerNodo==null;
    }
   
    //inserta un elemento al frente de la lista
    public void InsertaInicio (NodoBinario ElemInser){
        if (VaciaLista())
            PrimerNodo=UltimoNodo=new NodosListaA(ElemInser);
        else
            PrimerNodo= new NodosListaA(ElemInser, PrimerNodo);
    }
   
    //inserta al final de la lista
    public void InsertaFinal(NodoBinario ElemInser){
        if (VaciaLista())
            PrimerNodo=UltimoNodo=new NodosListaA(ElemInser);
        else
            UltimoNodo=UltimoNodo.siguiente=new NodosListaA(ElemInser);
    }
   
    //eliminar al inicio
    public void EliminaInicio(){
        if (VaciaLista())
            System.out.println("No hay elementos");
        //restablecer las referencias de primernodo y ultimonodo
        if (PrimerNodo.equals(UltimoNodo))
            PrimerNodo=UltimoNodo=null;
        else
            PrimerNodo=PrimerNodo.siguiente;
    }
   
    //elimina Final
    public void EliminaFinal(){
        if (VaciaLista())
            System.out.println("No hay elementos");
        //Restablecer las referencias de PrimerNodo y UltimoNodo
        if (PrimerNodo.equals(UltimoNodo))
            PrimerNodo=UltimoNodo=null;
        else{
            NodosListaA Actual=PrimerNodo;
            while (Actual.siguiente != UltimoNodo)
                Actual=Actual.siguiente;
            UltimoNodo=Actual;
            Actual.siguiente=null;
           }
    }
}


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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

/**
 *
 * @author Ivan
 */
public class Busqueda_2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        java.util.Scanner leer = new Scanner(System.in);
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        //creando objeto del arbolito
        Arbol A = new Arbol();
        int b;
        for (int j=0;j<6;j++)
        {
            System.out.println("Ingresar Datos");
            b=Integer.parseInt(entrada.readLine());
            A.InsertaNodo(b);
        }
        System.out.print("Preorden es: ");
        A.Preorden(A.Raiz);
        System.out.println();
        System.out.print("Inorden es: ");
        A.Inorden(A.Raiz);
        System.out.println();
        System.out.print("Postorden es: ");
        A.PostOrden(A.Raiz);
        System.out.println();
        System.out.print("La Altura del arbol es: " + A.Altura(A.Raiz));
        A.Anchura(A.Raiz);
                        // TODO code application logic here
    }
}

sábado, 6 de abril de 2013

Tarea 2 - Test de Turing y La Habitación China

Test de Turing 


La Prueba de Turing, propuesta por Alan Turing (1950), se diseñó para proporcionar una definición operacional y satisfactoria de inteligencia. En vez de proporcionar una lista larga y quizás controvertida de cualidades necesarias para obtener inteligencia artificialmente, él sugirió una prueba basada en la incapacidad de diferenciar entre entidades inteligentes indiscutibles y seres humanos. El computador supera la prueba si un evaluador humano no es capaz de distinguir si las respuestas, a una serie de preguntas planteadas, son de una persona o no.



Habitación China 


Experimento mental presentado por John Searle presentado para demostrar que un programa no puede entregarle una "mente", comprendimiento o conciencia sin importar cuan inteligente parezca.

El experimento consiste en el caso hipotético donde existe una computadora que es capaz de entender el lenguaje chino y responder de tal manera en que aprueba el test de turing con efectividad total. Si se toma el software que permite a la máquina responder de manera efectiva a la conversación y se le entregan los "pasos a seguir" a un humano que sólo hable inglés, éste podrá participar en una conversación en chino con la misma efectividad sin necesariamente entender lo que se está comunicando.

Lo anterior demuestra que la capacidad de responder de manera satisfactoria a una pregunta no demuestra que la pregunta haya sido realmente entendida.

Existen 9 objeciones analizadas en el documento de Alan Turing, apuntadas a continuación:

  • La objeción teológica
  • La objeción de la "cabeza en la arena"
  • La objeción matemática
  • El argumento de la conciencia
  • Argumentos sobre diversas capacidades
  • La objeción de Lady Lovelace
  • El argumento de la continuidad del sistema nervioso
  • El argumento de la informalidad del comportamiento
  • El argumento de la percepción extrasensorial


Preguntas


Analice las objeciones a la propuesta de pruebas de inteligencia planteadas en el documento original de Alan Turing sobre IA (Turing 1950).



  1. La objeción teológica : Declara que el pensamiento es una función inherente del alma inmortal del hombre y que, por carecer de una, la máquina no puede pensar.

  2. La objeción de la "cabeza en la arena" : "Las consecuencias de una máquina piense serían demasiado terribles. Esperemos y creamos que no pueden hacerlo". Miedo basado en la creencia de superioridad del hombre debido a la aparente diferencia de inteligencia.

  3. La objeción matemática : Demostración del límite del potencial de las máquinas de estado discreto utilizando modelos matemáticos como el teorema de Gödel, que demuestra que cualquier sistema lógico lo suficientemente poderoso puede formular enunciados que no pueden comprobarse ni refutarse dentro de ese sistema, a menos que quepa la posibilidad de que el sistema en sí sea incongruente.

  4. El argumento de la conciencia : "Hasta que una máquina pueda escribir un soneto o componer un concierto guiado por los pensamientos y emociones experimentadas y no mediante una cascada aleatoria de símbolos no podremos aceptar que es capaz de igualar a un cerebro".

  5. Argumentos sobre diversas capacidades : "Acepto que puedas hacer que las máquinas hagan todo lo que ahora has mencionado, pero nunca podrás hacer que una de ellas haga X".

  6. La objeción de Lady Lovelace : "La máquina analítica no pretende crear nada. Puede hacer lo que sea que sepamos ordenarle".

  7. El argumento de la continuidad del sistema nervioso : No se puede esperar ser capaces de imitar el comportamiento del sistema nervioso con una máquina de estado discreto.

  8. El argumento de la informalidad del comportamiento : No se puede explicar el comportamiento del hombre mediante un conjunto de instrucciones, lo que imposibilita el implementar esas capacidades en una máquina.

  9. El argumento de la percepción extrasensorial : Se analiza la posibilidad de un participante B dentro del test de turing, el cual puede utilizar poderes extrasensoriales para responder de manera acertada a las preguntas del evaluador.

¿Qué objeciones todavía tienen peso?


Todas fueron respondidas en el mismo documento de Turing, y ninguna tiene peso.

 ¿Qué posibilidades cree usted que un computador tendría hoy en día para pasar el test de Turing?


Altas posibilidades. Actualmente ya hay máquinas que logran pasar el test.
EJ: ELIZA(1966), PARRY(1972), entre otros...

 Conclusiones del experimento de la Habitación China

El test se se encarga de plantear una situación en la cual el test de Turing puede ser pasado sin la necesidad de una máquina que realmente comprenda lo que se está comunicando, lo que demuestra que el test de Turing no es una medida efectiva para poder determinar si la máquina reacciona utilizando secuencias de un algoritmo o si realmente es capaz de comprender y asociar la información recibida. Aun así no está dentro del propósito de este experimento, ni casualmente se logra descartar la posibilidad de que la máquina sí se encuentre aprendiendo y mejorando sus tácticas de respuesta mediante el uso de inteligencia.


https://groups.google.com/forum/?fromgroups=#!topic/si-181/rdjC7qtb4Sc

viernes, 5 de abril de 2013

Tarea 1 Avance IA

Inteligencia artificial

Es hacer que una maquina pueda imitar el comportamiento y pensamiento humano, osea, actuar como humano, pensar como humano, actuar racionalmente, pensar como racionalmente.
Algunas de las aplicaciones donde se usa la IA:
-Robótica
-Juegos
-Vehículos

Uno de los proyectos importantes que hay en el  área de la inteligencia artifical es el robot ASIMO

ASIMO


En la versión 2004 ASIMO puede correr a una velocidad de 3 km/h y asimismo, la velocidad de avance caminando ha pasado de 1,6 km/h a 2,5 km/h.
Las medidas de ASIMO están pensadas para adaptarse al entorno humano: 1,2 m de altura, 450 mm de ancho de hombros, 440 mm de profundo y 43 kg de peso.

En la versión 2005 es llamada "new ASIMO". Cambios destacados con respecto a la anterior versión:
·         Se han añadido sensores en las muñecas de tal forma que ha sido posible crear el programa de control para que ASIMO sea capaz de llevar carros, bandejas, paquetes, etc. de forma segura.
·         Se ha añadido un nuevo algoritmo de control que le hace más seguro en entornos con humanos, así puede usar su nueva capacidad para interactuar con ellos.

En el año 2009 ASIMO es capaz de ser controlado por una persona mediante un dispositivo ICC (interfaz computadora-cerebro) con un 90,6% de aciertos. La precisión depende de la capacidad de concentración del individuo, entre otros factores.

En el año 2011 Honda desveló un ASIMO totalmente renovado con la nueva tecnología de control de comportamiento autónomo. Mayor autonomía, inteligencia mejorada y la habilidad física de adaptarse a las situaciones. Novedades:
1.   - 6 kg menos de peso quedándose en 49 kg
2.   - 9 km/h de velocidad.
3.   - Posibilidad de discernir entre 3 voces distintas de 3 personas distintas hablando simultáneamente
4.   - Posibilidad de saltar en un pie solo, incluso rotando sobre sí mismo
5.   - Las piernas sitúan los pies sobre el suelo de forma totalmente humana, es decir, apoyándose sobre el tacón y la punta de los pies
6.   - Posibilidad de andar por suelos irregulares, con piedras y deformidades
7.   - Mayor sensibilidad de tacto en las manos permitiendo que pueda sostener un vaso de papel y llenarlo sin derramar ni una gota.


Jose Saez
Rodrigo Lagos
Cesar Adriazola Moya
Ivan Barrera
https://groups.google.com/forum/?fromgroups=#!topic/si-181/kV41-s4SESo