TRANSPARENCIAS TEMA 1
Dirección del proceso de resolución de una meta

Construcción de Bases de Conocimientos en PROLOG

Consultas sobre la Base de Conocimientos
predicado1(arg1, ..., argN).
predicado2(arg1, ..., argN).
...
predicadoM(arg1, ..., argN).
Objetivo:
predicado2(arg1, ..., argN).

pred1(arg1).
pred2(arg2).
pred3(arg1, arg2, arg3):-
pred1(arg1),
Aux is "operación sobre arg1",
pred2(aux),
arg3 is "operación entre arg1 y aux".
Objetivo:
"
pred3(arg1, arg2, arg3)."
Cuando en la base de conocimientos hay hechos y reglas de inferencia recursivas
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).
Objetivo:
"
mcd(7, 5, R)."
EJEMPLO:
Construcción de una base de conocimientos para resolver objetivos o preguntas relacionadas con el código de la circulación de vehículos.
La aplicación va a permitir especificar un tipo de vehículo y las características de la vía por la que circula y nos informará sobre la velocidad máxima genérica que dicho vehículo puede alcanzar.
|
Características de la vía |
Nombre de la vía |
|
Vía interurbana señalizada con la señal S-1 |
Autopista |
|
Vía interurbana señalizada con la señal S-1a |
Autovía |
|
Vía interurbana señalizada con la señal S-1b |
Vía Rápida |
|
Vía interurbana con dos o más carriles para cada sentido ó carril para facilitar el adelantamiento ó arcén pavimentado de, al menos, 1,5 metros de longitud |
Carretera Convencional Buena |
|
Vía interurbana que no cumple los requisitos de una carretera convencional buena. |
Carretera Convencional Mala |
|
Vía urbana |
Vía Urbana |
|
Vía interurbana que discurre por suelo urbano |
Travesía |
|
|
|
|
|
|
Autopistas y Autovías |
Vías Rápidas y Carreteras Convencionales Buenas |
Carreteras Convencionales Malas |
Vías Urbanas y Travesías |
|
Turismos y Motocicletas |
120 |
100 |
90 |
50 |
|
Autobuses y Vehículos Mixtos |
100 |
90 |
80 |
50 |
|
Camiones y Vehículos Articulados |
90 |
80 |
70 |
50 |
|
Automóviles con Remolque |
80 |
80 |
70 |
50 |
|
Noveles |
80 |
80 |
80 |
50 |
|
|
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):-!. 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 dato 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. |
|
Definición y funcionamiento de la Máquina PROLOG
Unificación
Backtracking
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.