LMRG En La Red

LMRG En La Red

viernes, 11 de diciembre de 2015

Programa Ordenamiento Externo En Netbeans

El Programa realiza las siguientes funciones cada una dividida en un total de 5 clases llama a la función mediante un menú de opciones, pide al usuario insertar una cantidad n de registros que son generados aleatoriamente y posteriormente aplica las funciones según indique el usuario.

1:Crear Archivo
2:Leeer
3:Mezcla Directa
4:Mezcla Natural
5:Intercalacion
6:Salir (termina el programa)

Clase principal

import java.util.*;
import java.io.*;
public class Principal {
public static void main(String[] args) throws IOException, ClassNotFoundException{       
Scanner sc = new Scanner(System.in);       
String NombreArchivo0 = "original";
String NombreArchivo1 = "mezcla directa";
String NombreArchivo2 = "mezcla natural";
String NombreArchivo3 = "Intercalacion";
String NombreArchivo4 = "1(uno)";
String NombreArchivo5 = "2(dos)";
File f = null;
File fd = null;
File fn = null;
File fi = null;
mezcladirecta MD = new mezcladirecta();
mezclanatural MN = new mezclanatural();
intercalacion IN = new intercalacion();
imprimir IM = new imprimir();       
Random rnd = new Random();
long TInicio, TFin, tiempo;
boolean BAND1 = false, BAND2 = false;  
String opcion, numero;
int op = 0, n = 0, valor;       
do{
try{
System.out.println("");
System.out.println("------------------------------------------------------------");
System.out.println("Selecciona Una De Las Opciones");
System.out.println("0: Crear Archivo");
System.out.println("1: Leeer");
System.out.println("2: Mezcla Directa");
System.out.println("3: Mezcla Natural");
System.out.println("4: Intercalacion");
System.out.println("5: Salir");
System.out.println("------------------------------------------------------------");
opcion = sc.nextLine();
op = Integer.parseInt(opcion);
System.out.println("------------------------------------------------------------");
System.out.println("");
switch(op){
case 0:{
System.out.println("Ingresa La Cantidad De Datos");
numero = sc.nextLine();
n = Integer.parseInt(numero);
f = new File (NombreArchivo0);
fd = new File (NombreArchivo1);
fn = new File (NombreArchivo2);

DataOutputStream FlujoO = null;
DataOutputStream FlujoD = null;
DataOutputStream FlujoN = null;                  
try{
FlujoO = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
FlujoD = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(fd)));
FlujoN = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(fn)));                      
for (int j = 1; j <= n; j++){
System.out.println("");
System.out.println("Valor  "+j+":");
valor = (int)(rnd.nextDouble()*1000+0);
System.out.println("  "+valor+".");
FlujoO.writeInt(valor);
FlujoD.writeInt(valor);
FlujoN.writeInt(valor);
}
System.out.println("");
System.out.println("Archivo Llenado con exito :3");
FlujoO.close();
FlujoD.close();
FlujoN.close();
}
catch(IOException e){
System.out.println("Error de Entrada/Salida");
}
break;
}
                   
case 1:
if(n != 0){
System.out.println("");
System.out.println("Archivo Original");
IM.Imprimir(f, n);
}
                   
else{
System.out.println("El Archivo Esta Vacio");
}
break;
case 2:
if(n != 0){
TInicio = System.currentTimeMillis();
MD.mdirecta(fd);
TFin = System.currentTimeMillis();
BAND1 = true;
System.out.println("");
System.out.println("Archvio (mezcla directa)");
IM.Imprimir(fd, n);
tiempo = TFin - TInicio;
System.out.println(" ");
}
else{
System.out.println("El Archivo Esta Vacio");
}                   
break;
case 3:
if(n != 0){
TInicio = System.currentTimeMillis();
MN.MezclaNatural(fn);
TFin = System.currentTimeMillis();
BAND2 = true;
tiempo = TFin - TInicio;
System.out.println(" ");
System.out.println("Tiempo De Ejcecucion " + tiempo+".");
}
else{
System.out.println("El Archivo Esta Vacio");
}
break;
case 4:
if(n != 0 && BAND1 == true && BAND2 == true){
System.out.println("");
System.out.println("Archivo");
fi = new File(NombreArchivo3);
fn = fd;                 
TInicio = System.currentTimeMillis();                      
IN.Intercalacion(fd, fn, fi, n);                
TFin = System.currentTimeMillis();
tiempo = TFin - TInicio;
System.out.println("");
}            
else{
System.out.println("Archivo Vacio");
}
break;
}
}
catch(NumberFormatException e){
System.out.println("Ingresa solo caracteres validos");     
}
}  
while(op != 5);    
}
}

