Escolar Documentos
Profissional Documentos
Cultura Documentos
Irving Gngora
CONTENIDO
Unidad I: Introduccin a la Inteligencia Artificial
1.1 Introduccin a la Inteligencia Artificial
1.2 Inteligencia, Cerebro Humano y el Conocimiento
1.3 Qu es Inteligencia Artificial? Definiciones.
1.4 Historia de la Inteligencia Artificial
1.5 Inteligencia Artificial y los Modelos Computacionales
Computacin de IA
Diferencias con un programa convencional de cmputo.
1.5 Problemas y Tcnicas de la Inteligencia Artificial
1.6 Estado del Arte de la Inteligencia Artificial (Aplicaciones y Tendencias)
Unidad II: Formas de Representacin del Conocimiento
2.1 Definicin
Representaciones y Correspondencia
2.2 Clasificacin de las Formas de Representacin del Conocimiento
2.2.1 Declarativas
Razonamiento Lgico
Tipos Bsicos de Razonamientos Lgicos
Razonamiento Deductivo:
Razonamiento Inductivo.
2.2.1.1 Lgica Proposicional
2.2.1.2 Lgica de Predicados (Lgica de Primer Orden, Clculo de Predicados)
2.2.1.3 Redes Semnticas (RS)
2.2.1.4 Frames (Marcos o Armazones)
Ejemplo de Ranura:
2.2.1.5 Guiones (SCRIPTS)
2.2.2 Procedurales
2.2.2.1 Strips (Sistemas de Planificacin)
2.2.2.2 Reglas de Produccin
Partes de un Sistema Basado en Reglas:
Ejemplo de Aplicacin de las Reglas de Produccin:
2.3 Representacin con Incertidumbre
Lgicas Modales y los Posibles Mundos
2.4 Ejercicios Propuestos
Unidad III: Mtodos de Solucin de Problemas
3.1 Introduccin
3.2 Como Solucionar el Problema
3.2.1 Definicin del Problema
3.2.1.1 Espacio de Bsqueda
3.2.1.2 Tipos de Espacio de Espacios de Bsqueda
3.2.1.3 Representacin del Espacio de Bsqueda
3.2.2 Anlisis de Problema
3.2.2.1 Tratar de Descomponer el Problema
3.2.2.2 Considerar si se Puede Ignorar o Deshacer Pasos Para la Solucin
3.2.2.3 Se Puede Predecir el Universo del Problema?
3.2.2.4 La Mejor Solucin o Cualquier Solucin Para el Problema?
3.2.2.5 Es Consistente el Conocimiento Disponible Para Resolver el Problema?
3.2.2.6 El Papel que Juega el Conocimiento
3.2.2.7 Considerar si se Necesita la Intervencin de Una Persona
3.2.3 Aplicar la Mejor Tcnica de IA Para Resolver el Problema
3.3 Mtodos de Bsqueda Ciega
3.3.1 Primero a lo Ancho
3.3.2 Primero en Profundidad
3.2.3 Bsqueda en Arboles AND/OR (Y/O)
3.3.4 Encadenamiento Hacia delante (Forward Chaining enfoque guiado por datos)
3.3.5 Encadenamiento Hacia Atrs (Backward Chaining enfoque guiado por objetivos)
Ejemplo de Bsqueda: Mundo de los Bloques
3.4 Bsqueda Heurstica
3.4.1 Definicin de Heurstica
Pgina 1 de 119
Pgina 2 de 119
Pgina 3 de 119
Pgina 4 de 119
Discuta: Los animales no son inteligentes solo hacen lo que sus genes les indican. Es
esta ultima afirmacin verdadera e implica la primera?
Pgina 5 de 119
Segn Schildlt:
Pgina 6 de 119
Pgina 7 de 119
Los trabajos iniciales dentro del campo de la I.A. estuvieron dirigidos a emular el
proceso del pensamiento humano. Resultados relevantes fueron el intento de Newell,
Shaw y Simon de crear un Solucionador General de Problemas (GPS), as como el
xito alcanzado a fines de la dcada de los 50 e inicios de los aos 60 por Rosemblatt
al crear los Perceptrons. En ambos casos, otros autores se encargaron de demostrar las
limitaciones de ambos intentos.
En 1973 Gdel demostr que era imposible la matematizacin del proceso de
razonamiento lo cual anulaba la posibilidad de crear, al menos en el presente, un
GPS como el pensado por Newell, Shaw y Simon. Minsky y Papert en los aos 60
mostraron las serias limitaciones del funcionamiento de un perceptron simple a travs
del problema clsico del XOR. Es por esto que a esta etapa se le denomin oscura.
Sin embargo, en Amrica los trabajos en I.A. siguieron otra direccin. Se planteaba
que, si bien no exista una teora universal de la inteligencia, s era posible crear
inteligencias especializadas. En esta poca se comenz a dar ms importancia al papel
del conocimiento que a los mtodos potentes de solucin de problemas, todo lo cual
llev a la reactivacin de los trabajos en este campo.
La I.A. cobr vigor en la dcada de los 80, debido al xito alcanzado por los Sistemas
Expertos, al proyecto japons de Quinta Generacin, el cual origin un gran avance
tecnolgico y al xito del uso de tcnicas de I.A. en problemas concretos como el
reconocimiento de patrones, la robtica, la visin, etc.
El desarrollo de la I.A. ha seguido dos lneas principales: la simblica y la subsimblica.
La primera se caracteriza por desarrollar modelos que describen, formalizan e
implementan aspectos sistematizables del conocimiento en forma explcita (Sistemas
Expertos, Razonamiento basado en casos, etc). La otra se basa en los enfoques no
representacionales de la I.A. (R.N.A., algoritmos genticos y sistemas difusos). El
clculo subsimblico se basa en el uso de representaciones analgicas, el conocimiento
se reparte entre diversas componentes del sistema que estn enlazadas y que pueden
funcionar en paralelo.
Finalmente es necesario mencionar uno de los problemas fundamentales que enfrenta
actualmente la I.A.: el problema del aprendizaje automatizado, para el que no existe
actualmente una solucin eficiente.
Pgina 8 de 119
Pgina 9 de 119
Computacin de IA
El programa de IA no est en un proceso algortmico, en su lugar, est basado en
representacin simblica y manipulacin. En la IA, un smbolo es una letra, palabra o
nmero que es utilizado para representar objetos, proceso y sus relaciones. Los objetos
pueden ser personas, cosas, ideas, conceptos, eventos o sentencias de hechos. Mediante
la utilizacin de smbolos es posible crear bases de conocimiento que caracterizan
hechos (estados), conceptos y relaciones entre ellos. Entonces son utilizados procesos
variados para manipular los smbolos y resolver el problema.
Los procesos son cualitativos en lugar de cuantitativos como es un algoritmo de
cmputo convencional. Virtualmente todas las computadoras son algortmicas en
sus operaciones, basados en el concepto de mquina secuencial sincrnica de Von
Neumann. La cuestin consiste en como es implementado el procesamiento simblico
en una mquina algortmica. El programa algortmico est escrito de tal forma como
para permitir representacin y manipulacin simblica.
Una vez que la base de conocimiento de hechos y su asociacin lgica este construida,
algn medio de utilizacin para resolver el problema debe de ser desarrollado,
para inferir con esta base de conocimiento, las tcnicas bsicas son la bsqueda y
coincidencia de patrones. Dando alguna informacin inicial, el programa de IA busca en
la base de conocimiento inquiriendo por una condicin especfica del patrn. Ella busca
una coincidencia que satisfaga los criterios impuestos para resolver el problema. La
computadora literalmente efecta una bsqueda hasta que ella puede encontrar la mejor
respuesta que puede encontrar basada en el conocimiento que ella tiene.
Mientras que la solucin del problema que se lleva a cabo no es un algoritmo, por
supuesto, son utilizados algoritmos para implementar el proceso de bsqueda (ver
ilustracin 3).
La mayora de los sistemas de IA actualmente incluyen dos partes bsicas: una base
de conocimiento y un mecanismo de inferencia. La base de conocimiento contiene los
hechos y relaciones entre los objetos en el dominio seleccionado y constituye la fuente
de inteligencia del sistema, la que es utilizada por el mecanismo de inferencia para
arribar a ciertas conclusiones.
Pgina 10 de 119
Pgina 11 de 119
representar cada situacin individual, sino que se agrupen las situaciones que
compartan propiedades importantes. Si no tiene esta caracterstica se necesitara
ms espacio del disponible y ms tiempo del que tenemos para mantenerlo
actualizado.
Pueda ser comprendido por los especialistas que lo proporcionan.
Deba ser modificable fcilmente.
Pueda ser usado en muchas situaciones diversas, incluso si no es total-mente
preciso o completo.
Pueda ser usado para extenderse a s mismo.
Los lenguajes bsicos para la implementacin de las tcnicas de I.A. son LISP y
PROLOG por las facilidades que brindan para el tratamiento simblico, entre otras
razones. LISP permite disear las estructuras de datos y los algoritmos que los
manejan de una manera muy eficiente. PROLOG, a su vez, tiene muy buen poder
expresivo, permitiendo una formulacin bastante natural y directa en la solucin de
muchos problemas. En esto, los lenguajes procedurales son muy malos. No se debe
confundir las tcnicas de I.A. con software de I.A. Se deben diferenciar dos aspectos
fundamentales:
Es posible resolver problemas de I.A. sin usar tcnicas de I.A., aunque las soluciones no
son muy buenas. A su vez, es posible aplicar tcnicas de I.A. a problemas que no son de
I.A.
Pgina 12 de 119
Mecatrnica
Bioinformtica.
BIOINFORMATICA
Es la ciencia que utiliza una combinacin de las tecnologas de la computacin, las
ciencias de la informacin, la biologa terica y el conocimiento biolgico, para
coleccionar, almacenar, analizar, relacionar y modelar datos biolgicos.
Significa un Cambio de paradigma: de Buscar datos e Interpretar datos
2.1 Definicin
Llamamos Forma de Representacin del Conocimiento (F.R.C.) a la notacin usada
para representar el mismo, es decir la manera en que se almacena.
El objetivo de la representacin del conocimiento es expresar ste en forma manejable
por la computadora. Un lenguaje para la representacin del conocimiento consta de dos
aspectos:
Sintaxis: Explica las posibles configuraciones mediante las cuales se forman las
oraciones.
Pgina 14 de 119
Representaciones y Correspondencia
Un componente clave de cualquier aplicacin de IA es el conocimiento, considerado
como la comprensin de algn rea especfica que se obtiene a travs de la experiencia
o la educacin.
Para resolver los problemas complejos a los que se enfrenta la IA, es necesario disponer
tanto de una cantidad de conocimiento como de una serie mecanismos que permitan
manipularlo con el fin de obtener soluciones a nuevos problemas.
Hay una caracterstica que est presente en todas las representaciones, el hecho de que
estamos manejando dos tipos de entidades.
Hechos: Verdades en un cierto mundo. Es aquello que queremos representar.
Representaciones: de los hechos en un determinado formalismo. Estas son las
entidades que realmente seremos capaces de manipular.
Estas dos entidades se pueden clasificar en dos niveles distintos:
Pgina 15 de 119
Representacin
Pgina 16 de 119
Pueden representar el mismo hecho de que al menos los perros tienen una cola. Por otra
parte, la primera puede representar todos los perros tiene una cola o bien que cada
perro tiene varias colas. La segunda que todos los perros tienen al menos una cola
o bien que hay una cola comn que todos los perros tienen.
2.2.1 Declarativas
Una representacin declarativa es aquella en la que el conocimiento est especificado,
pero la manera en que dicho conocimiento debe ser utilizado no viene dado. En
el mtodo declarativo se considera que el control de bsqueda del conocimiento
se encuentra completamente separado de las propias reglas. Para utilizar una
representacin declarativa se debe aumentar sta con un programa que especifique lo
que debe hacerse con el conocimiento y de que modo debe hacerse. Es utilizado para
representar hechos y afirmaciones. Por ejemplo, un conjunto de aserciones lgicas, se
puede combinar con un demostrador de teoremas por resolucin para dar lugar a un
programa completo de resolucin de problemas.
Las F.R.C. declarativas tienen las siguientes ventajas:
Cada hecho slo necesita almacenarse una vez, sin importar el nmero de
maneras diferentes en que pueda usarse.
Es fcil aadir nuevos hechos al sistema sin cambiar los otros hechos ni los
procedimientos pequeos.
Razonamiento Lgico
El lenguaje de la lgica es uno de los mecanismos concretos de la representacin del
conocimiento. Quizs sea la RPC ms antigua. Es considerada una subdivisin de la
filosofa. El aspecto ms atractivo del formalismo lgico es que proporciona de una
Pgina 17 de 119
Razonamiento Deductivo:
Cuando la premisa general es utilizada para obtener una inferencia especfica, el
proceso es llamado razonamiento deductivo o deduccin. El razonar va desde un
principio general a una conclusin especfica. El proceso deductivo generalmente
comienza con una declaracin de premisas e inferencias. El proceso deductivo
generalmente consiste en tres partes:
Razonamiento Inductivo.
Pgina 18 de 119
Las conclusiones pueden cambiar si se describen nuevos datos. Siempre habr alguna
incertidumbre en la conclusin al menos que todos los hechos posibles estn incluidos
en las premisas, y esto es prcticamente imposible. Como resultado, la salida de un
proceso de razonamiento inductivo contendr siempre alguna medida de incertidumbre.
Sin embargo, esta incertidumbre ser reducida segn ms hechos o premisas sean
usados en el proceso de razonamiento.
Pgina 19 de 119
siglos..
Relaciones: hermano de, mayor que, dentro de , parte de, de color, sucedi luego
de, es el dueo de
Propiedades: rojo, redondo, de varios pisos, falso, lo mejor.
Funciones: padre de, mejor amigo de, tercer tiempo de, uno ms que.
Sintaxis:
PREDICATE (Individuo [objeto]1, Individuo [objeto]2).
Por ejemplo la proposicin: el carro est en el garaje. Se puede establecer como:
ADENTRO(CARRO,GARAJE)
SE_PARECE(JUAN, MARIA)
Pgina 21 de 119
Ramn = Z
Los cuantificadores son la va exacta para determinar cuando las cosas son ciertas y bajo
que condiciones todas las veces o exactamente algunas de las veces.
En la lgica de predicados podemos representar los hechos del mundo real como
declaraciones escritas como frmulas bien formadas. Veamos un ejemplo.
Sultn es un perro.
perro(Sultn)
Los humanos son hombres o mujeres.
(x) [humano(x) (hombre(x) mujer(x))]
Todos los hombres tienen una madre.
(x) (y) madre(y,x)
Unificacin y LIFTING
La seccin anterior describe cmo se comprenda la lgica de primer orden hasta
principios de 1960. Pero un ojo observador (y ciertamente para los expertos en lgica
de ese tiempo) hubieran notado que el acercamiento a la proposionalizacin es ms
bien ineficiente. Por ejemplo, dada la bsqueda (pregunta) Demonio(x) y la base de
conocimiento en ecuacin, parece perverso generar oraciones como Rey(Ricardo) ^
Avaro(Ricardo) Demonio(Ricardo).
Ciertamente, la inferencia de Demonio(Juan) a partir de las oraciones
Pgina 22 de 119
Demonio(x)
Parece obvio para un ser humano. Mostraremos como hacerla completamente obvio
para una computadora
Una regla de inferencia de primer orden
La inferencia de que Juan es demonio trabaja de esta manera: encuentra algn x tal que
x es un rey y x es avaro, y entonces infiere que x es demonio. De manera ms general, si
hay alguna substitucin que haga la premisa de la implicacin idntica a las oraciones
que ya estn en la base del conocimiento, entonces podemos assert (afirmar, declarar)
la conclusin de la implicacin, despus de aplicar . En este caso, la substitucin {x/
Juan) alcanza ese objetivo.
Podemos hacer que el paso de la inferencia haga an ms trabajo. Supongamos que en
ves de saber avaro(Juan), sabemos que todo el mundo es avaro:
y Avaro(y).
Entonces nos gustara an poder concluir que Demonio(Juan), porque sabemos que Juan
es un Rey(nombre) y Juan es avaro (porque todo mundo es avaro). Lo que necesitamos
para que esto trabaje es una substitucin para ambas las variables en la oracin de
implicacin y para las variables en las oraciones a ser igualadas. En este caso, aplicando
la substitucin {x / Juan, y / Juan} a las premisas Rey(x) y Avaro(x) y las oraciones
de la base de conocimiento Rey(Juan) y Avaro(y) las harn idnticas. Por lo tanto,
podemos inferir la conclusin de la implicacin.
Este proceso de inferencia puede ser capturado como una simple regla de inferencia que
llamamos Modus Ponens Generalizado.
El Modus Ponens Generalizado es una versin elevada (lifted) eleva el Modus Ponens
de la lgica proposicional a la lgica de primer orden.
Unificacin
Reglas de inferencia elevadas requieren encontrar substituciones que hacen que
diferentes expresiones lgicas luzcan idnticas. Este proceso es llamado unificacin
y es un componente de todo algoritmo de inferencia de primer orden. El algoritmo de
unificacin toma dos oraciones y retorna un unificador para ellas si existe alguno:
Unificar(p, q) = donde Subst(, p) = Subst(, q) .
Veamos algunos ejemplos de como Unify (unificar) debe comportarse. Supongamos
que tenemos una bsqueda Conoce(Juan, x): a quien conoce Juan? Algunas respuestas
a esta bsqueda se pueden hallar encontrando todas las oraciones en la base de
conocimiento que unifica con Conoce(Juan, x). Veamos los resultados de la unificacin
con cuatro diferentes oraciones en la base de datos
UNIFY (Conoce(Juan, x), Conoce(Juan, Jane)) = {x/Jane}
UNIFY (Conoce(Juan, x), Conoce(y, Bill)) = {x/Bill, y/Juan}
Pgina 23 de 119
Un rbol es una estructura grfica de una jerarqua. Este es simplemente una forma de
ilustrar la lista y otra jerarqua del conocimiento. Una lista se muestra en la siguiente
figura. Esta consiste de nodos que corresponden a nombres de la lista y elementos.
Los nodos son conectados por lneas llamadas arcos que muestran la relacin entre los
nodos.
Pgina 24 de 119
Herencia
Para soportar la representacin flexible del conocimiento acerca del mundo es necesario
permitir que la jerarqua sea un grafo acclico dirigido. Se sabe que estos grafos
acclicos son adecuados, ya que se corresponde con la relacin subconjunto.
La herencia permite nuevas clases que heredan las propiedades, tanto de datos como
de los miembros de las funciones de una clase previamente definida. Las nuevas
propiedades heredadas se colocan encima de las propiedades heredadas, lo cual puede
ahorrar a los programadores bastante cdigo.
Pgina 25 de 119
Pgina 26 de 119
Pgina 27 de 119
Pgina 28 de 119
DEMONS: Contiene procedimientos que tienen que ser ejecutados cuando cambia el
valor almacenado en VALUE.
DEFAULT: Contiene un valor inicial, por omisin o valores comnmente usados para
la faceta VALUE.
RESTRICTIONS: Contiene un conjunto de expresiones lgicas que tienen que ser
verdaderas para el valor almacenado en VALUE.
EXPLANATION: Almacena documentacin sobre el aspecto.
En general se puede plantear que la informacin almacenada usando como FRC las
armaduras presenta cuatro niveles de detalle:
Esta FRC es til para almacenar el conocimiento sobre los elementos de un dominio
de aplicacin que tiene una descripcin estereotipada o conocimientos basados en
caractersticas bien conocidas o experiencias; adems es fuerte para permitir que la
informacin comn sea almacenada de modo compartido para mltiples armaduras. Sin
Pgina 30 de 119
Ejemplo de Ranura:
Pitcher:
es-un : Jugador de Base Ball
Dominio :
Rango : Persona
Restriccin del Rango: experiencia en Base Ball como pitcher.
Right Field:
es-un : Jugador de Base Ball
Dominio:
Rango: Persona
Restriccin del rango: Experiencia en Base Ball
Jugador de Leon:
es-un: Jugador de Base Ball
Dominio:
Rango: Persona
Por omisin: Jugador de.
Entrenador:
Es-un: Jugador de Base Ball
Dominio:
Rango: Persona
Restriccin del Rango: Experiencia en Base Ball como entrenador
Por omisin: Entrenador de.
Jugador de Matagalpa:
Es-un: Jugador de Base Ball
Dominio:
Rango: Persona
Por omisin: Jugador de.
Jugador de Liga Nacional:
Es-un: Jugador de Base Ball
Dominio:
Rango: Persona
Por omisin: Jugador de.
Pgina 31 de 119
Ranura
Valor de Ranura
Pgina 32 de 119
Pgina 33 de 119
2.2.2 Procedurales
Como ventajas de las F.R.C. procedurales podemos sealar:
Es fcil representar el conocimiento sobre cmo hacer cosas.
Es fcil representar el conocimiento que no encaja bien en muchos esquemas
declarativos simples, como por ejemplo razonamientos por defecto y
probabilsticos.
Es fcil representar conocimiento heurstico de cmo realizar las cosas
eficientemente.
Pgina 34 de 119
B
C
DESPEJADO(x)
DEJAR(x)
Precondicin: SOSTENIDO(x)
Suprimir: SOSTENIDO(x)
Aadir: ENMESA(x) BRAZOVACIO
APILAR(x,y)
Precondicin: DESPEJADO(y) SOSTENIDO(x)
Suprimir: DESPEJADO(y) SOSTENIDO(x)
Aadir: ENCIMA(x,y) BRAZOVACIO
DESAPILAR(x,y)
Precondicin: ENCIMA(x,y) DESPEJADO(x)
Suprimir: ENCIMA(x,y) BRAZOVACIO
Aadir: SOSTENIDO(x) DESPEJADO(y)
BRAZOVACIO
Las tres componentes de cada regla STRIP se definen usando algunos predicados
bsicos. Para este universo los predicados bsicos ms frecuentes son:
DESPEJADO(x): el bloque x no tiene bloques encima.
Pgina 35 de 119
Pgina 36 de 119
Pgina 37 de 119
Pgina 38 de 119
Ntese que hay una hoja Terminal para cada paso en el rbol. En este tipo de rbol de la
base de conocimiento la respuesta del usuario est limitada a Si o No.
Una base de conocimientos muy ingenua, para identificar vehculo, podra ser la
siguiente:
Regla 1: SI tiene 2 ruedas
Y utiliza motor
ENTONCES es una motocicleta
Regla 2: SI tiene 2 ruedas
Y es movido por el hombre
ENTONCES es una bicicleta
Regla 3: SI tiene 4 ruedas
Y utiliza motor
Y pesa menos de 3500 Kgrs.
ENTONCES es un coche
Pgina 39 de 119
Pgina 40 de 119
Las lgicas modales son una extensin de la lgica clsica que nos permiten razonar
sobre posibilidades e incertidumbres. En otras palabras, usando una lgica modal,
nosotros podemos expresar idea tales como aunque el cielo es normalmente azul,
no siempre lo es (por ejemplo, en la noche). De esta manera podemos razonar sobre
mundos posibles. Un mundo posible es un universo o escenario que podra lgicamente
llegar a ser.
Las siguientes afirmaciones pueden no ser verdaderas en nuestro mundo, pero son
posibles, en el sentido de que no son ilgicas, y pueden ser verdad en un posible mundo:
Los rboles son todos azules.
Los perros pueden volar.
Las personas no tienen piernas.
Es posible que algunas de estas afirmaciones lleguen a ser verdad en el futuro, o quizs
fueron verdades en el pasado. Es tambin posible imaginar un universo alternativo en el
que estas afirmaciones son verdad ahora. Las siguiente afirmaciones, por otro lado, no
pueden ser verdad en ningn mundo posible:
A A
(x > y) (y > z) (z > x)
La primera de estas ilustra la ley del medio excluyente, que simplemente dice que un
hecho debe ser verdadero o falso: no puede ser al mismo tiempo verdadero y falso.
Tambin no puede darse el caso de que el hecho son sea verdadero ni falso. Esta es
una ley de la lgica clsica, y como se puede ver en otros estudios, es posible tener un
sistema lgico sin la ley del medio excluyente, en el cual un hecho puede ser ambos
verdadero y falso.
La segunda afirmacin no puede ser verdadera por las leyes de la matemtica.
No estamos interesados en mundos posibles en los que las leyes de la lgica y las
matemticas no se mantienen.
Una afirmacin que puede ser verdadera o falsa, dependiendo de la situacin, es
llamada contingente. Una afirmacin que siempre tiene que tener el mismo valor de
verdad, sin importar cul mundo posible consideremos, es no contingente. Por lo tanto,
las siguientes oraciones son contingentes:
AB
AB
Me gusta el helado.
El cielo es azul.
Las siguientes oraciones son no contingentes:
A A
A A
Si te gusta el helado, entonces te gusta este helado.
Pgina 41 de 119
Pgina 42 de 119
Objetivos:
Explicar la manera de realizar eficazmente la definicin y anlisis de un
problema en Inteligencia Artificial.
Analizar los tipos de representacin de problemas que requieran solucin.
Explicar las diferentes tcnicas de solucin de problemas.
3.1 Introduccin
Dado un sistema de I.A., donde el conocimiento est representado en una de las formas
estudiadas, se desea resolver un determinado problema de un dominio D bajo un
conjunto de ciertas condiciones C. Solucionar este problema significa encontrar una
solucin x X que satisfaga el conjunto de condiciones C, donde X es el conjunto de
todas las soluciones posibles a dicho problema.
Este proceso de solucionar un problema se realiza mediante una bsqueda en el espacio
X. Existen tres esquemas bsicos de solucin de problemas:
Esquema de produccin.
Esquema de reduccin.
Esquema de reduccin dbil.
rbol de bsqueda.
2. Aplicar la funcin de seleccin de movimientos a S0 y generar sus estados
descendientes.
3. Si el rbol de bsqueda contiene alguna solucin, o sea, si uno de los estados
generados es el estado final, entonces TERMINAR y EXITO.
4. Si no,
a. Aplicar la funcin de evaluacin a cada uno de los estados generados.
Pgina 44 de 119
FALLO.
c. Aplicar la funcin de seleccin de estados a los estados del rbol de
bsqueda para seleccionar uno de ellos.
d. Aplicar la funcin de seleccin de movimientos al estado seleccionado y
generar los nuevos estados aplicando dichos movimientos.
e. Ir al paso 3.
La construccin de la funcin de evaluacin de estados para un problema concreto
requiere del uso de conocimiento sobre ese problema. No siempre se dispone de dicho
conocimiento, por lo que no siempre es posible definir esta funcin. Esto trae por
consecuencia que los mtodos de bsqueda se dividan en dos tipos:
Pgina 45 de 119
Espacio de estado.
Espacio de reduccin de problemas.
rboles de juego.
Pgina 46 de 119
rboles de juego: Un caso especial de los rboles y/o son los rboles de juego, donde
participan dos jugadores. En un rbol de juego el nodo raz representa la posicin inicial
del juego y los nodos terminales representan posiciones del juego donde un jugador
gana, pierde o hace tablas. Los operadores son, precisamente, los movimientos legales
que pueden realizarse en dicho juego.
Pgina 48 de 119
Pgina 49 de 119
Pgina 51 de 119
Pgina 52 de 119
Pgina 53 de 119
Pgina 54 de 119
Generacin y prueba.
Escalada.
Bsqueda el primero es mejor.
Verificaciones de restricciones.
Anlisis de medios y fines.
Estado objetivo:
H
G
F
E
D
C
B
A
Figura 3.2: Planteamiento del problema de los bloques.
Con esta heurstica el valor del estado inicial de la figura 3.2 es 4 y el objetivo toma
valor 8. Por qu? Los bloques H hasta C estn sobre el bloque correcto, suman 6,
los bloques A y B no estn sobre el bloque correcto, suman 2, por lo tanto valor del
estado inicial = 6 2 = 4. En el estado final todos los bloques estn sobre el que les
corresponde.
Desde el estado inicial hay un solo movimiento posible: colocar el bloque A sobre
la mesa. El estado resultante tiene valor 6, por lo que es aceptado por el mtodo hillclimbing.
Pgina 56 de 119
Pgina 57 de 119
Pgina 58 de 119
Pgina 59 de 119
Pgina 60 de 119
2- Trazar la ejecucin del procedimiento generar del enfoque guiado por datos cuando
se intenta determinar si N es divisible por 2 dadas las cuatro reglas mostradas y la B.D.
inicial que contiene los hechos: N es divisible por 10 y N es divisible por 12.
Reglas:
R1: Si X es divisible por 12, entonces X es divisible por 6.
R2: Si X es divisible por 20, entonces X es divisible por 10.
Pgina 61 de 119
3- Trazar la ejecucin del procedimiento validar del enfoque guiado por objetivos
cuando se intenta determinar si N es divisible por 2 dadas las cuatro reglas mostradas
anteriormente y la B.D. inicial que contiene los hechos: N es divisible por 10 y N es
divisible por 12.
4. Represente el espacio de estados (usando un rbol de bsqueda). Recrralo usando
primero en profundidad y luego primero a lo ancho.
Pgina 62 de 119
Pgina 63 de 119
Experticidad Artificial
Permanente
Consistente pues no est relacionada con
el estado fsico o mental del S.E, ni
con la frecuencia de su uso
Fcil de transferir, bastara con copiar un
archivo en la computadora
Fcil de documentar
Relativamente barata, los S.E. son caros
para desarrollar pero de bajo costo para
operar
Puede trabajar las 24 horas del da
Sin inspiracin, se comporta de modo
rutinario
Se necesita ensearles todo el
conocimiento, pues las tcnicas de
aprendizaje automatizado no estn lo
suficientemente desarrolladas
Espectro estrecho, pues aslan el
problema
Conocimiento tcnico
Pgina 64 de 119
Podemos concluir que los S.E. no sustituyen a los expertos, sino ms bien ayudan a
las personas a progresar, participando en actividades ms desafiantes intelectualmente,
por lo que el conocimiento contenido en un S.E. es una nueva fuente prctica de
conocimientos.
Pgina 65 de 119
Pgina 67 de 119
Pgina 69 de 119
Pgina 70 de 119
Pgina 71 de 119
Directorio Base
El directorio donde el proyecto ser salvado (directorio de trabajo).
Seleccin de la Plataforma y Estrategia
Visual Prolog esta diseado para ser un sistema muy abierto, y acomoda muchas estrategias de
programacin. Hay tambin un gran nmero de combinaciones en las otras plataformas como
DOS, DOS extended code, NT y OS/2, usando BGI, SQL bindings etc. Adems, Visual Prolog
puede enlazar varios compiladores C con diferentes libreras y estrategias.
Plataformas
DOS
La seleccin DOS se usa para construir aplicaciones DOS en modo real. Esta configuracin
puede construir y compilar programas que son compatibles con los programas previos de PDC
Prolog y Turbo Prolog.
DOS Extendido
Esta configuracin require el uso de PharLap 286 DOS Extender. En este modo los programas
se pueden ejcutar bajo Dos en el modo protegido y usar toda la memoria extendida en la
computadora.
Windows 16
Esta configuracin se usa para construir aplicaciones que se ejecutan bajo la plataforma de
Microsoft Windows de 16 bits.
Windows 32
Con esta configuracin, es posible generar aplicaciones que se ejecutarn bajo Windows NT
r Windows 95. Las aplicaciones son verdaderos programas de 32 bits. La decisin de la UI va
desde VPI, EasyWin o Text mode.
OS/2 16 bit
Esta configuraci se usa para portar aplicaciones de PDC Prolog o Turbo Prolog modo texto
para que se ejcuten en el modo protegido de16 bits de OS/2.
OS/2 32 bits
Esta configuracin se usa para construir verdaderas aplicaciones de 32 bits para OS/2 PM.
EasyWin
Si existe una aplicacin pequea, que no necesita alguna interfase de usuario otra que lneas
de texto con pauses para el teclado, la seleccin de EasyWin puede ser usada. EasyWin trabaja
bajo Windows 16, Windows 32 y OS/2 PM. Las aplicaciones de EasyWin se ejecutan como un
Windows real o aplicacin PM, pero nicamente readchar, readln, write, writef y el predicado
Pgina 72 de 119
Modo Texto
Las aplicaciones de modo texto para DOS, DOS Extended 16 y OS/2 16 bits pueden usar el
sistema de ventanas de PDC Prolog. Para Windows 32 bits y OS/2 32 bits, el modo texto indica
aplicacionesetc.
que */
se ejecutan desde la lnea de comando del Sistema Operativo.
Generalmente,
un programa en Visual Prolog incluye cuatro secciones bsicas. Estas
subgoal_2,
subgoal_1,
BGI
son las secciones clauses, predicates, domains, y goal.
/* ...
Para las
selecciones
las plataformas
DOS ydeDOS
Extended 16enbits,
puede
usar laesinterfase
La
seccin de
clauses
es el corazn
un programa
visual
prolog;
donde
GOAL
grfica de
...
Borland.
*/
Esto
requiere
la
presencia
de
Borland
C++.
usted
pone los hechos y reglas sobre las que Visual Prolog operar tratando de
clusulas (reglas y hechos)
satisfacer
la meta del programa (goal). Una secuencia de clusulas definiendo un
/*
...
Otros
CLAUSES
predicado
se Otros,
llama no
un se
procedure
(procedimiento).
Cuando se...
selecciona
incluyen cabeceras
o bibliotecas predefinidas, en este caso es
*/
La
seccin
predicates
esque
donde
usted declara sus predicados y los dominios
responsabilidad
del usuario
lo
se necesite.
Declaraciones
de suplir
predicado
/* ...
(tipos)
de argumentos de sus predicados. (No necesita declarar los predicados
PREDICATES
... */
definidos
en de
Visual
5.2 Secciones
unProlog.)
Programa en PROLOG
Declaraciones de dominio
No
puede
usar
espacios,
el
menos,
asteriscos,
plecas,
u otro caracter no
Un programa
en Visual Prolog signo
tiene la
siguiente
estructura
bsica:
/* ...
DOMAINS
alfanumrico en los nombres de los predicados. Los caracteres validos para nombrar
en Visual Prolog consisten de lo siguiente:
Letras maysculas
: A, B, ... , Z
Letras minsculas
: a, b, ... , z
Dgitos
: 0, 1, ... , 9
Subguin
: _
La seccin domains es donde usted declara cualquier dominio que est usando
y que no es un dominio estndar de Visual Prolog. (No necesita declarar los
dominios estndar.)
La seccin goal es donde usted pone la meta de inicio para un programa en
visual prolog.
red = 4
slash_fill
Las
Global
Sections:
Visualusted
Prolog
le permite
que declare
algunos
dominios,
La seccin
es donde
declara
los hechos
que sern
incluidos
en la
= 4Facts
ega
= 3 dinmica
predicados
y clausulas
en su programa
como
global
(en
vez de local);
esto se
seccin
de
hechos.
La
palabra
clave
facts
es
sinnimo
de
database
pi
= 3.141592653
hace
(base disponiendo
de
datos). de secciones global domains, global predicates, y global
hundred
= (10*(10-1)+10)
two
=
2
facts
al inicio
de su programa.
La seccin
Constants
es donde usted declara las constantes en su programa de
one = 1
zero
Las
directivas
de
compilador:
Visual Prolog prove varias directives de
Visual
Prolog
= 0
CONSTANTS
compilador que se pueden aadir al programa para decirle al compilador que
trate el cdigo de una manera especfica.
La directiva include se usa para incluir en su programa algunos
procedimientos que se usan repetidamente. Por ejemplo puede crear
un archivo llamado miscosas.pro en el que declara predicados que usa
frecuentemente e incluirlos con : include miscosas.pro
Pgina 73 de 119
Lenguaje Natural:
Lgica de Predicado:
Un carro es divertido.
Divertido(carro).
roja(rosa).
Gusta(bill, Carro) if divertido(Carro).
En la sintaxis de prolog:
Legusta(maria, algo):- legusta(pedro, algo)
El smbolo :- se pronuncia if (si).
Una pregunta es la que se formula sobre los hechos. Por ejemplo:
Le gusta a Juan Mara?
Se traducira como:
Pgina 74 de 119
predicates
legusta()
nondeterm gusta(symbol,symbol)
clauses
legusta():-!.
gusta(maria,cocina).
gusta(maria, natacin)
gusta(pedro,futball).
gusta(marcos,baseball).
gusta(ernesto,natacion).
gusta(rosa,tenis).
gusta(roberto,Actividad):-gusta(marcos,Actividad).
goal
legusta(),gusta(roberto,baseball).
Ejectelo haciendo clic en la G o en test goal y obtendr la respuesta SI (Yes). Nota no
use Run para ejecutarlo.
Sugerencia: Cambie la meta con
Pgina 75 de 119
Pgina 76 de 119
clauses
juegan():-!.
nio(a).
nio(b).
nio(c).
juegan(X,Y):-nio(X),nio(Y),X<>Y,write(X," juega vs. ",Y),nl,fail.
goal
juegan(),juegan(S,T).
Dentro de una declaracin como la anterior a X y a Y se les conocen como parmetros
formales. El punto y coma (;) representa un OR lgico. La coma (,) representa un AND
lgico. "nl" representa un cdigo de "nueva linea". "fail" es un predicado que siempre
falla. Con esto se obliga a Prolog a buscar una nueva meta. Con ello se evita el tener que
poner un punto y coma (;) para pedir que se busque una nueva meta.
Programa: barbero
domains
persona = symbol
predicates
barbero()
persona(symbol)
nondeterm rasura(persona,persona)
clauses
barbero():-!.
persona(barbero).
rasura(juan,juan).
Pgina 77 de 119
Pgina 78 de 119
escribe()
escribir
nondeterm repeat
clauses
escribe():-!.
repeat.
repeat:-repeat.
escribir:-repeat,write("hola"),nl,fail.
goal
escribe(),escribir.
Ojo: Este programa implementa un lazo (bucle) que no tiene salida, salve todo lo
que tiene abierto en la comp., puede perderlo. Este proceso se estudia en detalle en la
siguiente seccin.
Programa: miembro
Domains
elem=symbol
lis_elem=symbol*
predicates
miembro()
nondeterm member(elem,lis_elem)
clauses
miembro():-!.
member(X,[X|_]).
member(X,[_|Y]):-member(X,Y).
goal
miembro(),member(a,[a,b,c]).
Este programa implementa la nica estructura de datos en Prolog, las listas. En la meta
le suplimos la lista de elementos, y le pedimos que nos diga si el primer elemento (a)
pertenece a la lista. Pruebe a preguntar si z pertenece a la lista.
Note que se usa el subguin en el programa, esto es lo que se conoce como variable
annima, se usa cuando el valor que tenga ese elemento no nos intersa.
Programa: imprimelista
Domains
lis_elem=symbol*
predicates
imprimelista()
Pgina 79 de 119
Pgina 80 de 119
Procesos Repetitivos
Los programadores en Pascal, BASIC, o C que comienzan a usar Visual Prolog, generalmente
se sienten acongojados al descubrir que el lenguaje no tiene sentencias FOR, WHILE, or
REPEAT. No hay una manera directa para expresar la iteracin. Prolog le permite solo dos tipos
de repeticin retroceso, en el que se busca soluciones mltiples en una pregunta sencilla, y
recursin, en la que un procedimiento se llama a s mismo.
Sucede que esta falta no restringe el poder del lenguaje Prolog. De hecho, Visual Prolog
reconoce un caso especial de recursin llamado recursin de cola y lo compila en un lazo
iterativo en lenguaje mquina. Esto significa que aunque la lgica se expresa recursivamente, el
cdigo compilado es tan eficiente como lo sera en Pascal o BASIC.
En esta seccin, exploramos el arte de escribir procesos repetitivos en Prolog. Como usted ver,
la recursin es en la mayora de los casosms clara, ms lgica, y con menos tendencia
a error que los lazos que usan los lenguajes convencionales. Antes de entrar en la recursin,
echemos otro vistazo al retroceso.
Retroceso Revisitado
Cuando un procedimiento ejecuta el retroceso, busca otra solucin a la meta que ya ha sido
satisfecha. Hace esto regresando a la ms reciente submeta que tiene una alternativa que no ha
sido probada, usando esa alternativa, y entonces contina hacia adelante de nuevo. Usted puede
explotar el retroceso para llevar a cabo los procesos repetitivos.
Ejemplo
Pgina 81 de 119
country(X),
entonces escribe X y
Ejercicio
Pgina 82 de 119
Ejercicio
No te quedes mirando figura que es lo incorrecto en este programa y arrglalo!
Ests en lo correcto el problema es que, de la manera que est escrito en el ltimo ejemplo,
print_countries fallar siempre, y print_countries_with_captions nunca ejecutar ninguna de
las submetas que le siguen. Como resultado, and maybe others, nunca ser impreso.
Para arreglar esto, todo lo que necesitas hacer es reestablecer la segunda clusula original para
print_countries:
print_countries.
Entonces escribe C.
Entonces checa si C es un retorno de carro.
Si lo es, has terminado. Si no, retrocede y busca otras alternativas. Ninguno ya sea write
tampoco readchar generan soluciones alternativas, as que retrocede todo el camino hasta
repeat, lo que siempre tiene soluciones alternativas.
Ahora el procesamiento puede seguir hacia delante de nuevo, leyendo otro carcter,
imprimindolo y checando si es un retorno de carro.
Note que C pierde su liga cuando usted retrocede ms all de readchar(C), lo que la ligaba. Este
tipo de desligado es vital cuando usted usa el retroceso para obtener soluciones alternativas para
una meta, pero hace difcil el uso del retroceso para cualquier otro propsito. La razn es que,
aunque el proceso del retroceso pueda repetir operaciones cualquier nmero de veces, no puede
recordar nada de una repeticin a la prxima. Todas las variables pierden su valor cuando
la ejecucin retrocede sobre los pasos que establecieron esos valores. No hay una manera
sencilla para que un lazo de repeticin mantenga un contador, un total, o cualquier otro registro
de su progreso.
Ejercicios
Modifique 2 de tal manera que, si el usuario presiona letras minsculas, sean mostradas
como letras maysculas.
Si usted quisiera jugar con E/S de archivos ahora, busque los predicados de Prolog
apropiados y escriba un programa que use un bucle repeat para copiar un archivo caracter
por caracter. (Refirase al captulo 12.)
Procedimientos Recursivos
Pgina 83 de 119
Pgina 84 de 119
nl,
count(0)
GOAL
count(NewN).
count
imprimir
enteros modifique
comenzando
contal0 manera
y nuncaque
termina.
los errores
de
Sin mirar
ms adelante,
4 de
no seaEventualmente,
recursivo de cola.
Cuantas
NewN = N+1,
redondeo
lo
harn
imprimir
nmeros
inexactos,
pero
nunca
parar.
iteraciones
puede ejecutar antes de que se le acabe la memoria? Pruebe y vea. (En plataformas
write('\r',N),
de count(N):32bit, esto tomar un largo considerable
tiempo, y*/lo ms seguro es que al programa
/* Program de
ch06e04.pro
CLAUSES
count(ulong)
Pgina 85 de 119
badcount1(NewX),
Otra
manera
de perder
la
una antes
alternativa
probar
en el
write("X
negative.").
Aqu,
la
de recursin
badcount2dese cola
llamaesa dejar
s misma
que la sin
segunda
clusula
NewX
=primera
X+1, isclusula
momento
que
se
hace
la
llamada
recursiva.
Entonces
un
marco
de
pila
debe
ser
salvado
X
<
0,
Cortes
al
Rescate
write('\r',X),
haya
sido probada.
De nuevo, el programa se queda sin memoria despus de un cierto
:- si la llamada recursiva falla, el procedimiento llamante pueda regresar y
debadcount2(X)
talbadcount2(NewX).
manera
que,
badcount1(X):La
llamada
recursiva
no es el
paso. garantizar
*/
nmero
de
llamadas.
Hasta
ahora,
usted
puede
pensar
queltimo
es imposible
que un procedimiento sea recursivo
NewX
= X+1,
probar
laque
alternativa.
Por ejemplo:
/* badcount1:
check(Z)
:Z
<
0.
Suponga
X
es
positiva,
como
normalmente
es.
Entonces,
cuando badcount3
se submeta
llama l
de
cola.
Despus
de
todo,
es
bastante
fcil
poner
la
llamada
recursiva
en laelltima
write('\r',X),
CLAUSES
Lacheck(Z)
alternativa
probada
no
necesita
estar
en una
clusula
separada
para
procedimiento
check(long)
:- no
Z:>=
0.
badcount2(X)
badcount3(NewX).
mismo,
la
primera
clusula
de
check
ha
tenido
xito,
pero
la
segunda
clusula
de
check
no
de badcount3(long)
larecursivo
ltima clusula,
pero cmo
garantizas
que noenhay
alternativas
en alguno
los otros
mismo.
Podra
bienque
ser
una alternativa
alguna
otra una
clusula
que
llamada.
Por
check(NewX),
ha
sido
probada
todava.
As
badcount3
tiene
que
preservar
copia
de
su
marco
de
badcount2(long)
procedimientos
llama?
NewX =que
X+1,
ejemplo:
badcount1(long)
pila enwrite('\r',X),
orden de regresar y probar la otra clusula de check si la llamada recursiva falla.
PREDICATES
Afortunadamente,
*/
badcount3(X)no
:-necesitas hacerlo. El corte !) te permite descartar cualquier alternativa
/* Program
*/ sistema significantemente.
de
memoria
y
posiblemente
reduciendo
el ch06e05.pro
desempeo
del
que pueda
existir. Necesitars usar
la directiva
del compilador
check_determ para guiarte en la
cutcount3(NewX).
se
ejecutarn
por
un
tiempo
considerable,
ocupando
grandes
cantidades
Dejando
como
estaba.
!, check
disposicin
de
los
cortes.
(Directivas
de
Compilador
son
descrita
en el captulo 17.)
/* En check(NewX),
arquitecturas de 32bit, como en UNIX '386, estos ejemplos
El
corte
significa
"quema aloscomo
puentes
de ti "suo,nombre
con ms
NewX
= X+1,
Puedes
arreglar
badcount3
siguedetrs
(cambiando
en precisin,
el proceso):"una vez que has
write('\r',X),
alcanzado
este punto, ignora clusulas alternativas para este predicado y soluciones alternas
:paracutcount3(X)
submetas anteriores
dentro de esta clusula." Precisamente eso es lo que necesitas. Porque
las alternativas son sacadas del juego, no se necesita marco de pila y la llamada recursiva puede
write("X
is negative.").
continuar
inexorablemente
hacia lo
adelante.
En un corte
se trata de decidir
que se quiere. Dispones un corte dondequiera que puedas
cutcount2(X)
:cutcount2(NewX).
ver
no-determinstico
y decir
Adelante!"
dondequiera
sea obvio
esas
Un cdigo
corte
igualmente
efectivo
en "!S!
badcount2,
al negar
y mover laque
prueba
de la que
segunda
NewXes=
X+1,
write('\r',X),
alternativas
no
son
de
inters.
En
la
versin
original
del
ejemplo
anterior,
que
trata
de
ilustrar
clusula a la primera:
X >= 0, !,
unacutcount2(X)
situacin
en :donde usted tiene que decidir algo sobre X (la prueba X < 0 en la segunda
clusula),
la
segunda
clusula tiene que retener una opcin debido a que el cdigo en la primera
check(Z):-Z < 0.
Desdichadamente,
los
cortes nolaayudaran
badcount1,
cuyay necesidad
de pila
clusula
no
prob
X.
Moviendo
prueba acon
la primera
clusula
negndola,de
se marcos
puede alcanzar
check(Z):-Z
>=
0.
cutcount3(NewX).
no
ver ycon
alternativas
no en
probadas.
El nico
modo
badcount1
seraXreunatiene
decisin
disponer
un corte
conformidad:
"Ahora
sde
quemejorar
no quiero
escribir que
es
!, que all
check(NewX),
arreglar
la computacin de tal manera que la llamada recursiva venga al final de la clusula.
negativa.".
NewX = X+1,
write('\r',X),
Lo mismo
aplica para cutcount3. El predicado check ilustra una situacin en donde quieres
cutcount3(X):Usando
Argumentos
como
Bucle
Clusula
llamada antes que
la llamada
recursiva.
*/
realizar
procesamiento
adicional
de Variables
X, basado
en de
su signo.
Sin embargo, el cdigo para check
Hay una alternativa no probada en una
es,
en
este
caso
para
ilustracin,
no-determinstico,
y
el
corte
de la llamada
l se tratay
/*
cutcount3:
Ahora
que ha dominado
la recursin de cola, Qu puededespus
hacer acerca
de las avariables
write("X
is negative.").
de
que
te
decidas.
Despus
de
la
llamada
a
check,
puedes
decir
"!S!
Adelante!".
Sin
embargo,
cutcount2(_):contadores?
Para responder esa pregunta, haremos un poco de traduccin de Pascal-a-Prolog,
cutcount2(NewX).
lo anterior
artificial con
probablemente
podra ser
correctode
para
check ser
NewX es
=que
Xligeramente
+estas
1, familiarizado
asumiendo
Pascal. En general,
losms
resultados
traducciones
write('\r',X),
determinstico:
directas
entre
lenguajes,
ya
sean
naturales
o
de
programacin,
son
pobres.
Lo
que
sigue no
X>=0,!,
check(Z)
:- Z < 0, ... %processing using Z
Y, como
la
prueba
en
la
segunda
clusula
de
check
es
la
negacin
perfecta
de
la
prueba
en la
est
tan
mal
y
sirve
como
una
ilustracin
razonable
de
programacin
estrictamente
imperativa
cutcount2(X)::- llamada
Z >= 0, recursiva.
!, ... % processing
using Z
al momento que check(Z)
se hace la
*/
primera,
check
puede
ser reescrito
como:
Hay
una
clusula
que
no
ha sido
probada
en
Prolog,
pero
no
debes
nunca
escribir
programas
Prolog
usando
traduccin
ciega
de
otro
check(Z) :- ... % processing using Z
/*
cutcount2:
Cuando
se
ejecuta
un
corte,
la
computadora
asume
que
no
hay
alternatives
sin
probart
y
no
crea
lenguaje.
Prolog es check(Z)
un lenguaje
y expresivo,using
y programas
escritos propiamente en
:- muy
Z >= poderoso
0, !, % processing
Z
CLAUSES
nondeterm
check(long)
un
marco
de pila.
El
programa
6 contiene versiones
modificadas
de badcount2
y badcount3:
Prolog
mostrarn
un
estilo
de
programacin
y
enfoque
del
problema
totalmente
diferente de lo
cutcount3(long)
quecutcount2(long)
programas en otros lenguajes hacen.
/* Program ch06e06.pro */
PREDICATES
descartar las clusulas no probadas. Estas versions son recursivas de cola. */
En
la seccin
"Recursin",
desarrollamos
unarreglados
procedimiento
recursivo
/* Muestra
como de
badcount2
y badcount3
pueden ser
aadiendo
cortespara
para calcular
FactN :=en
P;esta seccin desarrollaremos uno iterativo. En Pascal, as sera:
factoriales;
=
Si no
ests
familiarizado
conP*I;
Pascal, el :- es la asignacin, lee a como "llegue". Hay cuatro
forFactN
I :=
1 P.
to N a
doesto
P :=
Echemos
un
con ms detalles.
I >
N,vistazo
P :=
1;
variables
aqu.
N
es
el
nmero
cuyo
factorial ser calculado; FactN es el resultado del clculo;
factorial_aux(N,
FactN,
I, NewI,
P) :- NewP).
FactN,
factorial
tiene
como
argumentos
solemente
; sonensus
entradas
y salidas,
ILaesclusula
la factorial_aux(N,
variable
de
bucle,
contando
desde
1 hasta
N; y PNesy laFactN
variable
la que
el producto
se
NewI = I + 1,
desde
un Un
punto
vista e alguien
que loen
est
usando
paracombinar
un factorial.
Una
segunda
clusula,
acumula.
ms eficiente
Pascal
podra
FactN
y P,
pero en
Prolog
NewP
= programador
P *deI,
FactN
:=fastidiosamente
P;
/* Return
*/
<=
N,!,
factorial_aux(N,
FactN,
I,
P)
es la quederealiza
recursin;
susresult
cuatro
paga
elIend;
ser
ordenado.
El siguiente
programa
muestra
la ,traduccin
Prologlaconstruida
a partir
de esteargumentos
bucle whileson
en
factorial_aux(N,FactN,I,P):factorial_aux(N,FactN,1,1).
las
cuatro
variables
que
necesitan
ser
pasadas
de
cada
paso
al
siguiente.
As
que factorial
I := I+1
Pascal.
factorial(N,
El primer
paso P*I;
al FactN):traducir esto en Prolog es reemplazar el for
con unaPsimple
sentencia de bucle,
P :=invoca
/* Update
I */iniciales para I y
simplemente
factorial_aux, pasndole N y FactN, junto
con los and
valores
CLAUSES
/* factorial_aux(unsigned,long,unsigned,long)
Numbers
to become
large
declared
as longs.
/* are
Program
ch06e07.pro
*/ */
haciendo
lo likely
que le sucede
a I en
cada
paso
ms
explicito.
He
aqu el algoritmo refundido como
begin
P, de
esta Imanera:
while
<= N do
/* Loop test */
factorial(unsigned,long)
factorial_aux(N,
FactN, 1, 1).
un bucle
while:
De
manera
I y PFactN)
se inicializan.
Iesta
:=
1;
PREDICATES
factorial(N,
:P := 1;
/* Initialize P and I */
Cmo puede factorial "pasar" FactN? Ni siquiera tiene un valor todava! La respuesta
es que, conceptualmente, todo lo que Visual Prolog est haciendo es unificar una variable
llamada FactN en una clusula con una variable llamada FactN en otra clusula. La misma
cosa suceder dondequiera que factorial_aux pase FactN a l mismo como un argumento
en una llamada recursiva. Eventualmente, el ltimo FactN tendr un valor, y, cuando esto
suceda, todos los otros FactN's, que han sido unificados con el, tendrn el mismo valor.
Dijimos "conceptualmente" arriba, porque en realidad slo hay un FactN. Visual Prolog puede
Pgina 86 de 119
factorial_aux(N,
FactN,
I,Cuando
P) :- lo haga, el procesamiento deber unificar el valor actual
Eventualmente
I exceder
a N.
de P con FactN y parar la recursin. Esto se hace en la segunda clusula, que sera alcanzada
FactN
= P. I <= N en la primera clusula falle:
cuando
la prueba
Pero no
I >hay
N, necesidad para FactN = P de estar en un paso separado; la unificacin se puede
factorial_aux(N,
FactN,
I, P) :llevar
a cabo en la lista
de argumentos.
Poniendo el mismo nombre de variable en la posicin
ocupada por FactN y P requiere que los argumentos en estas posiciones sean igualados uno
con el otro. An ms, la prueba I > N es redundante desde que se ha probado lo opuesto en la
factorial(N, FactN, NewI, NewP).
primera
clusula.
Esto nos da la clusula final:
Cargue
NewP y= ejecute
P*NewI,este programa. Cuidadosamente observe el cdigo en la segunda clusula
= I+1, Toma
de NewI
factorial/4.
ventaja
del hecho de que la primera vez que se llama la variable
factorial_aux(_,
FactN,
_, FactN).
Ejercicios
factorial(N,FactN,I,P):contador
I
siempre
tiene
el
valor
1. Esto permite que el paso de la multiplicacin sea
factorial(N,FactN,N,FactN):-!.
factorial(N,FactN,1,1).
acarriado
con
la
variable
contador
NewI
incrementada
Lo
siguiente
es
una
versin
ms
elegante
de factorial. en vez de I, salvando una recursin/
10
1024
factorial(N,FactN):Hgalo que
pare
en
10 como
selamuestra
aqu.
...
...
iteracin.
Esto
es
reflejado
en
primera
clusula.
CLAUSES
/* factorial(unsigned,real,unsigned,real)
Nmeros que pueden llegar a ser
grandes ch06e08.pro
se declaran */
como reales. */
/* Program
4
16
Escribe
un
programa
recursivo
de
cola
que
acepte
un
nmero
como2 entrada
pueda
terminar en
factorial(unsigned,real)
3
8
Escribe un programa recursivo de cola que se comporte como
pero queyno
use retroceso.
PREDICATES
4
cualquiera de2 las dos maneras.
Comenzar multiplicando el nmero por s mismo una y otra vez
1 programa2recursivo que imprima una tabla de potencias de 2, como esto:
hastaEscribe
que yaun
sea alcance
------81 o alcance un nmero mayor que 100. Si alcanza 81, imprimir yes;
si excede 100,
N imprimir
2^Nno.
Pgina 87 de 119
Recorriendo un Arbol
Antes de entrar en la discusin de cmo crear rboles, primero considera lo que haras con un
rbol una vez que lo tengas. Una de las operaciones de rbol ms frecuente es la de examinar
todas las celdas y procesarlas de alguna manera, ya sea buscando un valor particular o
colectando todos los valores. Esto es conocido como recorrido del rbol. Un algoritmo bsico
para hacerlo es el siguiente:
Si el rbol est vaco, no hagas nada.
De otra manera, procesa el nodo actual, entonces recorre el subrbol izquierdo, luego recorre
el subrbol derecho.
Como el rbol mismo, el algoritmo es recursivo: trata los subrboles izquierdo y derecho
traverse(Z).
tree("Eleanor",
empty, empty)))).
exactamente
como
el rbol
original.
lo expresa
con dosque
clusulas,
una para
rboles
La bsqueda
de
primera
profundidad
esProlog
muy similar
a la manera
Prolog busca
una base
de
traverse(Y),
tree("Jim",
empty, empty),
vacos
y
una
para
no
vacos:
do something
with X,
tree("Melody",
conocimiento,
arreglando
las
clusula
en
un
rbol
y
siguiendo
cada
rama
hasta
que
una
pregunta
...
:- propsito
tree("Hazel",
empty,
empty)),
traverse(empty).
nothing
*/clusulas
Estotraverse(tree(X,
es
preferible
si Y,
el Z))
nico
es el de
expresar
unaderelacin
entre
los
falle.
Si lo
quisieras,
podras
describie
un del
rbolrbol
por medio
de /*
un do
conjunto
Prolog
mother_of("Michael",
"Hazel").
tree("Charles",
empty,
empty), Profundidad del rbol de la figura 6.1
Figura
6.2:
Recorrido
de
Primera
father_of("Michael",
"Charles").
individuos.
Pero
este
tipo
de
descripcim
hace
imposible
tratar
el
rbol
completo
como
una
como estas: tree("Michael",
mother_of("Cathy",
"Melody").
traverse(tree("Cathy",
nica
estructura de datos
compleja; como veras, las estructuras de datos complejas son muy
father_of("Cathy", "Michael").
GOAL
traverse(Right).
tiles porque
simplifican las tareas computacionales difciles.
Este algoritmo
de recorrido de rbol se conoce como bsqueda de primera profundidad (orden
traverse(Left),
write(Name,'\n'),
Eleanor
previo)
porque
llega tanfcilmente
lejos comoadaptar
sea posible
hacia debajo
ramaalguna
antes de
y
Creando
un rbol
Portraverse(tree(Name,Left,Right)):supuesto,
podras
el programa
para de
quecada
realice
otraretroceder
operacin
Jim
traverse(empty).
probar
otra
rama
(Figura
6.2).
Para
verlo
en
accin,
mira
el
programa
9,
el
cual
recorre
un
rbol
Melody
sobre
los elementos,
en
dees
imprimirlos.
CLAUSES
Una
manera
de crear
unvez
rbo
la devaescribir
una estructura
de las
functors
traverse(treetype)
ePREDICATES
imprime
todos
los elementos
que
encontrando.
Dado elanidada
rbol en
figurasy argumentos,
6.1 y 6.2, 9
Hazel
treetype
= tree(string,
treetype,
treetype)
; empty()
/* Program
ch06e09.pro
*/ embargo, Prolog crea rboles por
com
en el ejemplo
anterior (Programa
9).
Ordinariamente,
sin
Charles
imprime
DOMAINS
Michael
e imprimiendo
elemento
se va
computacin.
En cadacada
paso,
un rbolque
vaco
es encontrando
reemplazado */
por un rbol no vaco a travs del
Cathy
/*
Recorriendo un rbol con la bsqueda de primera profundidad
proceso
de unificacin de Prolog (igualacin de argumentos).
La creacin de un rbol de una celda a partir de una tem de dato es trivial:
create_tree(N, tree(N, empty, empty)).
Pgina 88 de 119
create_tree("Hazel",H),
insert_left(X,
tree(A, _, B),
tree(A,obtengan
X, B)).
ms
comn,
queregla
procedimiento
repetitivos
variables
invocndose
elloslomismos
Note
que
esta
no tiene
cuerpo
no hay*/pasos nuevas
explcitos
en la ejecucin.
Todo
que la
/* create_tree("Charles",Ch),
First create
some
one-cell
trees...
recursivamente,
ya
que
cada
invocacin
tiene
un
conjunto
distinto
de
variables.
computadora tiene que hacer es igualar los argumentos con cada otro en la posicin propia, y el
GOAL
insert_right(X,tree(A,B,_),tree(A,B,X)).
trabajo
est hecho.
insert_left(X,tree(A,_,B),tree(A,X,B)).
create_tree(A,tree(A,empty,empty)).
Suponga,
por ejemplo, que treetype,
quiere insertar
tree("Michael", empty, empty) como el subrbol
CLAUSES
insert_right(treetype,
treetype)
T)
Hasta
el
momento,
hemos
estado
usando
el hacer
rbol esto,
para solo
representar
entre sus
izaquierdo
de tree("Cathy",
empty). Para
ejecute larelaciones
meta
y Tinsert_left(treetype,treetype,treetype)
inmediatamente
toma los empty,
valores
tree("Cathy",
empty, empty),
create_tree(string,treetype)
elementos.
Por
supuesto,
esto
no
es
le
mejor
uso
de
los
rboles,
ya
que
la
clusulas
de
Prolog
insert_left(tree("Michael",
empty,
empty),
PREDICATES
tree("Cathy",
tree("Michael",
empty,
empty),
empty).
treetype
=eltree(string,treetype,treetype)
; empty()
pueden
hacer
mismo
trabajo.
Pero
los
rboles
tienen
otros
usos.
Esto
da un camino para construir rboles paso por paso. El programa 10 demuestra esta tcnica.
DOMAINS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
En
larboles
vidaC real,
los itemes
que van
a serpara
insertados
en el
rbol
venirque
la entrada
* dando
*de puedan
Los
proveen
una buena
manera
almacenar
tems
de podran
datos para
ser
externa.
*
dando
C
insert_right(A,
B,
C)
inserta
A
como
as
rbol
derecho
de
B
*
encontrados rpidamente. Un rbol construido para este propsito es llamado un rbol de
* dando
Program
ch06e10.pro
*/ de
bsqueda;
desde B)
el pone
puntoA de
del
usuario,
ladeestructura
no acarrea
* crea tree(A,
en vista
el /*
campo
de dato
un rbol
de rbol
una celda
* informacin
*
Procedimiento
sencillo
de
construccin
de
rbol
*
el rbol es solo una alternativa ms rpida que una lista o un arreglo. Recuerda
que, para
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
recorrer un rbol ordinario, miras en la celda actual y entonces a ambos de sus subrboles. Para
encontrar un tem particular, podras tener que mirar en cada celda del rbol entero.
El tiempo que toma buscar un arbol ordinario con N elementos es, en promedio,
proporcional a N.
Un rbol de bsqueda binaria se construye de tal manera que puedas predecir, mirando en
cada celda, en cual de sus subrboles estar un dado tem. Esto se hace definiendo una relacin
de ordenamiento de los itemes de datos, tal como un orden alfabtico o numrico. Los itemes
en el subrbol izquierdo preceden el item en la celda actual, en el rbol derecho, le siguen. La
Figura 6.3 muestra un ejemplo. Note que los mismos nombres, aadidos en un orden diferente,
producirn un rbol de alguna manera diferente. Note tambin que, aunque hay diez nombres en
al rbol, puedes encontrar cualquiera de ellos ena lo mscinco pasos.
Pgina 89 de 119
xpositive(symbol,symbol)
Disear una interfase
DATABASE
conocimiento
Que usted use tcnicas apropiadas para implementer su estructura con el
software apropiado.
Pero deber reconocer tambin las limitaciones impuestas por el software que
use, y por lo tanto, estar preparado para escribir una nota aclaratoria.
Para desarrollar un sistema experto en esta unidad estaremos usando ESTA, el sistema
de concha experta que es provista como parte del ambiente de desarrollo de Visual
Prolog.
Pgina 90 de 119
Al proveer una base del conocimiento para una rea de estudio, ESTA puede
ser usada para crear un sistema experto para dicha rea:
ESTA + Knowledge Base = Expert System
Cada base de conocimiento contiene reglas para un dominio especfico. Entonces,
para un sistema experto de diagnstico de una falla de carro, la base de conocimiento
contendr reglas relacionadas con los sntomas, tales como vibracin excesiva del motor
o falta de energa a alta velocidad como posibles causas. Similarmente, una base de
conocimiento para un sistema experto que aconseje sobre impuestos, puede contener
reglas relacionadas con el estado marital, plazos de hipoteca y la edad para la ganancia
(desde el punto de vista legal de pagar lo menos de impuesto posible) de tomar un
seguro de vida, ya que esto altera de manera beneficiosa la posicin en los impuestos
de una persona. Adems, dada una base de conocimiento sobre la clasificacin de las
plantas, un sistema experto podr ser construido para reconocer plantas.
ESTA tiene todos los recursos para escribir reglas que conformarn una base de
conocimiento. Adems, ESTA tiene una mquina de inferencia, que puede usar las
reglas en la base de conocimiento para determinar cual consejo se debe dar al usuario
del sistema experto o para iniciar otras acciones. ESTA tiene tambin la ventaja de
ofrecer al usuario del sistema experto la habilidad para obtener respuestas a preguntas
de como y porqu, etc.
La separacin de las partes de control e inferencia de la base de conocimiento es una
caracterstica fundamental de un sistema de concha experta:
ESTA es usada por el ingeniero del conocimiento para crear una base de conocimiento y
por el usuario del sistema experto para consultar una base de conocimiento.
Titulo
Secciones
Parmetros
Para hacer la representacin del conocimiento fcil de leer, los comentarios pueden
incluirse en cualquier parte.
5.6.2.1 Comentarios
Los comentarios deben comenzar con la secuencia /* y terminar con la secuencia */.
Los comentarios pueden ser de varias lneas.
Ejemplo
/* Estas dos lneas
Son mostradas de tal manera que los comentarios ms adelante son superfluos */
Pgina 91 de 119
5.6.2.2 Titulo
Para representar la base de conocimiento completa se puede usar un ttulo. El ttulo
puede ser ya sea texto o una figura.
Ejemplo
5.6.2.3 Secciones
El nivel ms alto de representacin del conocimiento en ESTA consiste de secciones.
La primera seccin en una base de conocimiento debe llamarse start. Una seccin
consiste de un nombre, una descripcin textual un nmero de prrafos. ESTA trata con
los prrafos en una seccin trabajando de arriba hacia abajo, un prrafo a la ves. Si un
prrafo contiene una expresin boleana entonces la expresin se evala primero. Si la
expresin es verdadera o el prrafo no contiene una expresin boleana del todo la
lista relevante de acciones son ejecutadas en el orden dado por el prrafo. Cuando una
consulta se inicia por va del comando Begin Consultation, ESTA comienza evaluando
la expresin boleana en los prrafos de la seccin de inicio (start).
Ejemplo
El siguiente ejemplo consiste de una base de conocimiento con una seccin y un
parmetro:
La Accin Do
La accin do sencillamente transfiere control a la seccin nueva. La accin do habilita
que se lleve a cabo la bsqueda orientada por datos entre secciones. En la literatura de
IA a esto se le llama encadenamiento directo.
Ejemplo
section start 'La primera seccin a ser ejecutada'
5.6.2.4 Parmetros
Los parmetros son como variables las que determinan el flujo de control entre
secciones. Cualquier parmetro consiste de un campo de declaracin y un campo de
tipo. Aun ms un nmero de campos adicionales, dependiendo del tipo de parmetro,
se puede usar para describir el parmetro. Un parmetro puede ser uno de los siguientes
cuatro parmetros:
Parmetro boleano
Parmetro de texto
Parmetro numrico
Parmetro de categora
Pgina 93 de 119
Parmetro Boolean
Los parmetros Boolean o parmetros lgicos son usados cuando un parmetro se
restringe a uno de los valores verdadero, falso o desconocido por ejemplo cuando
la respuesta a una pregunta debe ser Si, No o Desconocido. Por defecto ESTA genera
automticamente una caja de lista (listbox) correspondiendo a los valores: verdadero,
falso y desconocido. Debido al uso especial del valor desconocido y porque en algunas
expresiones boleanas el valor desconocido no es apropiado, es posible declarar una
listbox donde el desconocido se omita. Este tipo de declaracin de caja de lista se puede
hacer en un campo de opcin adjunto a un parmetro de categora.
Ejemplo
parameter gasolina_ok : 'hay gasolina en su carro'
type boolean
picture 'gasolina'
Pgina 94 de 119
Parmetro Text
Los parmetros de Text se usan para objetos de texto tales como el nombre de una
persona, un color favorito, etc.
Si el parmetro text obtiene su valor de la respuesta a una pregunta, ESTA mostrar una
caja de dilogo, con la pregunta y una caja de edicin para la respuesta.
Ejemplo
parameter nombre 'el nombre del usuario'
type text
Parmetro Number
Los parmetros number pueden tomar valores enteros o reales ESTA convierte
todos los valores a reales automticamente. Los parmetros number se pueden usar
para representar tasas de impuestos, tasas de inters, o el nmero de partes de un
componente, etc. Es posible declarar un rango, que ESTA validar en respuesta a una
asignacin del valor del parmetro.
Si el parametro number obtiene su valor de una pregunta, ESTA mostrar una caja de
dilogo, con la pregunta y una caja de edicin para la respuesta. El valor digitado sera
checado automticamente por ser un nmero. Si se especifica un rango de campo, el
valor ser validado si est dentro del rango.
Ejemplo
Parmetro Category
Un parmetro category se usa, cuando se sabe que debe tomar un conjunto de valores
predefinidos. Por ejemplo, se puede decidir que el color debe ser rojo, verde, azul, o
Pgina 95 de 119
Pgina 96 de 119
Pgina 97 de 119
fecha en la ventana.
4. Cierre la ventana, le preguntar si
etiquetada Name.
3. Clic Boolean y despus OK.
4. Esto mostrar una ventana de
parmetro.
Pgina 98 de 119
Pgina 99 de 119
etiquetada Name.
3. Esto mostrar una ventana de
seccin.
4. En esta ventana digite el texto
if backbone = false
do invertebrate
if backbone = true
advice 'El animal es un
Vertebrado'
if exoskeleton = true
if legs8 = false
advice 'El animal es un Insecto'
if legs8 = true
advice 'El animal es un
Crustceo'
Animal
Sections
if backbone = false
do invertebrate
if backbone = true
if exoskeleton = true
do arthropod
if exoskeleton = false
if legs8 = false
if legs8 = true
Parameters
type boolean
/* rules field */
type boolean
/* rules field */
type boolean
/* rules field */
picture' '
E/S
CPU
Algoritmos para:
- Bsqueda.
- Reconocimiento de patrones.
Base de conocimiento (representacin simblica.)
Algoritmos para:
Bsquedas y
Reconocimiento de patrones
Base de conocimiento
Representacin Simblica
Hombre
Algunos Animales
Computador IA
Computador Convencional
Circuitos Lgicos
Biestable
Conocimiento Sensorial
Reproduccin de la imagen en el cerebro del hombre en un momento dado.
Imagen ntegra de varios aspectos del objeto.
Reflejo inmediato de las caractersticas del objeto
CONOCIMIENTO RACIONAL
Conceptos
Juicios
Razonamientos
Representacin
Percepcin
Sensacin
Objeto
Nivel 2
Nivel 1
Nivel 0
Nodo
Raz (inicio)
Meta
(Final)
10
9
8
7
6
5
4
3
Directivo
Empleado
Trabajador
Estudiante
Persona
camin
carro
bicicleta
ciclomotor
bici
motor
4 ruedas
2 ruedas
transportacin
Instancia
Es-un
Es-un
Es-un
Es-un
Es-un
Jugador
De Liga Nacional
Jugador
de
Matagalpa
Jugador
de
Len
Entrenador
Right
Field
Pitcher
Jugador de Base Ball
Marco Especfico del Auto
Marco del Motor
Marco Carro General
Marco Modo de Transporte
Motor
Auto
Carro
2
1
Nodo AND
Nodo OR
Comprar una TV
Ganar dinero
Va legal
Robar una TV
Adquirir una TV
Hechos
(Descripcin de los hechos)
Representaciones Internas
(Representaciones formales de los hechos reales)
Hechos
Iniciales
Representacin interna de los hechos iniciales
Hechos
Finales
Representacin interna de los hechos finales
Correspondencia hacia adelante
Correspondencia hacia atrs
Funcionamiento del programa
Proceso Lgico
Premisas de entrada o hechos.
Prueba
Salidas de inferencias o conclusiones.
Ilustracin 4 Utilizar la lgica para razonar
a
3
2
1
A
Ilustracin 5 Utilizacin de una lista para representar el conocimiento
Subelemento c
Subelemento (1)
Subelemento (2)
Subelemento (3)
Elemento 3
Subelemento a
Subelemento b
Subelemento c
Elemento 2
Subelemento a
Subelemento b
Subelemento c
Lista A
Elemento 1
Elemento 2
Elemento 3
Escuela
Nio
Joey
MUJER
Ser Humano
Kay
Va a
Es-un
Tiene hijo
Es-un
Es-un
Es-un
HOMBRE
Sam
Es-un
Es-un
CARRO
Casado con
Tiene un
Vice Presidente
Es-un
Acme
Trabaja para
Ajax
Golf
Mercedes Benz
Plateado
Alemania
Es-un
Es-un
Juega
Color
Hecho-en
Propietario
Sam
Reloj Rolex
Capital
VHS
Casa
Carro
2
8
11
3
5
9
12
14
13
4
6
7
10
15
16
Nodo
Raz (inicio)
Meta
(Final)
G
I
R
F
ll
A
S
C
S
D
S
Estado Inicial
E
H
A
B
S
Estado Inicial
Estado Inicial
Estado Inicial
Meta
B
C
C
B
A
A
Listado Inicial
Listado Meta
A
CB
ACB
B
AC
B
AC
C
AB
CAB
A
CB
C
A
B
B
A
C
C
B
A
A
B
C
0
1
2
3
4
5
6
7
8
9
10
Estado
j
k
10
3
7
5
9
4
8
5
3
3
3
5
5
4
4
4
3
5
2
2
3
1
4
B
C
B
C
D
E
F
G
H
G
F
E
D
C
B
A
A
B
C
D
E
F
G
H
H
D
E
F
G
H
A
B
C
D
E
F
G
H
A
a.valor 4
b.valor 4
c.valor 4
A
Estado anterior
advice
'Hay tres maneras posibles como iniciar su carro:
1) Remolcarlo o empujara para que arranque
2) Recargar la batera
3) Usar la batera de otro carro '
picture 'carros'
A
B
C
Estado final
Estado inicial
A
C
B