Practicas y consejos.docx
Transcript of Practicas y consejos.docx
MANUAL DE PRÁCTICAS
INGENIERÍA EN SISTEMAS COMPUTACIONALES
PLAN ISIC-2004-296
PROGRAMACIÓN LÓGICA Y FUNCIONAL
SCC-1019
ÍndiceINTRODUCCIÓN----------------------------------------------------------------------------------------------------------------1
PRÁCTICA 1Conceptos fundamentales----------------------------------------------------------------------------------------------------1
PRÁCTICA 2Programación funcional-------------------------------------------------------------------------------------------------------1
PRÁCTICA 3Base de conocimiento---------------------------------------------------------------------------------------------------------1
PRÁCTICA 4Programación lógica------------------------------------------------------------------------------------------------------------1
PRÁCTICA 5Herramientas de sistemas expertos----------------------------------------------------------------------------------------1
PRÁCTICA 6Sistema experto-----------------------------------------------------------------------------------------------------------------1
LISTA DE MATERIAL, EQUIPO O REACTIVO A UTILIZAR-------------------------------------------------------1
LISTA DE BIBLIOGRAFÍA REQUERIDA--------------------------------------------------------------------------------1
CONTROL DE CAMBIOS DEL MANUAL DE PRÁCTICAS--------------------------------------------------------1
Programación lógica y funcional [SCC-1019]
INTRODUCCIÓN
La Programación Lógica y Funcional aporta la capacidad de desarrollar habilidades para la generación de soluciones automatizadas basadas en lenguajes de inteligencia artificial, considerando el entorno y la aplicación de diversas técnicas, herramientas y conocimientos.
Los programas para computadora actualmente son fundamentales en muchas áreas del ser humano, debido a que se usan para resolver diversos problemas en la ciencia, la industria y los negocios. Para cubrir estas necesidades, se han desarrollado lenguajes de programación dentro de la inteligencia artificial. El Ingeniero en Sistemas Computacionales contribuirá, aplicando estos conocimientos para la solución de problemas a través de la programación lógica y funcional, con una conciencia ética y de respeto al medio ambiente.
Se denomina inteligencia artificial a la rama de la ciencia informática dedicada al desarrollo de agentes racionales no vivos (agentes inteligentes). Es la disciplina quese encarga de construir procesos que al ser ejecutados sobre una arquitectura físicaproducen acciones o resultados que maximizan una medida de rendimiento determinada, basándose en la secuencia de entradas percibidas y en el conocimiento almacenado en tal arquitectura.
Los sistemas expertos, que reproducen el comportamiento humano en un estrecho ámbito del conocimiento; son programas tan variados como los que diagnostican infecciones en la sangre e indican un tratamiento, los que interpretan datos sismológicos en exploración geológica y los que configuran complejos equipos de alta tecnología.
La IA es un conjunto de métodos y filosofía, y por lo tanto no está atada a un lenguaje en particular. Los problemas de IA requieren que los programas manipulen conocimiento en lugar de números. Para lo anterior, se desarrollaron nuevos lenguajes para atacar estos problemas, como lo son: de programación simbólica y de programación lógica.
Fecha de Actualización 17/09/2013 Página 1
Programación lógica y funcional [SCC-1019]
Práctica 1
CONCEPTOS FUNDAMENTALESObservaciones: Esta práctica incluye a la Práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”.
1.- OBJETIVO
Que el alumno conozca los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos, para su retroalimentación.
2.- MARCO TEÓRICO
ESTILO DE PROGRAMACIÓN:
Estilo de programación (también llamado estándares de código o convención de código) es un
término que describe convenciones para escribir código fuente en ciertos lenguajes de programación.
El estilo de programación es frecuentemente dependiente del lenguaje de programación que se haya
elegido para escribir.
Ejemplo del siguiente pseudocódigo:
get horas minutos segundos
if horas < 24 and minutos < 60 and segundos < 60
return true
else
return false
Puede escribirse por ejemplo así:
if(horas < 24 && minutos < 60 && segundos < 60){ return true;}else{ return false;}
Fecha de Actualización 17/09/2013 Página 2
Programación lógica y funcional [SCC-1019]
O bien puede escribirse así:
if(horas < 24 && minutos < 60 && segundos < 60){ return true;}else{ return false;}
O así:
if(horas<24&&minutos<60&&segundos<60){return true;}else{return false;}
EVALUACIÓN DE EXPRESIONES
Las expresiones son secuencias de constantes y/o variables separadas por operadores válidos. Y son evaluadas con respecto a su orden de precedencia y este orden es muy similar en cada lenguaje de programación.
Se puede construir una expresión válida por medio de :
1. Una sola constante o variable, la cual puede estar precedida por un signo + ó - .
2. Una secuencia de términos (constantes, variables, funciones) separados por operadores.
Las reglas de evaluación para las expresiones son:
1. Si todos los operadores en una expresión tienen la misma precedencia, la evaluación de las operaciones se realiza de izquierda a derecha.
2. Cuando los operadores sean de diferentes precedencias, se evalúan primero las operaciones de más alta precedencia (en una base de izquierda a derecha), luego se evalúan las de precedencia siguiente, y así sucesivamente.
3. Las reglas 1) y 2) pueden ser anuladas por la inclusión de paréntesis en una expresión.
Por ejemplo en java se toma en cuenta lo siguiente operadores de precedencia:
A r i t m é t i c o s : + - * / % + + - - R e l a c i o n a l e s : < < = > > = = = ! = L ó g i c o s : ! & & | | ? : B i t s : & | ^ ~ < < > > > > > A s i g n a c i ó n : = + = - = * = / = % = & = | = ^ = ~ = < < = > > = > > > = O t r o s : ( ) , ( c a s t ) n e w i n s t a n c e o f
TIPOS DE DATOS
A. Tipos de datos simples
Es uno de los conceptos fundamentales de cualquier lenguaje de programación. Estos definen los métodos de almacenamiento disponibles para representar información, junto con la manera en que
Fecha de Actualización 17/09/2013 Página 3
Programación lógica y funcional [SCC-1019]
dicha información ha de ser interpretada.Para crear una variable (de un tipo simple) en memoria debe declararse indicando su tipo de variable y su identificador que la identificará de forma única. La sintaxis de declaración de variables es la siguiente:
TipoSimple Identificador1, Identificador2;
Esta sentencia indica al compilador que reserve memoria para dos variables del tipo simple TipoSimple con nombres Identificador1 e Identificador2.
Los tipos de datos en Java pueden dividirse en dos categorías: simples y compuestos. Los simples son tipos nucleares que no se derivan de otros tipos, como los enteros, de coma flotante, booleanos y de carácter. Los tipos compuestos se basan en los tipos simples, e incluyen las cadenas, las matrices y tanto las clases como las interfaces, en general.
Cada tipo de datos simple soporta un conjunto de literales que le pueden ser asignados, para darles valor. En este apartado se explican los tipos de datos simples (o primitivos) que presenta Java, así como los literales que soporta (sintaxis de los valores que se les puede asignar).
a.) Tipos de datos enteros
Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.
Tipo Tamaño
byte 1Byte (8 bits)
short 2 Bytes (16 bits)
int 4 Bytes (32 bits)
long 8 Bytes (64 bits)
Literales enteros
Son básicos en la programación en Java y presentan tres formatos:
Decimal: Los literales decimales aparecen como números ordinarios sin ninguna notación especial.
Hexadecimal: Los hexadecimales (base 16) Octal: Los octales aparecen con un 0 inicial delante de los dígitos.
Por ejemplo, un literal entero para el número decimal 12 se representa en Java como 12 en decimal, como 0xC en hexadecimal, y como 014 en octal.
Los literales enteros se almacenan por defecto en el tipo int, (4 bytes con signo), o si se trabaja con números muy grandes, con el tipo long, (8 bytes con signo), añadiendo una L ó l al final del número.
La declaración de variables enteras es muy sencilla. Un ejemplo de ello sería:
long numeroLargo = 0xC; // Por defecto vale 12
b.) Tipos de datos en coma flotante
Fecha de Actualización 17/09/2013 Página 4
Programación lógica y funcional [SCC-1019]
Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.
Tipo Tamaño
float 4 Byte (32 bits)
double 8 Bytes (64 bits)
Literales en coma flotante
Representan números decimales con partes fraccionarias. Pueden representarse con notación estándar (563,84) o científica (5.6384e2).
De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar un tipo más corto (el tipo float de 4 bytes), especificándolo con una F ó f al final del número.
La declaración de variables de coma flotante es muy similar a la de las variables enteras. Por ejemplo:
double miPi = 314.16e-2 ; // Aproximadamente
float temperatura = (float)36.6; // Paciente sin fiebre
Se realiza un moldeado a temperatura, porque todos los literales con decimales por defecto se consideran double.
c.) Tipo de datos boolean
Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.
Literales Booleanos
Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se representaba por un 0 numérico, y verdadero cualquier número que no fuese el 0.
Para declarar un dato del tipo booleano se utiliza la palabra reservada boolean:
boolean reciboPagado = false; // ¡¿Aun no nos han pagado?!
d.) Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.
Java a diferencia de C/C++ distingue entre matrices de caracteres y cadenas.
Literales carácter
Fecha de Actualización 17/09/2013 Página 5
Programación lógica y funcional [SCC-1019]
Representan un único carácter (de la tabla de caracteres Unicode 1.1) y aparecen dentro de un par de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control y no imprimibles) se representan con una barra invertida ('\') seguida del código carácter.
Descripción Representación Valor Unicode
Caracter Unicode \udddd
Numero octal \ddd
Barra invertida \\ \u005C
Continuación \ \
Retroceso \b \u0008
Retorno de carro \r \u000D
Alimentación de formularios \f \u000C
Tabulación horizontal \t \u0009
Línea nueva \n \u000A
Comillas simples \’ \u0027
Comillas dobles \" \u0022
Números arábigos ASCII 0-9 \u0030 a \u0039
Alfabeto ASCII en mayúsculas A.-Z \u0041 a \u005A
Alfabeto ASCII en minúsculas a.-z \u0061 a \u007A
Las variables de tipo char se declaran de la siguiente forma:
char letraMayuscula = 'A'; // Observe la necesidad de las ' '
char letraV = '\u0056'; // Letra 'V'
e.) Conversión de tipos de datos
En Java es posible transformar el tipo de una variable u objeto en otro diferente al original con el que fue declarado. Este proceso se denomina "conversión", "moldeado" o "tipado". La conversión se lleva a cabo colocando el tipo destino entre paréntesis, a la izquierda del valor que queremos convertir de la forma siguiente:
char c = (char)System.in.read();
La función read devuelve un valor int, que se convierte en un char debido a la conversión (char), y el valor resultante se almacena en la variable de tipo carácter c.
El tamaño de los tipos que queremos convertir es muy importante. No todos los tipos se convertirán de forma segura. Por ejemplo, al convertir un long en un int, el compilador corta los 32 bits superiores del long (de 64 bits), de forma que encajen en los 32 bits del int, con lo que si contienen información útil, esta se perderá.
Fecha de Actualización 17/09/2013 Página 6
Programación lógica y funcional [SCC-1019]
Por ello se establece la norma de que "en las conversiones el tipo destino siempre debe ser igual o mayor que el tipo fuente":
Tipo Origen Tipo Destino
byte double, float, long, int, char, short
short double, float, long, int
char double, float, long, int
int double, float, long
long double, float
float double
Tabla 8: Conversiones sin pérdidas de información
B. Vectores y Matrices
Una matriz es una construcción que proporciona almacenaje a una lista de elementos del mismo tipo, ya sea simple o compuesto. Si la matriz tiene solo una dimensión, se la denomina vector.
En Java los vectores se declaran utilizando corchetes ( [ y ] ), tras la declaración del tipo de datos que contendrá el vector. Por ejemplo, esta sería la declaración de un vector de números enteros (int):
int vectorNumeros[ ]; // Vector de números
Se observa la ausencia de un número que indique cuántos elementos componen el vector, debido a que Java no deja indicar el tamaño de un vector vacío cuando le declara. La asignación de memoria al vector se realiza de forma explícita en algún momento del programa.
Para ello o se utiliza el operador new:
int vectorNumeros = new int[ 5 ]; // Vector de 5 números
O se asigna una lista de elementos al vector:
int vectorIni = { 2, 5, 8}; // == int vectorIni[3]=new int[3];
Se puede observar que los corchetes son opcionales en este tipo de declaración de vector, tanto después del tipo de variable como después del identificador.
Si se utiliza la forma de new se establecerá el valor 0 a cada uno de los elementos del vector.
C. Cadenas
En Java se tratan como una clase especial llamada String. Las cadenas se gestionan internamente por medio de una instancia de la clase String. Una instancia de la clase String es un objeto que ha sido creado siguiendo la descripción de la clase.
Fecha de Actualización 17/09/2013 Página 7
Programación lógica y funcional [SCC-1019]
Cadenas constantes
Representan múltiples caracteres y aparecen dentro de un par de comillas dobles. Se implementan en Java con la clase String. Esta representación es muy diferente de la de C/C++ de cadenas como una matriz de caracteres.
Cuando Java encuentra una constante de cadena, crea un caso de la clase String y define su estado, con los caracteres que aparecen dentro de las comillas dobles.
Vemos un ejemplo de cadena declarada con la clase String de Java:
String capitalUSA = "Washington D.C.";
String nombreBonito = "Amelia";
FUNCIONES
En Java una función es un modulo de un programa separado del cuerpo principal, que realiza una tarea específica y que puede regresar un valor a la parte principal del programa u otra función o procedimiento que la invoque.
La forma general de una función es:
tipodatoregresa Nom_fun(parametros)
{ cuerpo de instrucciones;
instrucción return;
}
El tipo especifica el tipo de valor que la función regresara utilizando la instrucción return.
Si no se especifica un tipo se asume de default que el tipo regresado es int.
La lista de parámetros formales es una lista de variables separadas por comas (,) que almacenaran los valores que reciba la función, estas variables actúan como locales dentro del cuerpo de la función.
Aunque no se ocupen parámetros los paréntesis son requeridos.
La declaración de parámetros es la especificación de cada tipo de parámetro recibido.
INSTRUCCION RETURN
Dentro del cuerpo de la función deber haber una instrucción return cuando menos, para regresar el valor, esta instrucción permite regresar datos.
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Fecha de Actualización 17/09/2013 Página 8
Programación lógica y funcional [SCC-1019]
Sistema Operativo Windows o Linux Internet Hojas blancas pinturas
4.- COMPETENCIAS ESPECÍFICAS
Identificar los paradigmas y lenguajes de programación representativa.
5. RESULTADOS
El alumno con su investigación realizara un mapa conceptual de cada tema de la unidad 1 (utilizando hojas blancas y colores para resaltar la información relevante) que incluye los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos.
6. CONCLUSIONES
Al concluir esta práctica el alumno habrá comprendido la definición programación representativa así como los conceptos fundamentales de los estilos de programación, evaluación de expresiones, definición de funciones y tipos de datos, para su retroalimentación.
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).
Oxford University Press. 1998.
Práctica 2
PROGRAMACIÓN FUNCIONALObservaciones: Esta práctica incluye la práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la práctica # 3 “Desarrollo de programas funcionales con un grado creciente de complejidad, utilizando herramientas de programación funcional, que den solución a problemas reales.”.
Fecha de Actualización 17/09/2013 Página 9
Programación lógica y funcional [SCC-1019]
1.- OBJETIVO
Que el alumno realice programas funcionales con un grado creciente de complejidad utilizando herramientas de programación que den solución a problemas reales.
2.- MARCO TEÓRICO
PROGRAMACIÓN FUNCIONAL
¿Qué es la programación funcional? En pocas palabras, la programación funcional — una paradigma de programación en la cual las funciones son objetos. Como consecuencia se puede asignar funciones a las variables, pasarlas como argumentos a otras funciones, devolver como resultado de otras funciones, etc.
la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.
Los lenguajes de programación funcional, especialmente los que son puramente funcionales, han sido
enfatizados en el ambiente académico principalmente y no tanto en el desarrollo de software comercial.
Sin embargo, lenguajes de programación importantes tales como Scheme, Erlang, Rust, Objective
Caml y Haskell, han sido utilizados en aplicaciones comerciales e industriales por muchas
organizaciones. La programación funcional también es utilizada en la industria a través de lenguajes de
dominio específico como R (estadística), Mathematica (matemáticas simbólicas), J y K (análisis
financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico usados comúnmente
como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al
procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de
programación funcional.
La programación funcional también puede ser desarrollada en lenguajes que no están diseñados
específicamente para la programación funcional. En el caso de Perl, por ejemplo, que es un lenguaje de
programación imperativo, existe un libro que describe como aplicar conceptos de programación
funcional. JavaScript, uno de los lenguajes más ampliamente utilizados en la actualidad, también
incorpora capacidades de programación funcional. Python también incorpora particularidades de los
lenguajes funcionales como listas de comprensión y funciones de tratamiento de listas como
matemática de conjuntos.
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Sistema Operativo Windows Lenguaje de programación HASKELL Procesador de textos.
Fecha de Actualización 17/09/2013 Página 10
Programación lógica y funcional [SCC-1019]
4.- COMPETENCIAS ESPECÍFICAS
Conocer los principales puntos fuertes y debilidades del paradigma de programación funcional
Identificar los elementos de la programación funcional.
Aplicar la programación funcional en la resolución de problemas reales.
E identificar los conceptos claves de cada tema , incluyéndolos en un glosario de términos.
ACTIVIDAD:
Realizar un programa que reciba una lista que contenga varias palabras y reciba un parámetro referente a la longitud de cada línea. Al final debe regresar un párrafo que contenga las mismas palabras, pero justificadas en el párrafo.
Ejemplo
Párrafo 15 “hola soy la asignatura de programación lógica funcional y esta es la práctica”
Regresa
hola soy la
asignatura de
programación
lógica
funcional y
esta es la
practica
5. RESULTADOS El alumno podrá aplicar la programación funcional en la resolución de problemas reales realizando el programa del párrafo 15 entregando el código y la corrida en un reporte de la actividad.
6. CONCLUSIONES
Al concluir esta práctica el alumno habrá comprendido la definición programación funcional.
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).
Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical
(Intelligent Reasoning by Example). John Wiley. 1994.
Fecha de Actualización 17/09/2013 Página 11
Programación lógica y funcional [SCC-1019]
5. Haskell. The craft of functional programming. Cap 1- Cap 7
Práctica 3
BASE DE CONOCIMIENTOSObservaciones: Esta práctica incluye a la práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 4 “Diseñar y construir una conocimientos a través de la programación funcional”.
1.- OBJETIVO
Que el alumno aprenda a crear su base de conocimientos a través de la programación funcional.
Fecha de Actualización 17/09/2013 Página 12
Programación lógica y funcional [SCC-1019]
2.- MARCO TEÓRICO
El objetivo de una base de conocimientos es el de modelar y almacenar bajo forma digital un conjunto de conocimiento, ideas, conceptos o datos que permitan ser consultados o utilizados.
Existen varios métodos y programas para crear bases de conocimientos:
Wiki
CMS
Mindmap
Concept map
Sistema experto
El formato “foro”
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Sistema Operativo Windows Lenguaje de programación HASKELL Procesador de textos.
4.- COMPETENCIAS ESPECÍFICAS
Aplicar la programación funcional en la resolución de problemas reales.
5. RESULTADOS
El alumno construirá una base de conocimientos a través de la programación funcional
Fecha de Actualización 17/09/2013 Página 13
Programación lógica y funcional [SCC-1019]
6. CONCLUSIONES
El alumno aprenderá a crear su base de conocimientos a través de la programación funcional.
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).
Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical
(Intelligent Reasoning by Example). John Wiley. 1994.5. Haskell. The craft of functional programming. Cap 1- Cap 7
Fecha de Actualización 17/09/2013 Página 14
Programación lógica y funcional [SCC-1019]
Práctica 4
PROGRAMACIÓN LÓGICAObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 5 que dice “Desarrollo de programas lógicos con un grado creciente de complejidad, utilizando herramientas de programación lógica, que den solución a problemas reales”.
1.- OBJETIVO
Que el alumno aplique la programación lógica en la solución de problemas reales.
2.- MARCO TEÓRICO
La programación lógica es un intento de definir un estilo de programación alternativo al estilo convencional de von Neumann. En él, el programador describe indirectamente un proceso, definiendo un conjunto de asertos o condiciones, las cuales deben ser satisfechas en orden a que el proceso complete su tarea. El propio algoritmo resultante no está completamente bajo el control del programador, sino que el programador debe conocer el mecanismo de control subyacente para especificar un conjunto correcto de asertos.
La programación lógica implica forzosamente al uso de hechos y relaciones para representar la
información y al de deducciones para responder a consultas. Las consultas permiten conocer
informaciones sobre las relaciones. Estos dos aspectos reflejan una división de labores entre los
programadores y un lenguaje para la programación lógica. El programador proporciona las reglas y los
hechos, mientras que el lenguaje usa la deducción para dar respuesta a consultas. Esta división de
labores es usualmente representado por la ecuación: algoritmo = lógica + control
La lógica se refiere a los hechos y reglas que especifican lo que realiza el algoritmo, y el control se
refiere a cómo puede implementarse el algoritmo mediante la aplicación de reglas en un orden
particular. El programador proporciona la parte lógica y el lenguaje de programación proporciona el
control. Las consultas en los programas lógicos pueden usarse de dos formas: 1. Para determinar si un
determinado conjunto de valores pertenece a una relación, en las cuales el intérprete responde Si, en
caso de pertenecer la tupla, y Fracaso en caso de fracasar la deducción de una respuesta Si. 2. Para
determinar una instancia de valores para cada una de las variables presentes en la consulta, que pueda
deducirse a partir de las reglas y hechos del programa lógico.
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Fecha de Actualización 17/09/2013 Página 15
Programación lógica y funcional [SCC-1019]
Sistema Operativo Programa prolog. Procesador de Textos
4.- COMPETENCIAS ESPECÍFICAS
Conocer las ventajas y desventajas del paradigma de programación lógica.
Conocer las ventajas y desventajas de la programación lógica.
Aplicar la programación lógica en la resolución de problemas reales.
ACTIVIDAD: Realizar un programa en prolog que genere la base de conocimientos para el siguientes esquema de familiares
Y se responda a los siguientes preguntas:
Crear una regla para demostrar si clara es bisabuela de Jaime
Crear una regla para demostrar si Patricia es nieta de Tomas.
5. RESULTADOS
Elaborar un programa utilizando herramientas de la programación lógica.
Fecha de Actualización 17/09/2013 Página 16
Programación lógica y funcional [SCC-1019]
6. CONCLUSIONESEl alumno desarrollara programas lógicos con un grado creciente de complejidad, utilizando herramientas de programación lógica, que den solución a problemas reales
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach).
Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical
(Intelligent Reasoning by Example). John Wiley. 1994.5. Haskell. The craft of functional programming. Cap 1- Cap 7
Fecha de Actualización 17/09/2013 Página 17
Programación lógica y funcional [SCC-1019]
Práctica 5
HERRAMIENTAS DE SISTEMAS EXPERTOSObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, la Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 6 que dice “A partir de una situación real. Diseñar y construir una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica”.
1.- OBJETIVO
Que el alumno a partir de una situación real, diseñe y construya una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.
2.- MARCO TEÓRICO
Es una aplicación informática capaz de solucionar un conjunto de problemas que exigen un gran
conocimiento sobre un determinado tema. Un sistema experto es un conjunto de programas que,
sobre una base de conocimientos, posee información de uno o más expertos en un área
específica. Se puede entender como una rama de la inteligencia artificial, donde el poder de
resolución de un problema en un programa de computadora viene del conocimiento de un dominio
específico. Estos sistemas imitan las actividades de un humano para resolver problemas de
distinta índole (no necesariamente tiene que ser de inteligencia artificial). También se dice que un
SE se basa en el conocimiento declarativo (hechos sobre objetos, situaciones) y el conocimiento
de control (información sobre el seguimiento de una acción).
Para que un sistema experto sea herramienta efectiva, los usuarios deben interactuar de una
forma fácil, reuniendo dos capacidades para poder cumplirlo:
1. Explicar sus razonamientos o base del conocimiento : los sistemas expertos se deben
realizar siguiendo ciertas reglas o pasos comprensibles de manera que se pueda generar
la explicación para cada una de estas reglas, que a la vez se basan en hechos.
2. Adquisición de nuevos conocimientos o integrador del sistema : son mecanismos de
razonamiento que sirven para modificar los conocimientos anteriores. Sobre la base de lo
anterior se puede decir que los sistemas expertos son el producto de investigaciones en el
campo de la inteligencia artificial ya que ésta no intenta sustituir a los expertos humanos,
sino que se desea ayudarlos a realizar con más rapidez y eficacia todas las tareas que
realiza.
Fecha de Actualización 17/09/2013 Página 18
Programación lógica y funcional [SCC-1019]
Debido a esto en la actualidad se están mezclando diferentes técnicas o aplicaciones
aprovechando las ventajas que cada una de estas ofrece para poder tener empresas más
seguras. Un ejemplo de estas técnicas sería los agentes que tienen la capacidad de negociar y
navegar a través de recursos en línea; y es por eso que en la actualidad juega un papel
preponderante en los sistemas expertos.
La Base de Conocimientos (BC).
Son el conjunto de reglas que permiten representar los conocimientos del dominio de experto donde
cada regla aisladamente tiene significado propio. Normalmente los conocimientos son de tipo
declarativo por lo cual la BC casi siempre es una descripción de los conocimientos del experto, por lo
tanto requiere de algún mecanismo que obtenga las inferencias adecuadas para resolver el problema,
alguien que seleccione las reglas y las vaya ejecutando, ese alguien es el motor de inferencias.
El Motor de Inferencias (MI) es un programa de control cuya función es seleccionar las reglas posibles a
satisfacer el problema, para ello se vale de ciertas estrategias de control sistemáticas o de estrategias
heurísticas.
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Sistema Operativo Procesador de Textos Programa prolog.
4.- COMPETENCIAS ESPECÍFICAS
Identificar los elementos de la programación lógica
Elaborar una base de conocimientos para definir los animales existentes en un zoológico.
5. RESULTADOS
El alumno elaborara su base de conocimientos para un problema real.
6. CONCLUSIONES
El alumno a partir de una situación real, diseña y construye una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.
Fecha de Actualización 17/09/2013 Página 19
Programación lógica y funcional [SCC-1019]
Práctica 6
SISTEMA EXPERTOObservaciones: Esta práctica incluye a la práctica # 1 del temario de Programación lógica y funcional que dice “Elaboración de mapas conceptuales y/o mentales de los temas vistos”, la Práctica # 2 que dice “elaboración de glosario por unidad de conceptos clave de cada tema” y de la practica # 7 que dice “Construir un sistema experto a partir de la base de conocimiento creada en programación lógica”.
1.- OBJETIVO
Que el alumno construya un sistema experto a partir de la base de conocimiento creada en programación lógica
2.- MARCO TEÓRICO
Los sistemas expertos son llamados así porque emulan el razonamiento de un experto en un dominio concreto y en ocasiones son usados por éstos. Con los sistemas expertos se busca una mejor calidad y rapidez en las respuestas dando así lugar a una mejora de la productividad del experto.
Los Sistemas Expertos, rama de la Inteligencia Artificial, son sistemas informáticos que simulan el proceso de aprendizaje, de memorización, de razonamiento, de comunicación y de acción en consecuencia de un experto humano en cualquier rama de la ciencia.
Estas características le permiten almacenar datos y conocimiento, sacar conclusiones lógicas, tomar decisiones, aprender de la experiencia y los datos existentes, comunicarse con expertos humanos, explicar el por qué de las decisiones tomadas y realizar acciones como consecuencia de todo lo anterior.
Técnicamente un sistema experto, contiene una base de conocimientos que incluye la experiencia acumulada de expertos humanos y un conjunto de reglas para aplicar ésta base de conocimientos en una situación particular que se le indica al programa. Cada vez el sistema se mejora con adiciones a la base de conocimientos o al conjunto de reglas.
¿Por qué utilizar un Sistema Experto?
1. Con la ayuda de un Sistema Experto, personas con poca experiencia pueden resolver problemas que requieren un "conocimiento formal especializado".
2. Los Sistemas Expertos pueden obtener conclusiones y resolver problemas de forma más rápida que los expertos humanos.
3. Los Sistemas Expertos razonan pero en base a un conocimiento adquirido y no tienen sitio para la subjetividad.
4. Se ha comprobado que los Sistemas Expertos tienen al menos, la misma competencia que un especialista humano.
5. El uso de Sistemas Expertos es especialmente recomendado en las siguientes situaciones:o Cuando los expertos humanos en una determinada materia son escasos.
Fecha de Actualización 17/09/2013 Página 20
Programación lógica y funcional [SCC-1019]
o En situaciones complejas, donde la subjetividad humana puede llevar a conclusiones erróneas.
o Cuando es muy elevado el volumen de datos que ha de considerarse para obtener una conclusión.
Aplicaciones
Medicina, Economía, Psicología, Finanzas, Derecho y prácticamente todas las ramas del conocimiento.
3.- MATERIAL, EQUIPO, REACTIVO o SOTFWARE A UTILIZAR
Sistema Operativo Procesador de Textos Programa prolog
4.- COMPETENCIAS ESPECÍFICAS
Desarrollar mediante el siguiente esquema un sistema experto:
Fecha de Actualización 17/09/2013 Página 21
Programación lógica y funcional [SCC-1019]
Región
Tipo de Comida
Potaje
Ingredientes
Enfermedades
Sistema Humano Atacado
Especialista
Costa, Sierra y Selva
Entrada, Plato de Fondo, Sopa, Postre y Bebidas
Nombre Específico
Nombre de los Ingredientes
Nombre de la enfermedad
Por ejemplo: Sistema Digestivo, etc.
Por ejemplo: Gastroenterólogo, etc.
Hospital Por ejemplo: Dos de Mayo
Fecha de Actualización 17/09/2013 Página 22
Programación lógica y funcional [SCC-1019]
5. RESULTADOS
El alumno aprenderá a realizar sistemas expertos con programación lógica , mediante la creación de un sistema experto de comidas curativas.
6. CONCLUSIONES
El alumno a partir de una situación real, diseñe y construya una base de conocimiento a través de herramientas de sistemas expertos basados en programación lógica.
7.- BIBLIOGRAFÍA
1. NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001.2. POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.3. BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.4. MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical (Intelligent Reasoning by Example). John Wiley. 1994.
Fecha de Actualización 17/09/2013 Página 23
Programación lógica y funcional [SCC-1019]
8.- LISTA DE MATERIAL, EQUIPO O REACTIVO A UTILIZAR
FOLIO NOMBRE DEL MATERIAL, EQUIPO O REACTIVO CANT. UNIDAD
1 Sistema operativo Windows
2 Procesador de textos Word
3 Programa haskell
4 Programa prolog
9.- LISTA DE BIBLIOGRAFÍA REQUERIDA
FOLIO BIBLIOGRAFIA CANT
1 NILSSON, N. J. Inteligencia Artificial. Una nueva síntesis. Mc Graw Hill. 2001. 1
2POOLE, D., Mackworth, A. y Goebel, R. Computational Intelligence (A Logical Approach). Oxford University Press. 1998.
1
3BRATKO, I. Prolog Programming for Artificial Intelligence (2nd ed.). Addison Wesley. 1990.
1
4MITCHELL, T. M. Machine Learning. Mc Graw Hill. 1997. 5. FLACH, P. Simply Logical (Intelligent Reasoning by Example). John Wiley. 1994.
1
5
6
Fecha de Actualización 17/09/2013 Página 24
Programación lógica y funcional [SCC-1019]
10.- CONTROL DE CAMBIOS DEL MANUAL DE PRÁCTICAS
DATOS GENERALESFECHA DE
ACTUALIZACION ELABORÓ Y/O ACTUALIZÓ DESCRIPCIÓN DE LA ACTUALIZACIÓN
17/09/2013 MSC. VIANNEY MORALES ZAMORA Se actualizo el temario al nuevo plan
Fecha de Actualización 17/09/2013 Página 25