Clase imprimir

import java.io.*;
public class imprimir{
public void Imprimir(File f, int n) throws IOException{
DataInputStream FlujoIm = null;
FlujoIm = new DataInputStream(new BufferedInputStream(new FileInputStream(f)));
for (int i = 1; i <= n; i++){
System.out.println(" *"+FlujoIm.readInt()+" ");
}
System.out.println("");

}

Clase Intercalacion

import java.io.*;
public class intercalacion {
public void Intercalacion(File f1,File f2,File f3,int n) throws IOException{
int var1=0;
int var2=0;
DataInputStream flujo1 = new DataInputStream(new BufferedInputStream(new FileInputStream(f1)));
DataInputStream flujo2 = new DataInputStream(new BufferedInputStream(new FileInputStream(f2)));
DataOutputStream flujo3 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f3)));
boolean Bandera1 = true;
boolean Bandera2 = true;
int Contador = 0;
int Contador1 = 0;
while(((Contador< (f1.length()/4)) || (Bandera1==false)) && ((Contador1< (f2.length()/4)) || (Bandera2==false))){
if(Bandera1 == true){
var1 = flujo1.readInt();
Bandera1 = false;
Contador++;
System.out.println(var1);
System.out.println(" ");
}
if(Bandera2 == true){
var2 = flujo2.readInt();
Bandera2 = false;
Contador1++;
System.out.println(var2);
System.out.println(" ");
}
if(var1<var2){
flujo3.writeInt(var1);
Bandera1 = true;
}
else{
flujo3.writeInt(var2);
Bandera2 = true;
}
}
if(Bandera1==false){
flujo3.writeInt(var1);
while(Contador<(f1.length()/4)){
var1=flujo1.readInt();
flujo3.writeInt(var1);
Contador++;
}  
}
if(Bandera2 == false){
flujo3.writeInt(var2);
while(Contador1< (f2.length()/4)){
var2 = flujo2.readInt();
flujo3.writeInt(var2);
Contador1++;
}
}
flujo1.close();
flujo2.close();
flujo3.close();
}  
}

Clase Mezcla directa

import java.io.*;
public class mezcladirecta{
static void mdirecta(File f) throws IOException{
int longSec;
int numReg;       
File f1 = new File ("ArchivoAux1");
File f2 = new File ("ArchivoAux2");     
numReg=(int)f.length()/4;       
longSec = 1;       
while(longSec<numReg){
Distribuir(f, f1, f2, longSec, numReg);
Mezclar(f1, f2, f, longSec, numReg);
longSec *=2;
}
}
static void Distribuir (File f, File f1, File f2, int longSec, int numReg) throws IOException{
int numSec, Resto, i;
DataInputStream Flujo = new DataInputStream(new BufferedInputStream(new FileInputStream(f)));
DataOutputStream Flujo1 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f1)));
DataOutputStream Flujo2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f2))); 
numSec = numReg /(2*longSec);
Resto = numReg % (2*longSec);       
for(i=1;i<=numSec;i++){
subSecuencia(Flujo, Flujo1, longSec);
subSecuencia(Flujo, Flujo2, longSec);

if(Resto>longSec){
Resto -= longSec;
}       
else{
longSec = Resto;
Resto = 0;
}
subSecuencia(Flujo, Flujo1, longSec);
subSecuencia(Flujo, Flujo2, Resto);
Flujo.close();
Flujo1.close();
Flujo2.close();
}   
static void subSecuencia(DataInput f, DataOutput t, int longSec) throws IOException{
int Clave;
for(int j=1;j<=longSec; j++){
Clave = f.readInt();
t.writeInt(Clave);
}
}   
static void Mezclar(File f1, File f2, File f, int lonSec, int numReg) throws IOException{
int numSec, Resto, i, j, k;
int Clave1 = 0, Clave2 = 0;
numSec = numReg/(2*lonSec);
Resto = numReg % (2*lonSec);
DataOutputStream Flujo = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
DataInputStream Flujo1 = new DataInputStream(new BufferedInputStream(new FileInputStream(f1)));
DataInputStream Flujo2 = new DataInputStream(new BufferedInputStream(new FileInputStream(f2)));
Clave1 =Flujo1.readInt();
Clave2 =Flujo2.readInt();
for(int s=1;s<=numSec+1;s++){
int n1, n2;
n1=n2=lonSec;
if(s==numSec+1){
if(Resto>lonSec){
n2=Resto-lonSec;
}
else{
n1=Resto;
n2=0;
}
}
i=j=1;
while(i<=n1&&j<= n2){
int Clave;
if(Clave1 < Clave2){
Clave = Clave1;
try{
Clave1 = Flujo1.readInt();
}
catch(EOFException e) {;}
i++;
}
else{
Clave = Clave2;
try{
Clave2 = Flujo2.readInt();
}                   
catch(EOFException e) {;}
j++;
}               
Flujo.writeInt(Clave);
}           
for(k=i;k<=n1;k++) {
Flujo.writeInt(Clave1);               
try{
Clave1 = Flujo1.readInt();
}               
catch(EOFException e){;}
}           
for(k=j;k<=n2;k++) {
Flujo.writeInt(Clave2);               
try{
Clave2 = Flujo2.readInt();
}
catch(EOFException e){;}
}
}       
Flujo.close();
Flujo1.close();
Flujo2.close();
}  
}

