• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Tema1
 

Tema1

on

  • 803 views

 

Statistics

Views

Total Views
803
Views on SlideShare
802
Embed Views
1

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Tema1 Tema1 Document Transcript

    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . ÍNDICE1 Introducción.......................................................................................................................................22 Bases del lenguaje PROLOG............................................................................................................2 2.1 Metodología declarativa frente a metodología imperativa........................................................................2 2.2 Ventajas e inconvenientes.......................................................................................................................33 Definición de Hechos, Metas y Predicados en PROLOG...............................................................3 3.1 Construcción de Bases de Conocimientos en PROLOG.........................................................................6 3.2 Consultas sobre la Base de Conocimientos.............................................................................................8 3.3 Ejemplos.................................................................................................................................................114 Definición y funcionamiento de la Máquina PROLOG.................................................................16 4.1 Unificación..............................................................................................................................................17 4.2 Backtracking...........................................................................................................................................175 Bibliografía.......................................................................................................................................20Ing. M. Sc. Pilar Urrutia U. Página 1 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . TEMA1. Lenguaje PROLOG: Conceptos1 Introducción. PROLOG constituye la primera realización práctica de un concepto de programaciónorientado más a modelar la forma de entender un tipo de problemas que a la forma concreta decalcular las soluciones de esos problemas. Esto quiere decir que se debe realizar un esfuerzo para modelar formalmente los enunciadosque definen los problemas en lugar de aportar los pasos concretos que resuelven dicho problema. Por ejemplo, si se nos plantea el problema de resolver el factorial de un número, podemosmodelar el enunciado como: factorial(1)=0 y factorial(N)=N*factorial(N-1), en lugar deespecificar de forma imperativa los pasos individuales que resuelven el factorial a través deasignaciones y operaciones. Por tanto, para entender la programación lógica, lo que necesitamos es adaptar nuestrolenguaje a un lenguaje matemático más formal que nos permita expresar nuestros enunciados demanera que puedan ser resueltos de modo general, automáticamente. La máquina PROLOG, como se verá más adelante, no es más que un demostradorautomático de teoremas. Por tanto, nosotros debemos expresar nuestro problema en forma depremisas y teoremas para que la máquina PROLOG pueda demostrarlos y, por tanto, aportarnoslas soluciones que buscamos. Evidentemente, para comprender las bases de la programación lógica es necesario tener unosconocimientos mínimos de la lógica matemática que se aplica y se utiliza en estos casos.2 Bases del lenguaje PROLOG.2.1 Metodología declarativa frente a metodología imperativa. Podemos especificar más las diferencias, pero al final, todas se resumen en la que acabamosde enunciar: • Los lenguajes declarativos no se basan en la máquina Von Newman sino en modelos matemáticos. • Los lenguajes declarativos, en contra de lo que hacen los imperativos, intentan ser referencialmente transparentes, es decir, la misma expresión siempre da los mismos resultados.Ing. M. Sc. Pilar Urrutia U. Página 2 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . • En un lenguaje declarativo el control lo lleva la máquina, sin embargo en un lenguaje imperativo el control depende exclusivamente del programador. • Los lenguajes declarativos son independientes de la máquina, sin embargo los imperativos se basan en el lenguaje máquina en el que se apoyan, teniendo como instrucción principal la asignación. • El concepto de variable en un lenguaje imperativo es un objeto cuyo valor puede cambiar en el tiempo, en cambio, en los lenguajes declarativos las variables son objetos cuyo valor no se conoce, y que, una vez que se le asocia un valor, conserva dicho valor hasta el final.2.2 Ventajas e inconvenientes. • La principal ventaja de los lenguajes declarativos es que son independientes de la máquina y, como se ha comentado, referencialmente transparentes. • Además la cantidad de código que debemos escribir es menor, aunque la representación formal de estos problemas puede resultar, en ocasiones, poco evidente. • Podemos desentendernos del control. Aunque aquí existe una limitación: no podemos hacerlo totalmente. Por ello, PROLOG nos proporciona formas, un tanto artificiales, de manejo de este control. • Los datos pueden ser tanto de entrada como de salida y se pueden utilizar datos parcialmente construidos, es decir, podemos empezar a ejecutar sin contar con todos los datos. • Es difícil representar la negación.3 Definición de Hechos, Metas y Predicados en PROLOG Para construir programas en Prolog es necesario convertir los conceptos expresados enlenguaje natural en un lenguaje basado en la lógica de primer orden, con el fin de obtener lascláusulas de Horn tras el proceso de conversión adecuado, ya que Prolog trabaja, precisamente,con este tipo de cláusulas. Básicamente, nuestro trabajo va a consistir en especificar adecuadamente los enunciados yreglas básicas para resolver un determinado problema de forma general. Después le plantearemosa Prolog el conjunto de objetivos (problemas específicos para un problema general dado), quequeremos que resuelva. En definitiva, nuestros programas estarán formados por:Ing. M. Sc. Pilar Urrutia U. Página 3 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . • La base de conocimientos: Hechos + Reglas de Inferencia. • El conjunto de objetivos o metas. Para comprender adecuadamente los conceptos expresados hasta ahora, veamos una serie dedefiniciones básicas: predicado, hecho, regla de inferencia y meta. Un predicado especifica la relación existente entre los argumentos del mismo. El número deargumentos a los que se aplica dicho predicado se denomina aridad. Con un predicado podemos representar algo que sucede en el mundo real (hecho), o unaregla (regla de inferencia), que nos permite deducir hechos que suceden en ese dominiomediante la aplicación de la misma. La sintaxis de Prolog para especificar un predicado es lasiguiente: nombre_predicado(arg1, arg2, ... , argN). (En el caso de que el predicado represente un hecho). nombre_p1[([arg1], [arg2],..., [argN])]:-otro_p1[([arg1], [arg2],..., [argN])],..., otro_pN[([arg1], [arg2], ... , [argN])]. (En el caso de que el predicado represente una regla de inferencia). Las reglas de inferencia se pueden definir como la especificación de una relación entrepredicados y argumentos que permiten plasmar el hecho de que si la parte derecha del predicadose cumple, se cumple la parte izquierda. El eje lo proporciona el símbolo ":-" que representa para nosotros la implicación lógica (enlógica "→"). Las comas (","), representan el símbolo de conjunción (en lógica "∧"), y el punto ycoma (";"), representa el símbolo de disyunción (en lógica "∨"). En la Tabla 1 se representanestas correspondencias. Lógica de Primer Prolo Orden g → :- ∧ , ∨ ; Tabla 1Ing. M. Sc. Pilar Urrutia U. Página 4 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Ejemplos:Ejemplos de hechos: madre(pepe, juan). factorial(0,1).Ejemplos de reglas de inferencia: abuela(X,Y):-madre(X,Z), madre(Z,Y). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Como se observa, las reglas de inferencia permiten llevar a cabo la deducción de metas. Para que las reglas de inferencia sean aplicables, en general, deberá existir un conjunto dehechos sobre los que apoyarse para que las demostraciones se puedan realizar. Las metas representan los problemas específicos, basados en los problemas generalesexpresados en la base de conocimientos que deseamos que el demostrador automático deteoremas resuelva. Si nos fijamos, para escribir programas en Prolog, siempre debemos tener en cuenta que eldemostrador resuelve las metas comenzando por los predicados situados en la zona superior (dearriba a abajo), y para cada predicado el proceso de unificación se lleva a cabo de izquierda aderecha, ver Figura 1. Dirección de la Unificación predicado 1 ?.- Objetivo (llamada predicado 1 al predicado) Dirección de la Unificación predicado 2 predicado N Figura 1 Esquema del flujo de ejecución de un programa Prolog Una vez que hemos comprobado el funcionamiento general del demostrador, pasemos aestudiar como llevar a cabo la correcta especificación de las bases de conocimientos.Ing. M. Sc. Pilar Urrutia U. Página 5 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos .3.1 Construcción de Bases de Conocimientos en PROLOG El componente medular de un agente (entidades que poseen un conocimiento de su mundocapaces de razonar sobre las posibles acciones que pueden emprender) basado en elconocimiento es su base de conocimientos, junto con el mecanismo de inferencia que se utilicepara realizar las deducciones. Para nosotros, el mecanismo o motor de inferencia que vamos ausar va a ser la máquina Prolog. La construcción, por tanto, de la base de conocimientos es el punto crucial que nos debeocupar en este curso, por ello, en este punto y en los siguientes, comentaremos las reglas básicasque se deben tener en cuenta para implementar adecuadamente nuestro conocimiento acerca delos problemas que queremos resolver y veremos cómo plantear las metas al demostrador deteoremas (motor de inferencia), de Prolog. La máquina virtual Prolog toma como entrada nuestra base de conocimientos expresada enforma clausal, nuestro objetivo, también expresado en forma clausal, y genera una respuestaafirmativa en caso de que el objetivo se pueda demostrar aplicando el conocimiento almacenadoen la base. La Figura 2 muestra un esquema gráfico de lo que acabamos de comentar. Base de conocimientos Máquina Datos de Prolog Salida Metas Figura 2 Esquema del funcionamiento de la máquina Prolog. Resolver un problema, por tanto, es construir adecuadamente la base de conocimientos, yesta base expresada en lenguaje Prolog junto con el conjunto de metas especificadas constituiránnuestro programa. Los programas que se pueden resolver utilizando esta metodología son muchos y muyvariados. Desde la manipulación de bases de datos hasta la construcción de sistemas expertos,sin olvidar la compresión del lenguaje natural, resolución de juegos, diseño de compiladores, etc. Un programa Prolog probablemente utilizará predicados recursivos, es decir, nuestroproblema se expresa en términos de sí mismo aplicado sobre un conjunto de datos distintos quetiende a convertirse en el conjunto de datos que satisface el caso o casos triviales del proceso derecursión.Ing. M. Sc. Pilar Urrutia U. Página 6 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Por ejemplo, en el caso del problema del factorial, vamos calculando sucesivamente elfactorial de un número decrementado del nivel anterior. Este número se aproxima cada vez más a0, que es justamente el caso trivial de este proceso recursivo. Una vez que se alcanza este caso,las llamadas recursivas retornan los datos de salida y se produce lo que todos conocemos comovuelta atrás. Cuando sea necesario construir un programa usando técnicas recursivas en Prolog, hemos derecordar que los objetivos intentarán satisfacerse mediante una búsqueda que comienza por lospredicados situados en la zona superior, y para cada uno de ellos el proceso de unificación serealizará de izquierda a derecha. Evidentemente, para conseguir un funcionamiento adecuado enel procedimiento de resolución hemos de construir la base de conocimientos adecuadamente,situando primero los casos triviales o específicos y a continuación los casos más generales. Ejemplo: factorial(0,1). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Igualmente, si ciertas realidades del mundo que se desea representar, se pueden expresarmediante una regla de inferencia en lugar de hacerlo con un conjunto de hechos, elegiremos laprimera opción, de modo que en nuestra base de conocimientos, tendremos solamente los hechosque son necesarios para deducir otros que se pueden razonar a través de reglas. Por ejemplo, si deseamos construir parte de nuestro árbol genealógico y establecemos comodominio en el que vamos a trabajar el de las madres y abuelas, solamente será necesario definirel predicado madre para representar hechos del tipo "Ana es madre de Pepa", "Pepa es madre deLuisa", etc. Sin embargo el predicado abuela no se implementará como un hecho, aunque podríahacerse, sino como una regla de inferencia ya que ese suceso ocurrido en el mundo que estamosrepresentando se puede deducir en función del hecho "ser madre". Ejemplo:Ing. M. Sc. Pilar Urrutia U. Página 7 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos .A continuación proponemos un ejemplo de cómo debe modificarse una base de conocimientosincorrectamente implementada. madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(pepa, ana). abuela(juana, beatriz).La base de conocimientos está mal construida porque su actualización es más complicada y,por tanto, también su manejo.La forma correcta de realizar ese programa sería del modo que se propone: madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(X,Y):-madre(X,Z), madre(Z,Y).Como se observa la cantidad de código se reduce ya que para establecer nuevos hechos delmundo real: "ser madre" o "ser abuela" basta con introducir nuevos predicados del tipo madreya que el hecho de "ser abuela" se deduce en función de la regla de inferencia especificada conel predicado abuela.3.2 Consultas sobre la Base de Conocimientos Evidentemente, las bases de conocimientos se construyen con el fin de que preguntemos alagente sobre nuevos hechos del mundo deducidos de dicha base. El agente debe poseer un motorde inferencia para llevar a cabo el proceso de deducción de forma automática. Para nosotros, Prolog va a constituir nuestro "motor de inferencia". Por tanto, nos quedasaber como hemos de plantear los objetivos y como funciona la inferencia en Prolog (máquinavirtual Prolog). En este apartado vamos a centrarnos en estudiar las respuestas proporcionadas por Prolog alos objetivos que le podemos plantear. El objetivo se plantea como un predicado nuevo basado en el conocimiento que tenemos. Lamáquina virtual o intérprete intentará unificar dicho predicado con los existentes en la base deconocimientos. Si puede unificarlo con alguno, nos dará una respuesta afirmativa. En casocontrario, proporcionará una respuesta negativa. Prolog comienza a buscar de arriba a abajo en la secuencia de predicados y para cadapredicado de izquierda a derecha. Pues bien, vamos a examinar ahora el método de ejecuciónpara cada caso, es decir, si el predicado es un hecho, una regla de inferencia, etc. Además, seránecesario concretar como se realiza el proceso de recursión y backtracking a través de algunosejemplos sencillos.Ing. M. Sc. Pilar Urrutia U. Página 8 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Cuando en la base de conocimientos sólo hay hechos En este caso sólo tenemos un conjunto de predicados que expresan los hechos oafirmaciones que se producen en el mundo real. La forma de proceder de la máquina Prolog, será por tanto, el intento de unificación conalguno de ellos. predicado1(arg1, ..., argN). predicado2(arg1, ..., argN). ... predicadoM(arg1, ..., argN). Supongamos que nuestro objetivo es: predicado2(arg1, ..., argN). El árbol de búsqueda generado sería el que se muestra en la Figura 3. SALIDA = YES OBJETIVO predicado2(arg1, ... ,argN). predicado1(arg1, ... ,argN). predicado2(arg1, ... ,argN). predicadoM(arg1, ... ,argN). FAIL ÉXITO EN LA UNIFICACIÓN Figura 3 Árbol de búsqueda para satisfacer un predicado en una base de hechos Cuando en la base de conocimientos hay hechos y reglas de inferencia no recursivas Las reglas de inferencia permiten relacionar hechos o situaciones del mundo real paradeducir otros hechos que, en principio, no son evidentes sin la utilización de dicha reglas. Cuando en Prolog tenemos una sentencia de la forma “predicado(argumentos):-predicado2(argumentos).”, la máquina intenta unificar la parte izquierda de la reglamediante la demostración de la parte derecha. Dicha parte derecha se convierte en un subobjetivoa resolver. Las entradas y salidas se proporcionan a través de los argumentos, y se puedenutilizar variables locales o auxiliares para realizar cálculos que sólo afectan a esa parte derecha.De esta forma, en cada nivel de llamadas dichas variables locales funcionan del mismo modoIng. M. Sc. Pilar Urrutia U. Página 9 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos .que en cualquier lenguaje imperativo, ya que se consideran direcciones independientes unas deotras que sólo sobreviven en su nivel de llamada. Supongamos una base de conocimientos como la siguiente: pred1(arg1). pred2(arg2). pred3(arg1, arg2, arg3):- pred1(arg1), aux is “operación sobrearg1”, pred2(aux), arg3 is “operación entre arg1 y aux”. Para satisfacer el objetivo “pred3(arg1, arg2, arg3).” se genera el árbol debúsqueda de la Figura 4. SALIDA = YES OBJETIVO pred3(arg1, arg2, arg3). pred1(arg1). pred2(arg2). pred3 (arg1, arg2, arg3) FAIL FAIL AND pred1(arg1). Operación pred2(aux). Operación sobre aux sobre arg3 ÉXITO ÉXITO ÉXITO ÉXITO Figura 4 Árbol de búsqueda para satisfacer un objetivo en función de una sencilla regla de inferencia Cuando en la base de conocimientos hay hechos y reglas de inferencia recursivas Para estudiar este ejemplo, vamos a utilizar el ejemplo del cálculo del máximo comúndivisor. Hemos de apuntar, que el proceso se realizará de la misma forma que en el casoanterior. Lo único que hay que tener en cuenta es que es necesario controlar el orden en que secolocan los predicados para evitar una ejecución no deseada, ya que toda solución recursiva debeevolucionar hacia el caso trivial. En cada nivel de recursión, las variables locales son independientes y se localizan endirecciones de memoria distintas. mcd(A,B,R):-A==B, R is A. mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R).Ing. M. Sc. Pilar Urrutia U. Página 10 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R). mcd(A,Aux,R):-mcd(B,A,R). El árbol de búsqueda generado para encontrar la solución “mcd(7, 5, R).” se muestra enla Figura 5. SALIDA = YES R=1 OBJETIVO mcd(7,5,R) Predicado1 Predicado2 7=5 7>5 Aux is 2 mcd(2, 5, R) FAIL ÉXITO ÉXITO Predicado1 Predicado2 Predicado3 2º Nivel de 2=5 2>5 2<5 Aux is 3 mcd(2, 3, R) Recursión FAIL FAIL ÉXITO ÉXITO Figura 5 Árbol parcial de búsqueda para resolver un caso del problema del máximo común divisor de dos números3.3 Ejemplos En el punto anterior, hemos observado como funciona la máquina Prolog a la hora deresolver objetivos planteados sobre distintos tipos de bases de conocimientos. Es convenienteilustrar todos los conocimientos adquiridos hasta ahora observando como se resuelven distintosproblemas mediante un lenguaje lógico. Por ello, veamos un resumen de algunos ejemploscomentados hasta ahora. Cálculo del factorial.Ing. M. Sc. Pilar Urrutia U. Página 11 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . factorial(0,1). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Cálculo del máximo común divisor. mcd(A,B,R):-A==B, R is A. mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R). mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R). mcd(A,Aux,R):-mcd(B,A,R). Cálculo del máximo común divisor usando disyunciones. mcd(A,B,R):-A==B, R is A; A>B, Aux is A-B, mcd(Aux,B,R); A<B, Aux is B-A, mcd(A,Aux,R); mcd(B,A,R). Árbol genealógico. madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(X,Y):-madre(X,Z), madre(Z,Y). Tras la exposición de estos pequeños ejemplos, pasemos a realizar un programa un poco másgrande. Vamos a construir una base de conocimientos que nos permita resolver objetivos opreguntas relacionadas con el código de la circulación de vehículos.Ing. M. Sc. Pilar Urrutia U. Página 12 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . La aplicación va a permitir especificar un tipo de vehículo y las características de la vía porla que circula y nos informará sobre la velocidad máxima genérica que dicho vehículo puedealcanzar. Hablaremos exclusivamente de velocidad genérica de vía y vehículos. A continuación, en la Tabla 2, se muestran los tipos de vía que existen tanto fuera comodentro de poblado.Características de la vía Nombre de la víaVía interurbana señalizada con la señal S-1 Autopista(Figura 6)Vía interurbana señalizada con la señal S-1a Autovía(Figura 7)Vía interurbana señalizada con la señal S-1b Vía Rápida(Figura 8)Vía interurbana con dos o más carriles para Carretera Convencional Buenacada sentido ó carril para facilitar eladelantamiento ó arcén pavimentado de, almenos, 1,5 metros de longitudVía interurbana que no cumple los requisitos de Carretera Convencional Malauna carretera convencional buena.Vía urbana Vía UrbanaVía interurbana que discurre por suelo urbano Travesía Tabla 2 AUTOVÍA VÍA RÁPIDA Figura 6 Figura 7 Figura 8 Señal S-1 Señal S-1a Señal S-1b En la Tabla 3, se expresan las relaciones de velocidad según la vía y el vehículo que seconduce.Ing. M. Sc. Pilar Urrutia U. Página 13 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Vía Autopistas y Vías Rápidas y Carreteras Vías Urbanas y Autovías Carreteras Convencionales Travesías Convencionales Malas Vehículo BuenasTurismos y 120 100 90 50MotocicletasAutobuses y 100 90 80 50VehículosMixtosCamiones y 90 80 70 50VehículosArticuladosAutomóviles 80 80 70 50conRemolqueNoveles 80 80 80 50 Tabla 3 Una vez que tenemos todos los datos, sólo nos queda expresar los acontecimientos de larealidad de forma sintácticamente correcta. Los hechos y reglas de inferencia para resolver este problema se muestran a continuación. Experto de Autoescuela predicates maximo(string, string, integer) via(integer, integer, string, string) velocidad(string, integer, integer, string, integer) nondeterm repeat nondeterm pedirdatos clauses /* Definición de las velocidades genéricas de vehículos según la vía */ maximo("novel", "autopista", 80):-!. maximo("novel", "autovia", 80):-!. maximo("novel", "via_rapida", 80):-!. maximo("novel", "ccb", 80):-!. maximo("novel", "ccm", 80):-!. maximo("turismo", "autopista", 120):-!. maximo("motocicleta", "autopista", 120):-!. maximo("vehiculomixto", "autopista", 100):-!. maximo("autobus", "autopista", 100):-!.Ing. M. Sc. Pilar Urrutia U. Página 14 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . maximo("camion", "autopista", 90):-!. maximo("vehiculoarticulado", "autopista", 90):-!. maximo("conjuntovehiculos", "autopista", 80):-!. maximo(Veh, "autovia", R):-maximo(Veh, "autopista", R), !. maximo("turismo", "ccb", 100):-!. maximo("motocicleta", "ccb", 100):-!. maximo("vehiculomixto", "ccb", 90):-!. maximo("autobus", "ccb", 90):-!. maximo("camion", "ccb", 80):-!. maximo("vehiculoarticulado", "ccb", 80):-!. maximo("conjuntovehiculos", "ccb", 80):-!. maximo(Veh, "via_rapida", R):-maximo(Veh, "ccb", R),!. maximo(Veh, "ccm", R):-maximo(Veh, "ccb", Auxi), R=Auxi-10, !. maximo(Veh, "via_urbana", _):- Veh<>"turismo", Veh<>"motocicleta", Veh<>"vehiculomixto", Veh<>"autobus", Veh<>"camion", Veh<>"vehiculoarticulado", Veh<>"conjuntovehiculos", Veh<>"novel", fail, !. maximo(_, "via_urbana", 50):-!. maximo(Veh, "travesia", R):-maximo(Veh, "via_urbana", R). /* Definición de vía en función de sus características */ via(_, _, "autopista", "autopista"):-!. via(_, _, Senal, Tipo):-Senal="autovia", Tipo="autovia", !. via(_, _, Senal, Tipo):-Senal="viarapida", Tipo="via_rapida", !. via(_, _, Senal, Tipo):-Senal="de_via_urbana", Tipo="via_urbana", !. via(_, _, Senal, Tipo):-Senal="de_travesia", Tipo="travesia", !. via(Arcen, _, "nohay", "ccb"):-Arcen >=150, !. via(_, Carriles, "nohay", "ccb"):-Carriles>=2, !. via(_, -1, "nohay", "ccb"):-!. via(_, _, "nohay", "ccm"). /* Predicado de cálculo de velocidad en función del vehículo y las características de la vía */ velocidad(Vehiculo, A, C, S , V):-via(A, C, S, Carretera), maximo(Vehiculo, Carretera, V). repeat. repeat:-repeat. pedirdatos:-repeat, write("PETICIÓN DE DATOS (nohay=no hay datoIng. M. Sc. Pilar Urrutia U. Página 15 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . concreto)"), nl, nl, nl, write("Especifica el tipo de vehículo, (turismo, motocicleta, vehiculomixto, autobus, camion)"), nl, write("(vehiculoarticulado, conjuntovehiculos, novel): "), readln(V), nl, write("Especifica el tamaño del arcen: "), readint(A), nl, write("Especifica el número de carriles (-1 para adelantamiento): "), readint(C), nl, write("Especifica señal (autopista, autovia, via_rapida): "), readln(S), velocidad(V, A, C, S , Velocidad), nl, write("La velocidad máxima es: "), write(Velocidad), nl, write("Continuar=Cualquier tecla, Salir=1"), nl, readint(Tecla), nl, nl, nl, Tecla=1. goal pedirdatos.4 Definición y funcionamiento de la Máquina PROLOG Hasta ahora, conocemos como se pueden modelar problemas reales utilizando lametodología declarativa lógica. Pero además, es necesario, definir formalmente qué es lamáquina o intérprete Prolog. En este apartado nos centraremos en la definición y muestra delfuncionamiento interno de este intérprete, examinando como se realiza el proceso de resolución,a través del método de unificación, y como se llevan a cabo las tareas de recursión ybacktracking. Un intérprete Prolog es un demostrador de teoremas sobre Cláusulas de Horn que trabajaTop-Down, y que emplea Resolución Lineal con Función de Selección. La entrada al intérpretees un conjunto de cláusulas definidas C, junto con la especificación de la meta G0, como ya sevio en apartados anteriores. El proceso del intérprete consiste en una búsqueda incremental porbacktracking en el espacio (organización en forma de árbol), de refutaciones posibles a G0[Adarraga, 1994].Ing. M. Sc. Pilar Urrutia U. Página 16 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos .4.1 Unificación La unificación se realiza, para cada predicado, de izquierda a derecha, y para cada conjuntode predicados, de arriba a abajo. Se pueden unificar variables con constantes, siempre que lavariable no esté instanciada. Si la variable está instanciada, el hecho de hacer unificación entreambas se corresponde con la situación de unificación de dos constantes. Para que dos constantesse puedan unificar ambas han de ser iguales. Veamos en la Tabla 4 algunos casos que muestran el funcionamiento de la unificación.Variable no instanciada se intenta unificar con cualquier átomo ÉXIT X=5 OVariable instanciada se intenta unificar con cualquier átomo FAIL X que contiene 5,distinto al valor que contiene X=6Constante se intenta unificar con otra constante distinta FAIL 5=6Expresiones se intentan comparar mediante símbolos de FAIL 5+3=3+5comparación que no "evalúan" y no coinciden totalmente, incluidoel ordenVariable se intenta instanciar dos veces en la misma ejecución del FAIL X=6, X=7programa. En el segundo intento de instanciación Tabla 4 Vemos que las instanciación es un caso de unificación en la que a una variable noinstanciada se le asigna un valor. También podemos observar que no es necesario definir los tipos de las variables localesusadas dentro de cada regla de inferencia. Cuando las variables se instancian a un valor, entoncestodas las operaciones que se realicen con dicho valor deberán tener en cuenta el tipoespecificado. Por ejemplo, si una variable se instancia al valor 5, todas las comparacionesposteriores se harán con números y no con átomos del tipo pepe, blas ó similar. El proceso de unificación intenta casar un predicado con otro para comprobar si sonabsolutamente iguales, cuando es posible hacer sustituciones, éstas se realizan de manera que lospredicados que se están unificando se tornen completamente iguales y proporcionen un resultadode ÉXITO.4.2 Backtracking Ya se ha comentado en puntos anteriores: Prolog utiliza un sistema de backtracking pararesolver una meta propuesta. El procedimiento de backtracking consiste en generar un árbol debúsqueda de todas las posibles resoluciones que puede tener la meta en función de la base deconocimientos. Esto significa, que el algoritmo itera hasta que encuentra una solución. Cada vezIng. M. Sc. Pilar Urrutia U. Página 17 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos .que los predicados fallan y no son unificables se va generando una nueva rama hasta encontrar lasolución deseada, de esta forma se va construyendo el árbol de búsqueda. Puede ser que un problema se pueda resolver de varias formas. Es, por tanto, posibleespecificar que deseamos una nueva solución. El intérprete Prolog ignora la solución encontradahasta ahora y construye el árbol de búsqueda hasta generar una nueva solución o encontrar queésta no existe. Cuando un predicado se demuestra en función de una llamada a sí mismo, la llamada seconvierte en un subobjetivo casi idéntico al objetivo a cumplir, salvo por el conjunto de datossobre el que se aplica. Cuando se consigue la demostración de los subobjetivos generados en elproceso de recursión, se produce lo que se denomina vuelta atrás de la recursión, que funcionaigual que en cualquier lenguaje. No hemos de confundir recursividad con backtracking. Los predicados recursivos losdiseñamos nosotros mientras que el procedimiento de backtracking es intrínseco al método derefutación que se usa para demostrar las metas. Para comprender mejor lo expuesto hasta ahora, vamos a examinar un par de ejemplos deuso forzado de backtracking para obtener nuevas soluciones y de uso de predicados recursivos. Uso forzado de backtrackingLa traza del programa siguiente se muestra en la Figura 9. hermano(juan, beatriz). hermano(pepe, beatriz).Objetivos planteados ?.-hermano(X, beatriz). X->juan; X->pepe; no.Ing. M. Sc. Pilar Urrutia U. Página 18 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . hermano(X, beatriz). X=pepe X=juan hermano(pepe, beatriz) hermano(juan, beatriz) ÉXITO ÉXITO 1ª SOLUCIÓN 2ª SOLUCIÓN Figura 9 Árbol de búsqueda generado para la solución del predicado "hermano(X, beatriz)" Uso de predicados recursivosLa traza del programa siguiente se muestra en la Figura 10. numero(0):-write(0). numero(N):-N1 is N-1, numero(N1), write(N).Objetivo planteado. ?.-numero(2). 210 yes.Ing. M. Sc. Pilar Urrutia U. Página 19 de 20
    • Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . numero(2). numero(0):-write(0). Predicado Siguiente FAIL N1 is N-1 numero(1) write(2) ÉXITO ÉXITO numero(0):-write(0). Predicado Siguiente FAIL N1 is N-1 numero(0) write(1) ÉXITO numero(0):-write(0). ÉXITO ÉXITO Figura 10 Árbol de búsqueda generado para la solución del predicado "numero(2)"5 Bibliografía [Adarraga, 1994] Adarraga, Pablo. Zaccagnini José Luis. “Psicología e Inteligencia Artificial”. Editorial Trotta. 1994. [Giannesini, 1986] PROLOG. Addison-Wesley Iberoamericana, 1986. [Russell, 1996] Russell, Stuart. Norvig, Peter. “Inteligencia Artificial. Un enfoque moderno”. Editorial Prentice Hall. 1996.Ing. M. Sc. Pilar Urrutia U. Página 20 de 20