Clase Mezcla Natural

import java.io.*;
public class mezclanatural{
static final int N = 6;
static final int N2 = N/2;
static File []f = new File[N];
static final int NumReg = 10;
static final int TOPE = 999;

static void MezclaNatural(File fn) throws IOException, ClassNotFoundException{
int i, j, k, k1, t;
int anterior;
int [] c = new int [N];
int [] cd = new int [N];
int [] r = new int [N2];
Object [] Flujos = new Object [N];
DataInputStream FlujoEntradaActual = null;
DataOutputStream FlujoSalidaActual = null;
boolean [] actvs = new boolean [N2];
try{
String [] nomf = {"ar1", "ar2", "ar3", "ar4", "ar5", "ar6"};
for (int x=0;x<N;x++){
f[x] = new File(nomf[x]);
}
t=Distribuir(fn);
for(i=0;i<N;i++){
c[i]=i;
}
do{
k1=(t<N2)?t:N2;
for (i = 0; i < k1; i++){
Flujos[c[i]] = new DataInputStream(new BufferedInputStream(new FileInputStream(f[c[i]])));
cd [i] = c[i];
}
j=N2;
t=0;
for(i=j;i<N;i++){
Flujos [c[i]] = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f[c[i]])));
}
for (int n=0;n<k1;n++){
FlujoEntradaActual = (DataInputStream) Flujos[cd[n]];
r[n] = FlujoEntradaActual.readInt();
}               
while (0 < k1){
t++;                   
for(i=0;i<k1;i++){
actvs [i] = true;
}      
FlujoSalidaActual=(DataOutputStream) Flujos[c[j]];                   
while(!finDeTramos(actvs, k1)){
int n;
n = minimo(r, actvs, k1);
FlujoEntradaActual = (DataInputStream) Flujos[cd[n]];
FlujoSalidaActual.writeInt(r[n]);
anterior=r[n];
try{
r[n] = FlujoEntradaActual.readInt();
if(r[n] < anterior){
actvs[n] = false;
}
}
catch(EOFException e){
k1 --;
FlujoEntradaActual.close();
cd[n] = cd[k1];
r[n] = r[k1];
actvs[n] = actvs[k1];
actvs[k1] = false;
}
}
j=(j<N-1)?j+1:N2;
}
for (i=N2;i<N;i++){
FlujoSalidaActual=(DataOutputStream) Flujos[c[i]];
FlujoSalidaActual.close();
}
for(i=0;i<N2;i++){
int a;
a=c[i];
c[i]=c[i+N2];
c[i + N2]=a;
}
}
while(1<t);
System.out.println(" ARCHIVO ORDENADO:");
escribir(f[c[0]]);
}
catch(IOException er){
er.printStackTrace();
}
}
   
private static int Distribuir(File f0) throws IOException, ClassNotFoundException{
int anterior, j, nt;
int clave;
DataInputStream Flujo = new DataInputStream(new BufferedInputStream(new FileInputStream(f0)));
DataOutputStream [] FlujoSalida = new DataOutputStream[N2];
for(j=0;j<N2;j++){
FlujoSalida[j] = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f[j])));
}
anterior = -TOPE;
clave=anterior+1;
j=0;
nt=0;
try{
while(true){
clave = Flujo.readInt();
while(anterior<=clave){
FlujoSalida[j].writeInt(clave);
anterior = clave;
clave = Flujo.readInt();
}               
nt++;
j=(j<N2-1)?j+1:0;
FlujoSalida[j].writeInt(clave);
anterior = clave;
}
}       
catch(EOFException eof){
nt++;
System.out.println("Numero de tramos "+nt+".");
System.out.println("    ");
Flujo.close();
for(j=0;j<N2;j++){
FlujoSalida[j].close();
}
return nt;
}
}
public static int minimo (int [] r, boolean [] activo, int n){
int i, indice;
int m;
i=indice = 0;
m=TOPE+1;
for(;i<n;i++){
if(activo[i] && r[i] < m){
m=r[i];
indice = i;
}
}
return indice;
}
   
private static boolean finDeTramos(boolean [] activo, int n){
boolean s = true;
for(int k=0;k<n;k++){
if(activo[k]) s = false;
}       
return s;
}
   
static void escribir(File f){
int clave, k;
boolean mas = true;       
DataInputStream Flujo = null;
       
try{
Flujo=new DataInputStream(new BufferedInputStream(new FileInputStream(f)));
k=0;
while(mas){
k++;
System.out.println("* "+Flujo.readInt()+".");
if(k%10==0) System.out.println("");
}
}
catch(IOException eof){
System.out.println("");
try{
if(eof instanceof EOFException)
Flujo.close();
}
catch(IOException er){
er.printStackTrace();
}
}
}
}

ISIC-2010-224 Inteligencia Artificial

1.- DATOS DE LA ASIGNATURA
Nombre de la asignatura: Inteligencia Artificial
Carrera: Ingeniería en Sistemas Computacionales
Clave de la asignatura: SCC-1012
SATCA1 2-2-4

2.- PRESENTACIÓN
Caracterización de la asignatura.
Esta asignatura aporta al perfil del Ingeniero en Sistemas Computacionales la capacidad de aplicar técnicas de Inteligencia Artificial mediante el desarrollo y programación de modelos matemáticos, estadísticos y de simulación a la solución de problemas complejos de control automático, diagnóstico, toma de decisiones, clasificación, minería de datos, es decir, problemas propios de la Inteligencia Artificial.

Con esta asignatura se pretende dar una Introducción a la Inteligencia Artificial (IA) presentando a los estudiantes, algunos de los métodos más utilizados en las diferentes áreas de la Inteligencia Artificial. Para ello, se introducen las técnicas más comunes de manipulación y representación del conocimiento y se analizan las características de las herramientas disponibles para la construcción de aplicaciones reales, en las diferentes áreas de la IA, con el fin de conformar una actitud científica, crítica y responsable del egresado.

Esta materia está situada como una de las últimas del plan de estudio, debido a que el alumno necesita tener de base el aprendizaje de otras materias que permitan que posea habilidades de estructuras de control, listas, arboles, recursividad, así como, conocimientos de teoría de la probabilidad, teoría de la computación, programación en lenguajes de alto nivel, conocimientos de estructura y bases de datos.

Intención didáctica.
La asignatura se dividió en cinco unidades, de tal manera que el estudiante en las primeras tres unidades obtendrá los conocimientos básicos generales, para que en las unidades posteriores vaya adquiriendo un nivel de conocimiento y desarrollo de habilidades, más complejas de manera gradual, además, de la misma forma se retomarán algunos de los temas elementales de las asignaturas anteriormente cursadas.

La primera unidad aborda conocimientos esenciales que el estudiante debe poseer para comprender el origen, los distintos enfoques y el estado actual de los desarrollos en el campo de la inteligencia artificial, que le serán útiles para desarrollar su capacidad de análisis crítico y ubicar la materia en el contexto global.

Las unidades dos y tres tratan los conceptos necesarios para que el estudiante obtenga la capacidad de solucionar problemas, mediante técnicas de búsqueda y la capacidad de generar nuevas ideas para la representación del conocimiento y del razonamiento, retomando los conceptos de la lógica de predicados, inducción y teoría de grafos estudiados en la asignatura de matemáticas discretas.
En la unidad cuatro, se proporciona al estudiante los conocimientos para modelar, sistemas de razonamiento aplicando reglas de producción, buscando que sea capaz de diseñar una solución a un problema propuesto, utilizando el ciclo de vida de un sistema de producción.

Dentro de la unidad cinco, se le sugiere al docente coordinar a los estudiantes para que desarrollen un proyecto de aplicación en alguna de las distintas ramas de la Inteligencia Artificial, que será seleccionada de acuerdo a la demanda del sector productivo de la región.

Es primordial que el alumno logre desarrollar una solución final o proyecto integrador, puesto que la necesidad de una solución terminada es el claro escenario que se presenta en el ambiente laboral y para que el alumno sea capaz de enfrentar dicha situación, debe reunir habilidades de investigación, capacidad de adaptarse a nuevas situaciones y de generar nuevas ideas y al mismo tiempo, capacidad de trabajar en un equipo interdisciplinario.

Por último, es importante que el profesor proporcione una visión completa de la asignatura sabiendo delimitar las aplicaciones al sector productivo y las del sector de investigación.

3.- COMPETENCIAS A DESARROLLAR

Competencias específicas:
Conocer los principios y el desarrollo de la Inteligencia Artificial, identificando sus aplicaciones (robótica, visión computacional, lógica difusa, redes neuronales y procesamiento de lenguaje natural) para emplearlas en el diseño e implementación de sistemas inteligentes que faciliten las tareas del ser humano.

Competencias genéricas
Competencias instrumentales
*Capacidad de análisis y síntesis
* Capacidad de organizar y planificar
* Conocimientos generales básicos
*Conocimientos básicos de la carrera
*Comunicación oral y escrita en su propia lengua
*Conocimiento de una segunda lengua
*Habilidades básicas de manejo de la computadora
* Habilidades de gestión de información(habilidad para buscar y analizar información proveniente de fuentes diversas
*Solución de problemas
*Toma de decisiones.
Competencias interpersonales
*Capacidad crítica y autocrítica
*Trabajo en equipo
* Habilidades interpersonales
*Capacidad de trabajar en equipo interdisciplinario
*Capacidad de comunicarse con profesionales de otras áreas
*Apreciación de la diversidad y multiculturalidad
*Habilidad para trabajar en un ambiente laboral
*Compromiso ético
Competencias sistémicas
*Capacidad de aplicar los conocimientos en la práctica
*Habilidades de investigación
*Capacidad de aprender
* Capacidad de adaptarse a nuevas situaciones
* Capacidad de generar nuevas ideas (creatividad)
* Liderazgo
*Conocimiento de culturas y costumbres de otros países
* Habilidad para trabajar en forma autónoma
* Capacidad para diseñar y gestionar proyectos
* Iniciativa y espíritu emprendedor
* Preocupación por la calidad
* Búsqueda del logro

4.- HISTORIA DEL PROGRAMA
Lugar y fecha de elaboración o revisión 
Instituto Tecnológico de Saltillo Del 5 al 9 de octubre 2009

Participantes
Representantes de los Institutos Tecnológicos de: Tapachula, Celaya, Superior de Libres, San Luis Potosí, Pinotepa

Observaciones (cambios y justificación)
Reunión nacional de Diseño e innovación curricular de la carrera de Ingeniería en Ingeniería en Sistemas Computacionales.

Lugar y fecha de elaboración o revisión 
Instituto Tecnológico de Tapachula 12 octubre 2009 al 19 febrero 2010

Participantes
Representantes de la Academia de Sistemas y Computación de: Tapachula, Celaya, Superior de Libres, San Luis Potosí, Pinotepa, Toluca, Superior de Macuspana, Superior del Occidente del Estado de Hidalgo.

Observaciones (cambios y justificación) 
Análisis, enriquecimiento y elaboración del programa de estudio propuesto en la Reunión Nacional de Diseño Curricular de la carrera de Ingeniería en Sistemas Computacionales

Lugar y fecha de elaboración o revisión 
Instituto Tecnológico Superior de Poza Rica 22 al 26 febrero 2010

Participantes
Representantes de los Institutos Tecnológicos participantes en el diseño de la carrera de Ingeniería en Sistemas Computacionales de:
Tapachula, Celaya, Superior de Libres, San Luis Potosí, Pinotepa, Toluca, Superior de Macuspana, Superior del Occidente del Estado de Hidalgo.

Observaciones (cambios y justificación) 
Reunión Nacional de Consolidación Curricular de la Carrera de Ingeniería en Sistemas Computacionales

5.- OBJETIVO GENERAL DEL CURSO
Conocer los principios y el desarrollo de la Inteligencia Artificial, identificando sus aplicaciones (robótica, visión computacional, lógica difusa, redes neuronales y procesamiento de lenguaje natural) para emplearlas en el diseño e implementación de sistemas inteligentes que faciliten las tareas del ser humano.

6.- COMPETENCIAS PREVIAS

*Comprensión de las estructuras de control, las listas, árboles, recursividad y teoría de la probabilidad.
* Capacidad de análisis y síntesis.
* Representación y resolución de enunciados con lógica matemática.
* Capacidad de organización y planificación
* Habilidades en el uso de la computadora.
* Programar en un lenguaje de alto nivel
* Experiencia utilizando el Internet.
*Aplicación de sistemas gestores de bases de datos.
*Conocer conceptos de la teoría de la computación.

Unidad 1
Fundamentos de la Inteligencia Artificial.
1.1. Historia de la IA.
1.2. Conceptos y técnicas (Estado del arte) .
1.3. Desarrollos actuales.
1.3.1. Procesamiento de Lenguaje Natural (PLN).
1.3.2. Reconocimiento de patrones.
1.3.3. Robótica.
1.3.4. Sistemas Expertos.
1.3.5. Lógica Difusa (Fuzzy logic).
1.4. Modelos de agente inteligente.
1.5. Heurística.

Unidad 2
Técnicas de Búsqueda.
2.1. Solución de problemas con búsqueda.
2.2. Espacios de estados.
2.2.1. Determinísticos.
2.2.2. No determinísticos.
2.3. Métodos de búsqueda.
2.3.1. Primero en anchura (breadth-first).
2.3.2. Primero en profundidad (depth-first).
2.3.3. Grafos O.
2.3.4. Grafos A.
2.4. Satisfacción de restricciones.
2.5. Teoría de juegos.

Unidad 3
Representación del conocimiento y razonamiento
3.1. Sistemas basados en conocimiento.
3.1.1. Concepto de conocimiento.
3.1.2. Lenguajes utilizados en la representación de conocimiento.
3.2. Mapas conceptuales.
3.3. Redes semánticas.
3.4. Lógica de predicados.
3.4.1. Sintaxis.
3.4.2. Semántica.
3.4.3. Validez.
3.4.4. Inferencia.
3.5. Razonamiento con incertidumbre.
3.5.1. Aprendizaje.
3.5.2. Razonamiento probabilístico.
3.5.3. Lógicas multivaluadas.
3.5.4. Lógica difusa.
3.6. Demostración y métodos.

Unidad 4
Sistemas de razonamiento.
4.1. Reglas de producción.
4.1.1. Sintaxis de las reglas de producción.
4.2. Semántica de las reglas de producción.
4.2.1. Conocimiento causal.
4.2.2. Conocimiento de diagnóstico.
4.3. Arquitectura de un sistema de producción.
4.3.1. Hechos.
4.3.2. Base de conocimientos.
4.3.3. Mecanismos de control.
4.4. Ciclo de vida de un sistema de producción.

Unidad 5
Aplicaciones con técnicas de IA.
5.1. Robótica.
5.1.1. Conceptos básicos.
5.1.2. Clasificación.
5.1.3. Desarrollos actuales y aplicaciones.
5.2. Redes Neuronales (RN).
5.2.1. Conceptos básicos.
5.2.2. Clasificación.
5.2.3. Desarrollos actuales y aplicaciones.
5.3. Visión artificial.
5.3.1. Conceptos básicos.
5.3.2. Desarrollos actuales y aplicaciones.
5.4. Lógica difusa (Fuzzy Logic).
5.4.1. Conceptos básicos.
5.4.2. Desarrollos actuales y aplicaciones.
5.5. Procesamiento de Lenguaje Natural (PLN).
5.5.1. Conceptos básicos.
5.5.2. Desarrollos actuales y aplicaciones.
5.6. Sistemas Expertos (SE).
5.6.1. Conceptos básicos.
5.6.2. Clasificación.
5.6.3. Desarrollos actuales y aplicaciones.

8.- SUGERENCIAS DIDÁCTICAS
* Llevar a cabo actividades prácticas que promuevan el desarrollo de habilidades para la experimentación, tales como: observación, identificación, manejo y control de variables y datos relevantes, planteamiento de hipótesis, de trabajo en equipo.
* Propiciar en el estudiante, el desarrollo de actividades intelectuales de inducción-deducción y análisis-síntesis, las cuales lo encaminan hacia la investigación, la aplicación de conocimientos y la solución de problemas.
* Fomentar actividades grupales que propicien la comunicación, el intercambio argumentado de ideas, la reflexión, la integración y la colaboración de y entre los estudiantes.
*Conocimiento causal y conocimiento de diagnóstico.
* Desarrollar actividades de aprendizaje que propicien la aplicación de los conceptos, modelos y metodologías que se van aprendiendo en el desarrollo de la asignatura.
* Propiciar el uso adecuado de conceptos y de terminología científico-tecnológica.
* Proponer problemas que permitan al estudiante integrar y relacionar los contenidos de esta asignatura con otras, para su análisis y solución.
* Observar y analizar fenómenos y problemáticas propias del campo ocupacional.

9.- SUGERENCIAS DE EVALUACIÓN

La evaluación de la asignatura se hará con base en siguiente desempeño:
* Desarrollo de proyecto final (informe, presentación y defensa del proyecto).
* Evaluación de informes sobre tareas o trabajos de investigación.
* Evaluación escrita.
* Desempeño y participación en el aula.


10.- UNIDADES DE APRENDIZAJE
Unidad 1: FUNDAMENTOS DE LA INTELIGENCIA ARTIFICIAL
Competencia específica a desarrollar
Conocer los conceptos fundamentales de la IA, así como el estado del arte de las áreas de la inteligencia artificial.

Actividades de Aprendizaje
Investigar sobre los diferentes enfoques de la Inteligencia artificial.
* Discutir en grupo los diferentes enfoques.
* Plantear una línea de tiempo de la historia de la IA.
* Investigar las técnicas actuales de la inteligencia artificial.
* Investigar y seleccionar desarrollos actuales de la inteligencia artificial.
* Comentar en grupo los desarrollos actuales de la Inteligencia artificial.
* Investigar información acerca de los modelos de agente inteligente.
* Discutir acerca de los diferentes modelos de agentes inteligentes.
* Investigar el concepto de heurística.
* Elaborar el mapa conceptual de los temas de la unidad.

Unidad 2: TÉCNICAS DE BUSQUEDA.
Competencia específica a desarrollar
Definir y resolver problemas en base a técnicas de búsqueda en espacio de estado.
*Describir gráficamente problemas en términos de espacios de estados.

Actividades de Aprendizaje
Investigar los tipos de problemas que se resuelven con las técnicas de búsqueda.
* Describir gráficamente problemas en términos de espacios de estado (problema de misioneros y caníbales, problemas de juego entre dos adversarios, etc).
* Investigar información sobre los métodos de búsqueda (primero en anchura, primero en profundidad, grafos O y grafos A).
* Discutir en grupo los diferentes algoritmos de búsqueda.
* Realizar un proyecto para resolver un problema de un juego clásico (gato, ajedrez, puzzle, misioneros y caníbales, etc), empleando un método de búsqueda óptima.

Unidad 3: REPRESENTACIÓN DEL CONOCIMIENTO Y RAZONAMIENTO.
Competencia específica a desarrollar
Interpretar la información sobre métodos y técnicas de ingeniería del conocimiento.
* Especificar formalmente el conocimiento base de sistemas basados en el conocimiento.
* Representar frases del lenguaje natural en términos de lógica de predicados.

Actividades de Aprendizaje
 Investigar información acerca de definiciones y elementos de los sistemas basados en conocimientos.
* Exponer la representación de algún concepto mediante un mapa conceptual y una red semántica.
* Investigar y exponer en clase el método de resolución y unificación.
* Investigar y comentar los conceptos de sintaxis, semántica, validez e inferencia en la lógica de predicados.
* Realizar la representación de frases del lenguaje natural en términos de predicados.
* Investigar y seleccionar información acerca de los conceptos de aprendizaje, razonamiento probabilístico, lógicas multivaluadas y lógica difusa.
* Discutir en grupo ejemplos de conocimiento incierto, impreciso y subjetivo.
* Realizar un modelo de red bayesiana a un problema de diagnóstico.
* Discutir las reglas de inferencia válidas en una lógica de predicados.

Unidad 4: SISTEMAS DE RAZONAMIENTO.
Competencia específica a desarrollar
Aplicar la representación basada en reglas de producción, en la solución de problemas basados en conocimiento.
Actividades de Aprendizaje
Investigar información sobre la sintaxis y semántica de un sistema de producción.
* Discutir la diferencia entre conocimiento casual y conocimiento de diagnóstico.
* Investigar la arquitectura de un sistema de producción.
 Diseñar la solución a un problema propuesto utilizando el ciclo de vida de un sistema de producción.
* Implementar el diseño de la solución de un problema utilizando una herramienta de programación simbólica.
* Discutir en grupo los resultados de la implementación.


Unidad 5: APLICACIONES CON TÉCNICAS DE IA.
Competencia específica a desarrollar
Conocer las distintas ramas de la inteligencia artificial y sus aplicaciones actuales, identificando oportunidades de desarrollo de soluciones en su entorno.
* Usar herramientas y lenguajes específicos de Inteligencia Artificial en el desarrollo de soluciones.
 Actividades de Aprendizaje
Investigar y complementar la información sobre la clasificación de las diferentes ramas que comprenden la Inteligencia Artificial, realizada en la unidad 1.
* Investigar, desarrollar y exponer en grupo y/o en equipos , la situación actual de cada una de las ramas que comprenden la inteligencia artificial.

11.- FUENTES DE INFORMACIÓN
1. WINSTON, Patrick Henry, Inteligencia Artificial, Ed. Addison Wesley Iberoamericana, 1992,ISBN 0-201-51876-7
2. GONZALO P.M & Santos P.M, Inteligencia Artificial e Ingeniería del Conocimiento, Ed. AlfaOmega, 2006, ISBN 970-75-1166-2
3. MARTÍN DEL BRIO B. & Saenz M. A. Redes Neuronales y Sistemas Borrosos, Ed Alfaomega, 2006, ISBN 978-970-15-1250-0
4. PALMA M. J & al, Inteligencia Artificial Técnicas, Métodos y Aplicaciones, Ed. McGrawHill, ISBN 978-84-481-5618-3
5. RICH E, & Knight K, Inteligencia Artificial, Ed McGrawHill,1992, ISBN84-481-1858-8
6. RUSSELL S, & Norvig P, Inteligencia Artificial, Un enfoque Moderno, Ed. Prentice Hall, 2006,ISBN 968-880-682-x
7. GIARRATANO J. & Riley G. Sistemas Expertos, Principios y programación (CLIPS), Ed. International Thompson, 3da. Edición, 1996
8. MOCKER R, & Dologite D.G. Knowledge-Based Systems: An Introduction to expert systems. MacMillan, 1992.
9. SUPPES H & Hill H, Introducción a la lógica matemática, ed. Reverté, 1988.
10. CUENCA J. Lógica informática, Ed. Alianza Editorial. S.A, Madrid, 2da Edición 1986.
11. ROWE N.C. Artificial Intelligence through PROLOG. Ed. Prentice Hall, 1988. ISBN 0-13-048679-5
12. FERNÁNDEZ G. Universidad Politécnica de Madrid. Escuela Técnica Superior de Ingenieros de Telecomunicación. Departamento de Ingeniería de Sistemas Telemáticos. Grupo de Sistemas Inteligentes. http://www.gsi.dit.upm.es/~gfer/ssii/rcsi/
13. Apuntes académicos sobre mapas conceptuales.
http://profesor.sis.uia.mx/aveleyra/comunica/mmps/mapasconceptuales.htm

12.- PRÁCTICAS PROPUESTAS
1. Investigar sobre los avances en materia de IA, exponiendo los criterios que le sean más importantes frente a grupo.
2. Desarrollar mapas conceptuales para cada tema.
3. Desarrollar los métodos de búsqueda en profundidad y en anchura en un grafo dirigido. Por ejemplo, usar un mapa de carreteras e ir de una ciudad a otra.
4. Resolver problemas de juegos clásicos de la IA, empleando un lenguaje simbólico: gato, ajedrez, puzzle, el agente viajero, misioneros y caníbales, el problema de las jarras.
(Si se emplea Jess, se pueden implementar en algún sitio servidor WEB).
5. Realizar prácticas en computadora para ilustrar una red neuronal.
6. Realizar una red neuronal con mínimo 3 circuitos.
7. Controlar un robot a través de software.