Está en la página 1de 25

Inteligencia Artificial I

Compendio de ejercicios

Ing. Prof. Inst. Ernesto Soto Gómez

14 de julio de 2020

Departamento de Inteligencia Computacional


Facultad 1
Universidad de las Ciencias Informáticas
El presente compendio de ejercicios pretende ser un complemento para la consolidación de los contenidos
de la asignatura de Inteligencia Artificial I de la Universidad de las Ciencias Informáticas. El compendio
comprende un conjunto de problemas a los cuales corresponden uno o varios ejercicios. Los ejercicios marcados
con un signo + son de una complejidad mayor que la media y pueden necesitar algún estudio previo por parte
del estudiante antes de resolverlos. Los ejercicios marcados con un ∗ están destinados a aquellos estudiantes
que deseen profundizar y probar sus habilidades a un nivel un poco más alto que los ejercicios marcados con
+. El resto de los ejercicios miden las habilidades principales de la asignatura y se encuentran, en la medida
de lo posible, ordenados de menor a mayor complejidad.
Índice general
I. Prolog 4

1. Elementos esenciales 6

2. Representación de datos complejos 10


2.1. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2. Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

II. Métodos de búsqueda 18

3. Búsqueda en general 19

4. Minimax 22

5. Algoritmos genéticos 24

3
Parte I.

Prolog

4
En este apartado se encontrarán ejercicios de programación en Prolog considerando como implementados
de antemano –a menos que se indique lo contrario– solo los predicados true/0, f ail/0, !/0, not/1, length/2,
append/3, member/2, =../2, f unctor/3, arg/3, read/1, write/1, writeln/1, tab/1, nl/0, dynamic/1, asserta/1,
assertz/1, retract/1, retractall/1, abolish/1, f indall/3, bagof /3, setof /3, así como los predicados aritmé-
ticos y de comparación esenciales y más comunes. Se espera que se brinde la implementación de cualquier
otro predicado utilizado en las soluciones.

5
1. Elementos esenciales
Problema 1. Dada la siguiente base de conocimiento.
1 productor ( angola , otro ).
2 productor ( angola , diamante ).
3 productor ( brasil , equipamiento ).
4 productor ( brasil , otro ).
5 consumidor ( eua , otro ).
6 consumidor ( china , otro ).
7 consumidor ( china , diamante ).
8 relaciones_comerciales (X , Y ) : - productor (X , Z ) , consumidor (Y , Z ) , !.
9 relaciones_comerciales (X , Y ) : - productor (Y , Z ) , consumidor (X , Z ).

Escriba las respuestas que daría Prolog a las siguientes preguntas.

Ejercicio 1. ?- productor(angola, X).

Ejercicio 2. ?- productor(X,Z), !, consumidor(Y,Z).

Ejercicio 3. ?- productor(A, B), productor(A, equipamiento).

Ejercicio 4. ?- relaciones_comerciales(Z, china).

Ejercicio 5. Construya el árbol SLD para el objetivo anterior.

Problema 2. Dada la siguiente base de conocimiento:


1 a (j , m ).
2 a (i , u ).
3 a (u , r ).
4 a (b , r ).
5 a (p , m ).
6 s (A , B) :- a (A , B), !.
7 s (A , B) :- a (B , A), !.
8 s (A , B) :- a (A , X), ! , s (X , B ).
9 s (A , B) :- a (X , A), s (X , B ).

Escriba las respuestas que daría Prolog a las siguientes preguntas.

Ejercicio 6. ?- a(A, u).

Ejercicio 7. ?- a(A, u), a(j, A).

Ejercicio 8. ?- a(A, X), a(X, B).

Ejercicio 9. Construya el árbol SLD para el objetivo anterior.

Ejercicio 10. ?- s(u, X).

Ejercicio 11. Construya el árbol SLD para el objetivo anterior.

Ejercicio 12. ?- s(p, j).

Ejercicio 13. Construya el árbol SLD para el objetivo anterior.

6
Problema 3. Dada la siguiente base de conocimiento.
1 e (3 , 6 , 9).
2 e (3 , 4 , 7).
3 e (2 , 4 , 6).
4 e (5 , 6 , 11).
5 e (1 , 4 , 5).
6 e (4 , 3 , 8).
7 p ([] , B ).
8 p ([ A | L ] , B ) : - e (A , B , C ) , C is A + B , ! , p (L , B ).
9 p ([ A | L ] , B ) : - fail .

Escriba las respuestas que daría Prolog a las siguientes preguntas.

Ejercicio 14. ?- e(A, B, 11).

Ejercicio 15. ?- e(3, _, A).

Ejercicio 16. ?- e(A, B, _), A > B.

Ejercicio 17. ?- p([3, 2], 4), e(1, 3, 2).

Ejercicio 18. ?- p([3, 5], B).

Ejercicio 19. Construya el árbol SLD para el objetivo anterior.

Problema 4. Dada la siguiente base de conocimiento:


1 p (a , b , c ).
2 p (q , t , q ).
3 p (1 , 2 , 3).
4 p (c , 3 , a ).
5 p (c , 2 , a ).
6 r ([] , 0).
7 r ([ _ ] , 0).
8 r ([ X , Y | L ] , N ) : - p (X , _ , Y ) , ! , r (L , T ) , N is T + 1.
9 r ([ _ , _ | L ] , N ) : - r (L , N ).

Escriba las respuestas que daría Prolog a las siguientes preguntas.

Ejercicio 20. ?- p(A, 2, X).

Ejercicio 21. ?- p(A, _, A).

Ejercicio 22. ?- p(_, _, E), p(X, y, 1).

Ejercicio 23. ?- p(X, Y, Z), !, p(Z, _, X).

Ejercicio 24. ?- r([c, a, 2, 3], R).

Ejercicio 25. Construya el árbol SLD para el objetivo dado.

Problema 5. Dada la siguiente base de conocimiento:

7
1 x (1 , 2 , 3).
2 x (2 , 3 , 4).
3 x (3 , 2 , 5).
4 x (5 , 4).
5 x (2 , 4).
6 x (4 , 3).
7 x (4 , 6).
8 x (2 , 1).
9 x (5 , 8).
10 y (A , B ) : - x (A , B ) , !.
11 y (A , B ) : - x (B , X ) , y (X , A ) , ! , x (A , _ , B ).

Ejercicio 26. Describa con sus palabras bajo qué condiciones el predicado y/2 falla.

Ejercicio 27. Modifique el predicado y/2 para que devuelva en un tercer parámetro la cantidad de veces
que se ha llamado a sí mismo de manera recursiva.

Escriba las respuestas que daría Prolog a las siguientes preguntas.

Ejercicio 28. ?- y(3, A).

Ejercicio 29. ?- y(4, A), y(A, B).

Ejercicio 30. ?- y(A, 6); y(A, 4).

Problema 6. 1 Se tiene una base de conocimiento con hechos de aridad 2 que representan los pares ordenados
de relaciones binarias. A continuación se muestra un extracto de dicha base de conocimiento, donde se pueden
observar algunos pares ordenados de las relaciones con nombres f , g y h.
1 f (a , c ).
2 f (a , b ).
3 f (b , e ).
4 f (c , d ).
5 g (2 , 4).
6 g (3 , 9).
7 h (4 , 16).
8 h (9 , 81).

Resuelva los ejercicios que corresponden a este problema sin la utilización de predicados
conjuntuales y asumiendo que no existen hechos repetidos en la base de conocimiento.

Ejercicio 31 (+). Confeccione un predicado function(N ) para verificar que la relación con nombre N es
una función.
Ejemplo:
 
? - function ( f ).
false .

? - function ( g ).
true .
 

Con la base de conocimiento dada en el problema y los siguientes 2 objetivos, confeccione el árbol SLD.

Ejercicio 32 (+). ?- function(f).


1
En este problema y los ejercicios correspondientes, los conceptos de función, par ordenado, relación, relación binaria, relación
compuesta, relación inversa, etc., son los mismos estudiados en la asignatura de Matemática Discreta I.

8
Ejercicio 33 (+). ?- function(g).
Ejercicio 34 (+). Confeccione un predicado inverse/0 para listar por la consola los pares ordenados de la
inversa de la relación cuyo nombre es leído por consola. Los pares ordenados deben mostrarse uno por línea
sin ningún mensaje adicional excepto, y opcionalmente, la palabra true al final de la salida.
Ejemplo:
 
? - inverse .
|: f .
c,a
b,a
e,b
d,c
true .
 

Ejercicio 35 (+). Confeccione un predicado composite/0 para listar por la consola los pares ordenados de
la relación compuesta N ◦ N 1, donde N y N 1 son leídos por consola. Si alguna de las relaciones a componer
no es una función, el predicado debe fallar. Los pares ordenados deben mostrarse uno por línea sin ningún
mensaje adicional excepto, y opcionalmente, la palabra true al final de la salida.
Ejemplo:
 
? - composite .
|: f .
|: g .
false .

? - composite .
|: g .
|: h .
true .

? - composite .
|: h .
|: g .
2 ,16
3 ,81
true .
 

Ejercicio 36 (*). Confeccione un predicado inverse(N, L) para devolver en L la lista de los pares ordenados
de la inversa de la relación con nombre N .
Ejemplo:
 
? - inverse (f , L ).
L = [( d , c ) , (e , b ) , (b , a ) , (c , a )].
 

Ejercicio 37 (*). Confeccione un predicado composite(N, N 1, L) para devolver en L la lista de los pares
ordenados de la relación compuesta N ◦ N 1. Asuma que N y N 1 se refieren a nombres de funciones.
 
? - composite (g , h , L ).
L = [].

? - composite (h , g , L ).
L = [(3 , 81) , (2 , 16)].
 

9
2. Representación de datos complejos
2.1. Listas
Problema 7. Considere que la lista cota superior entre dos listas, de igual longitud k, X = [x1 , x2 , . . . , xk ]
y Y = [y1 , y2 , . . . yk ] se denota sup(X, Y ) y se calcula como

sup(X, Y ) = [max(x1 , y1 ), max(x2 , y2 ), . . . , max(xk , yk )]

donde max(a, b) denota el máximo entre a y b.

Ejercicio 38. Implemente el predicado sup(+X, +Y, ?L) para hallar la cota superior entre las listas X y Y .
Ejemplo:
 
? - sup ([2 ,3 ,4 ,5] ,[1 ,6 ,3 ,4] , L ).
L = [2 , 6 , 4 , 5].

? - sup ([8 ,6 ,4] , [3 ,4 ,7] , L ).


L = [8 , 6 , 7].

? - sup ([1 ,2 ,3 ,5] , [8 ,5 ,3] , L ).


false .

? - sup ([1 ,2 ,3 ,5] , [8 ,5 ,3 ,4] , [8 , 5 , 3 , 5]).


true .
 

Ejercicio 39. Implemente el predicado supPos(+L1, +L2, +P, ?R) que devuelve en R el valor que se en-
cuentra en la posición P de la lista que representa la cota superior entre L1 y L2. Si las listas no poseen
la misma longitud se debe escribir el mensaje Las listas no poseen igual longitud y luego emitir un
fallo. Si las listas poseen igual longitud pero la posición excede la longitud de la lista cota superior se debe
escribir por consola el mensaje Posición no válida y luego emitir un fallo.
Considere que las posiciones de los elementos de una lista comienzan a enumerarse desde 0. Las listas L1
y L2 serán siempre de números reales.
Ejemplo:
 
? - supPos ([2 ,3 ,4 ,5] ,[1 ,6 ,3 ,4] ,2 , R ).
R = 4.

? - supPos ([8 ,6 ,4] , [3 ,4 ,7] , 0 , 8).


true .

? - supPos ([1 ,2 ,3 ,5] , [8 ,5 ,3] , 3 , R ).


Las listas no poseen igual longitud
false .

? - supPos ([1 ,2 ,3 ,5] , [8 ,5 ,3 ,4] , 20 , R ).


Posición no válida
false .

10
? - supPos ([1 ,2 ,3 ,5] , [8 ,5 ,3] , 20 , R ).
Las listas no poseen igual longitud
false .
 

Problema 8. Considere que la diferencia entre dos listas A = [a1 , a2 , . . . , ak ] y B = [b1 , b2 , . . . , bk ] de igual
longitud k se define como
A − B = [a1 − b1 , a2 − b2 , . . . , ak − bk ]
Ejercicio 40. Implemente el predicado dif erencia(+B, +A, ?R) para hallar la diferencia entre las listas A
y B.
Ejemplo:
 
? - diferencia ([2 ,3 ,5 ,7] , [7 ,0 ,6 ,4] , L ).
L = [ -5 , 3 , -1 , 3].

? - diferencia ([8 ,3 ,5 ,7] , [2 ,6 ,5 ,6] , L ).


L = [6 , -3 , 0 , 1].

? - diferencia ([1 ,2 ,3 ,4] , [4 ,5 ,3] , L ).


false .
 

Ejercicio 41. Implemente el predicado preg(+A, +B, +N, ?R) que devuelva en R la primera posición del
número N en la lista diferencia entre las listas A y B si las mismas poseen la misma longitud. Si las listas no
poseen la misma longitud, entonces se debe escribir por consola el mensaje Las listas no poseen igual
longitud y luego emitir un fallo. Asuma que N siempre se encuentra dentro de la lista diferencia.
Utilice el predicado de corte en la resolución del ejercicio. Considere que las posiciones de los elementos
de una lista comienzan a enumerarse desde 1.
Ejemplo:
 
? - preg ([2 ,3 ,5 ,7] , [7 ,0 ,6 ,4] , 3 , R ).
R = 2.

? - preg ([8 ,3 ,5 ,7] , [2 ,6 ,5 ,6] , 6 , 1).


true .

? - preg ([1 ,2 ,3 ,4] , [4 ,5 ,3] , 3 , R ).


Las listas no poseen igual longitud
false .
 
Observe cómo, en el primer ejemplo, se devuelve solo la primera posición del valor 3 dentro de la diferencia.
O sea, el valor 3 aparece en la diferencia por primera vez en la posición 2.

a) ¿Qué tipo de corte(s) utilizó en su solución? Diga por qué lo(s) clasifica de esa manera.

Problema 9. Considere que la fusión entre dos listas es el resultado de intercalar sus elementos. Si las listas
no tienen igual longitud, los elementos sobrantes se ponen al final.
Ejercicio 42. Confeccione un predicado para hallar la fusión entre dos listas.
 
? - fusion ([5 , 6 , 7] , [1 , 2 , 3] , L ).
L = [5 , 1 , 6 , 2 , 7 , 3].

? - fusion ([3 , 4 , 5 , 6 , 7] , [1] , L ).


L = [3 , 1 , 4 , 5 , 6 , 7].
 

11
Ejercicio 43. Confeccione, utilizando corte y recursividad, un predicado q2(A, N, R) donde A es una lista
de enteros de entrada y

R es la fusión de la lista de los elementos mayores que N con la lista de los elementos menores que N
en el orden en que se encuentran si A no es vacía.

Si A es vacía entonces el predicado debe escribir por consola Empty list y luego emitir un fallo.

Ejemplo:
 
? - q2 ([1 , 2 , 3 , 4 , 5 , 6 , 7] , 4 , R ).
R = [5 , 1 , 6 , 2 , 7 , 3].

? - q2 ([1 , 2 , 3 , 4 , 5 , 6 , 7] , 2 , R ).
R = [3 , 1 , 4 , 5 , 6 , 7].

? - q2 ([] , 3 , R ).
Empty list
false .
 

a) ¿Qué tipo de corte(s) utilizó en su solución? Diga por qué lo(s) clasifica de esa manera.

Ejercicio 44 (+). Implemente, utilizando corte, el predicado sublist(A, N, B) que verifica que A es una
sublista de B que se encuentra a partir de la posición N o luego de la misma, contando las posiciones desde
cero. En este caso se considera que A es sublista de B si los elementos de A se encuentran en B en el mismo
orden en que aparecen en A aunque no necesariamente consecutivamente.
Si N sobrepasa la longitud de B debe escribirse por consola Out of range y luego emitir un fallo.
Ejemplos de entrada y salida:
 
? - sublist ([1 , 2 , 3] , 1 , [2 , 3 , 1 , 2 , 4 , 3]).
true .

? - sublist ([1 , 2] , 2 , [1 , 3 , 2 , 1 , 3 , 2]).


true .

? - sublist ([1 , 2] , 0 , [2 , 1]).


false .

? - sublist ([1 , 2] , 5 , [1 , 2 , 3]).


Out of range
false .
 

a) ¿Qué tipo de corte(s) utilizó en su solución? Diga por qué lo(s) clasifica de esa manera.

2.2. Estructuras
Problema 10. En la universidad se ha creado un club de lectura para promocionar ese hábito. Para controlar
su actividad, se está solicitando crear una base de datos jerárquica que contenga en cada registro la siguiente
información de cada miembro:

Su nombre completo.

La edad.

12
Un listado de libros que ha leído, cada uno de los cuales tenga información sobre su título, nombre
completo del autor y país de origen del autor. Si el libro tiene varios autores se guarda esta información
de manera conjunta como si fuera un solo autor. Lo mismo sucede en el caso de los países de los cuales
proceden los autores.

Fecha de alta en el club.

Ejercicio 45. Escriba en Prolog al menos dos registros que satisfagan las condiciones de la información
descrita y que corresponda a miembros que hayan leído al menos un libro.

Ejercicio 46. Implemente selectores para extraer:

El mes en que se dio de alta un miembro del club.

La edad de un miembro del club.

El autor de un libro dado.

Ejercicio 47. Implemente un predicado que imprima por consola un listado con el nombre completo y edad
de cada miembro del Club. El resultado debe escribirse por consola con un formato ameno como se muestra
en el siguiente ejemplo:
 
? - miembros .
Nombre : Dionisio Amador Del Monte
Edad : 21
Nombre : Greta de la Garza Martínez
Edad : 23
true .
 

Ejercicio 48. Programe un predicado cuyo primer argumento unifique con el listado de los libros leídos en
el Club que son de un país dado.

Problema 11. Para el registro de los comensales del comedor de una universidad se está considerando
utilizar una base de datos jerárquica implementada en Prolog. Por cada evento de servicio se registra la fecha
–día, mes, año–, el menú, y un listado con los comensales que hicieron uso del servicio en ese evento. De cada
menú, se registra su precio en CUP y la cantidad inicial reservada para el evento. De cada comensal se tiene
su nombre completo y su categoría –que puede ser trabajador, profesor o estudiante.

Ejercicio 49. Escriba un hecho existe/1 que contenga una estructura que represente la información recogida
para un evento hipotético con no menos de dos comensales.

Ejercicio 50. Implemente selectores para obtener:

a) El precio de un menú dado.

b) El nombre completo de un comensal dado.

c) La categoría de un comensal dado.

Utilizando selectores implemente predicados para:

Ejercicio 51. Determinar si un comensal, identificado por su nombre completo, ha usado el servicio del
comedor en una fecha dada.

Ejercicio 52. Determinar el dinero recaudado en un evento dado su fecha. Considere que los estudiantes no
pagan el servicio.

Ejercicio 53. Determinar el listado de todos los comensales profesores de la base de conocimiento.

13
Problema 12. El restaurante La Sevilla de comida española, quiere hacer un sistema para el control de
las reservaciones que se realizan cada día en cada uno de los eventos. Esta información se guarda en hechos
con functor evento, los cuales contienen los siguientes datos: tipo de evento, fecha del evento y listado de
las reservaciones que se han realizado. Los eventos pueden ser de dos tipos: almuerzo o comida. La fecha
será registrada teniendo en cuenta la estructura f echa(dı́a, mes, año). Cada reservación contiene: número de
carné de identidad de la persona que reservó, cantidad de comensales y número de menú (que puede ser 1,
2 o 3).

Ejercicio 54. Proponga un hecho hipotético con functor evento de acuerdo a la descripción previamente
dada.

Ejercicio 55. Defina los siguientes selectores:

a) Mes de una fecha.

b) Cantidad de comensales en una reservación.

c) Tipo de menú solicitado.

Utilizando selectores implemente predicados para:

Ejercicio 56. Dado un mes, determinar la cantidad de reservaciones total que se han realizado en ese mes.

Ejercicio 57. Determinar cuántos comensales han realizado reservaciones con el menú 2.

Ejercicio 58. Dado un tipo de evento y una fecha, determinar si el restaurante está lleno. Tenga en cuenta
que para que el restaurante esté lleno debe estar cubierta toda su capacidad la cual es de 50 personas.

Problema 13. Una revista científica quiere construir un sistema en Prolog para la gestión de la información
relacionada con los artículos científicos que esta maneja. De cada artículo se almacenan los siguientes datos
en el siguiente orden:

i. Nombre

ii. Fecha en que se recibió el artículo para su revisión

iii. Estado de publicación

iv. Lista de autores

El estado de publicación consiste en:

Si el artículo ha sido publicado, los siguientes datos en el siguiente orden:


i. Número del volumen en que se publicó
ii. Fecha en que se aceptó el artículo para su publicación

Si no ha sido publicado, una única cadena «en revisión» que indica que el artículo aún no ha sido
publicado.

De cada autor se almacenan los siguientes datos en el siguiente orden:

i. Nombre

ii. Apellidos (una sola cadena)

iii. Institución a la que pertenece (una sola cadena)

Las fechas se componen de día, mes y año en ese orden.

Ejercicio 59. Implemente un hecho existe/1 que contenga una estructura con la información de un artículo
hipotético.

14
Ejercicio 60. Implemente selectores para obtener:

a) El nombre y apellidos de un autor.

b) El mes y año de una fecha dada.

c) El estado de publicación de un artículo.

Utilizando selectores implemente predicados para:

Ejercicio 61. Verificar si algún artículo ha sido aceptado para publicación en un mes y año dados.

Ejercicio 62. Obtener un listado con los nombres de los artículos en revisión.

Ejercicio 63. Determinar la cantidad de artículos que ha publicado un autor dado su nombre y apellidos.

Ejercicio 64. Obtener el listado de instituciones que han enviado artículos a la revista.

Problema 14. Se quiere confeccionar un programa en Prolog para gestionar los medios básicos y útiles que
se encuentran en los apartamentos de la residencia. De cada apartamento se almacenan los siguientes datos
en el orden especificado:

i. Identificador

ii. Tipo: apartamento de profesores o de estudiantes.

iii. Cantidad de cuartos.

iv. Listado de medios básicos.

v. Listado de útiles.

De cada medio básico se conoce el tipo (televisor, mesa, etc.) y el número de serie. De cada útil se conoce el
tipo (escoba, espejo, etc.) y la cantidad en existencia dentro del apartamento.

Ejercicio 65. Implemente un hecho existe/1 que contenga una estructura con la información de un apar-
tamento hipotético que posea al menos un medio básico y un útil.

Ejercicio 66. Implemente selectores para obtener:

a) El tipo de un medio básico.

b) El tipo y la cantidad de un útil.

c) La cantidad de cuartos y el tipo de un apartamento.

Utilizando selectores implemente predicados para:

Ejercicio 67. Verificar si algún apartamento de estudiantes posee una cantidad de cuartos dada.

Ejercicio 68. Obtener un listado con el número de serie de todos los televisores.

Ejercicio 69. Determinar la cantidad de medios básicos de un tipo dado.

Ejercicio 70. Determinar la cantidad de útiles que no sean de un tipo dado.

Problema 15. Se desea construir un sistema en Prolog para la gestión de almacenes de venta de productos
para el hogar. Los almacenes se identifican por un nombre único para cada uno, la provincia, el municipio, la
dirección y los datos de la mercancía que almacena. La mercancía es un conjunto de productos que pueden
tener asociada o no una garantía. Los productos sin garantía son todos aquellos útiles del hogar –por ejemplo
escobas, recogedores, platos, cucharas, etc.– mientras que los productos con garantía son los electrodomésticos
y muebles –por ejemplo lavadora, televisor, refrigerador, cama, sillón, etc. La garantía está dada en meses.
De cada producto se conoce el fabricante y el precio en CUP.

15
Ejercicio 71. Confeccione un hecho hipotético que represente la información de un almacén.

Ejercicio 72. Confeccione selectores para obtener:

a) La provincia y el municipio de un almacén.

b) El precio de un producto.

c) El tipo de un producto.

d) La garantía de un producto con garantía.

Utilizando selectores implemente predicados para:

Ejercicio 73. Devolver el nombre de un almacén que tenga más de 100 productos.

Ejercicio 74. Devolver la lista de almacenes cuya cantidad de útiles es mayor que 200 y pertenezcan a una
provincia dada.

Ejercicio 75. Devolver la cantidad de productos que se tiene en toda la base de conocimiento, de un tipo
determinado.

Ejercicio 76. Devolver la lista de almacenes que poseen al menos 300 escobas.

Ejercicio 77. Devolver la lista de las provincias de las cuales al menos un almacén posee una mercancía
valorada en más de 4000 CUP.

Ejercicio 78 (+). Devolver la lista de municipios que posean al menos N productos con garantía mayor
que G meses.

Ejercicio 79 (*). Devolver la lista de productos por cada provincia. El resultado debe escribirse por consola
con un formato ameno como se muestra en el siguiente ejemplo:
 
? - productos_por _provincia .
Provincia Granma :
Producto 1:
Tipo : cuchara
Fabricante : Fabricante de útiles del hogar
Precio : 5
Producto 2:
Tipo : plato
Fabricante : Fabricante de útiles del hogar
Precio : 25
Producto 3:
Tipo : refrigerador
Fabricante : Haier
Precio : 5000
Garantía : 4
Producto 4:
Tipo : televisor
Fabricante : Panda
Precio : 1000
Garantía : 4
Provincia Guantánamo :
Producto 1:
Tipo : escoba
Fabricante : Fabricante de útiles del hogar
Precio : 30
Producto 2:

16
Tipo : plato
Fabricante : Fabricante de útiles del hogar
Precio : 25
Producto 3:
Tipo : lavadora
Fabricante : Daewoo
Precio : 6250
Garantía : 5
Producto 4:
Tipo : refrigerador
Fabricante : Haier
Precio : 5000
Garantía : 4
true .
 

Ejercicio 80 (*). Verificar que no existen dos almacenes con el mismo nombre en la base de conocimiento.
La solución debe tener una complejidad temporal –en el peor caso– menor de O(n2 ) donde n es la cantidad
de almacenes en la base de conocimiento. Diga qué complejidad temporal –en términos de O grande– tiene
su solución en el peor caso.

17
Parte II.

Métodos de búsqueda

18
3. Búsqueda en general
Problema 16. Juan quiere armar un rompecabezas. Él cuenta con un tablero en el que debe colocar las
fichas y una foto de la imagen que debe corresponder con el rompecabezas armado. El procedimiento que
utiliza Juan para armar el tablero es completamente a ciegas. O sea, va probando manualmente determinadas
configuraciones al añadir piezas sin tener medida alguna de si va por buen camino. Juan es un poco impaciente
y quisiera terminar lo antes posible.

Ejercicio 81. De acuerdo a lo descrito anteriormente ¿cuál de las estrategias de búsqueda a ciegas estudiadas
cree usted que pueda efectuar Juan para armar su rompecabezas? Justifique.

Ejercicio 82. Proponga una función heurística para resolver el problema utilizando una de las búsquedas
tipo best-first estudiadas.

Problema 17. Una distribuidora de leche desea conocer el camino más corto para realizar su recorrido
comenzando en la estación central A y terminando en la estación de re-abastecimiento X.
En la siguiente tabla se muestra la relación de puntos intermedios y las conexiones entre dichos puntos.
Todas las conexiones listadas son unidireccionales.

Puntos Medida de distancia Se llega a Distancia


B 2
A 10
C 1
C 5
B 1 D 4
E 1
X 5
C 1
E 7
D 1 E 1
E 2 X 5
X 0 – –

Como se puede observar en la tabla, se posee una medida de distancia desde cada punto hacia el punto X.

Ejercicio 83. Escoja el algoritmo de búsqueda heurística más adecuado para resolver el problema. Justifique.

Ejercicio 84. Aplique el algoritmo seleccionado para encontrar el recorrido más corto desde A hasta X.
Deje plasmado el espacio de búsqueda generado y especifique la secuencia de lugares visitados.

Problema 18. Juan quiere construir un robot que utilice un algoritmo de búsqueda heurística para deter-
minar la secuencia de pasos que debe seguir en la construcción de formas utilizando piezas lego. La operación
de ensamblado supone un gasto de energía para el robot. Juan desea que este gasto sea el mínimo posible.
Además, cada pieza puede ser ensamblada solo con otras específicas. En la siguiente tabla se listan por filas
las configuraciones posibles y, para cada una de ellas, la energía que el robot gasta en pasar directamente
a cada una de las otras configuraciones—por ejemplo la energía que se gasta en pasar directamente de la

19
configuración A a la C es de 10 unidades. Una casilla con un guion (–) denota que no es posible pasar direc-
tamente de una configuración a la otra —por ejemplo, no es posible pasar directamente de la configuración A
a la D. En cada fila se muestra, entre paréntesis, los valores de la función heurística para cada configuración
considerando como estado objetivo a F —por ejemplo, el valor de la función heurística para la configuración
C es 2.
A B C D E F
A (9) – 2 10 – 1 –
B (5) – – 5 – – –
C (2) – – – 1 – 7
D (7) – – – – – –
E (9) – – – 1 – 9
F (0) 4 5 2 – 1 –
Ejercicio 85. Escoja el algoritmo de búsqueda heurística más adecuado a ser usado por el robot. Justifique.
Ejercicio 86. Aplique el algoritmo seleccionado asumiendo como estado inicial la configuración A y como
estado objetivo la configuración F . Diga la secuencia de pasos a realizar por el robot para este caso.
Ejercicio 87. ¿La función heurística dada es admisible? Justifique.
Ejercicio 88. Si se utilizara uno de los algoritmos de búsqueda a ciegas estudiados, ¿cuál propondría teniendo
en cuenta complejidad, completitud y optimalidad? Justifique.
Problema 19. Juan quiere recorrer un laberinto. Él comienza en la entrada A y debe terminar en la salida
F . Los senderos en el laberinto son unidireccionales. Esto significa que si se llega desde A a B por un sendero
no se puede regresar a A desde B por el mismo sendero. Juan consume un tiempo de caminata determinado
por cada sendero de acuerdo a la longitud del mismo. Además, antes de entrar en el laberinto, a Juan le dan
una medida del tiempo que tardará en salir desde cada lugar del mismo. Entre cada par de lugares hay, a lo
sumo, un sendero unidireccional que los conecta directamente.
En la siguiente tabla se muestra la relación de lugares y las conexiones unidireccionales entre los mismos.

Lugares Medida de tiempo Se llega a Tiempo


B 4
A 2 C 6
D 1
C 5
B 2
E 5
F 3
C 1
G 4
B 7
D 2
E 6
E 1 F 3
F 0 – –
G 10 – –

Ejercicio 89. Escoja el algoritmo de búsqueda heurística más adecuado para encontrar el camino para salir
lo más rápido posible del laberinto. Justifique su elección.
Ejercicio 90. Aplique el algoritmo seleccionado para determinar el camino de salida más rápido. Especifique
la secuencia de lugares visitados para llegar del origen A al destino F .

20
Ejercicio 91. De acuerdo a la información del problema ¿podemos decir, sin necesidad de ejecutar el
algoritmo escogido, que se encontrará el camino para salir lo más rápido posible del laberinto luego de
aplicar el algoritmo? Justifique.

Problema 20. Un comerciante recorre varias ciudades en una ruta elegida previamente. El comerciante
posee un conjunto de artículos antes de comenzar su recorrido y en cada ciudad hay un conjunto de artículos
a la venta. Por cada ciudad el comerciante o compra o vende, o sea, no puede realizar las dos acciones al
mismo tiempo en la misma ciudad en un mismo momento en el recorrido. El costo de cada artículo puede no
ser el mismo en diferentes ciudades. El comerciante puede comprar aunque no tenga dinero, lo que genera
una deuda que puede saldar si vende lo suficiente. Cada vez que el comerciante vende y tiene deuda, el
dinero recaudado es utilizado para saldar dicha deuda (completamente si el dinero es suficiente o parte de
esta en caso contrario). Cada artículo que el comerciante adquiere, posee un peso. Durante el recorrido, la
suma total de los pesos de los artículos comprados no puede sobrepasar un límite determinado. El objetivo
del comerciante es ganar la mayor cantidad de dinero al final del recorrido pero minimizando el peso de los
artículos adquiridos.

Ejercicio 92 (+). Proponga un algoritmo de búsqueda informada para lograr el objetivo del comerciante.
Justifique su elección.

Ejercicio 93. ¿El algoritmo de búsqueda seleccionado es completo? Justifique.

Ejercicio 94. ¿Puede utilizarse un algoritmo genético para este problema? Justifique.

Problema 21. Juan quiere graduarse de un diplomado en Inteligencia Artificial. Como parte del mismo se
oferta un conjunto de cursos, cada uno de los cuales aporta una cantidad determinada de créditos. Mientras
mayor es el crédito de un curso mayor es la complejidad del mismo. Cada curso se rige por una planificación
de tal forma que algunos cursos son requisito para recibir otros. Juan solo puede recibir un curso al mismo
tiempo. Para que pueda graduarse del diplomado es necesario que acumule como mínimo 5 créditos. Juan es
impaciente y quisiera graduarse lo más rápido posible.
A continuación se muestra una tabla donde la celda i, j se marca con una X si el curso j puede ser recibido
luego del curso i. Por ejemplo, luego del curso 2 pueden recibirse los cursos 1 y 4. En cada fila, entre paréntesis
se muestra la cantidad de créditos que aporta el curso y la duración del mismo en días. Por ejemplo el curso
4, aporta 2 créditos y tiene una duración de 15 días.
C1 C2 C3 C4 C5
C1 (1; 5) X X
C2 (3; 25) X X
C3 (1; 4) X X
C4 (2; 15) X X
C5 (1; 6) X X

Ejercicio 95 (+). Modele el problema como uno de optimización para ser resuelto utilizando una búsqueda
local.

Ejercicio 96 (*). Modele el problema para ser resuelto utilizando A*.

Ejercicio 97 (+). Genere el espacio de búsqueda utilizando A* hasta la sexta iteración.

21
4. Minimax
Problema 22. Dados los siguientes dos árboles de juego aplique la estrategia minimax con poda alfa-beta.
Asuma que los nodos son generados de izquierda a derecha y el jugador en turno desea minimizar.

Ejercicio 98.

3 8 3 2 1 3 1 2 3 6 7 7 4

Ejercicio 99.

10 5 4 7 2 4 2 6 7 5 8 1 2 7 6 5

Ejercicio 100. Aplique el algoritmo minimax con poda alfa-beta considerando el siguiente árbol de juego.
Asuma que los nodos son generados de izquierda a derecha y el jugador en turno desea maximizar. Muestre
el espacio de búsqueda generado.

Ejercicio 101. En el árbol de variantes de un juego de mesa creado por un grupo de estudiantes de la
Universidad de Oriente, se utiliza una función de evaluación estática para medir la calidad de las posiciones

22
surgidas. En una de las posiciones obtenidas en el juego, se utilizó un árbol de altura 4 para determinar la
jugada a realizar por el jugador en turno, que maximiza la función estática a su favor. El factor de ramificación
en cada posición es 2. A continuación se presenta la evaluación estática de los nodos terminales de dicho
árbol:

2 4 3 7 4 5 8 6 5 7 6 10 5 9 4 1

Ejecute el algoritmo minimax con poda alfa-beta a partir de la situación planteada. Señale las podas si
hay. Señale la mejor variante que analiza el jugador en turno.

Ejercicio 102. Aplique la estrategia minimax con poda alfa-beta considerando el siguiente árbol de juego.
Asuma que los nodos son generados de izquierda a derecha y el jugador en turno desea maximizar.
Diga cuál sería la jugada a efectuar por el jugador en turno. Señale en el árbol de juego los nodos que no
se generaron durante el proceso de búsqueda.

A B C

3 4 3 2 1 3 5 7 5 6 7 4 5

23
5. Algoritmos genéticos
Problema 23. Juan quiere comprar en la panadería que queda al frente de su casa. En este establecimiento
se venden diferentes variedades de productos confeccionados con harina. Cada producto tiene un precio que
no siempre está acorde a la calidad del mismo. O sea, pueden encontrarse productos caros y de mala calidad.
Por cada producto se conoce la calidad (medida en una escala del 1 al 10) y el precio (entre 1 y 25 CUP).
Juan necesita decidir qué productos comprar de tal forma que se minimice el gasto total y se maximice la
calidad total.
Determine y describa poniendo un ejemplo los siguientes elementos a utilizar en un algoritmo genético
para determinar la mejor distribución de n cajas en un camión determinado.

Ejercicio 103. Codificación. Proponga una población inicial de 4 individuos.

Ejercicio 104. Función de aptitud.

Ejercicio 105. Operador de cruzamiento.

Ejercicio 106. Operador de mutación.

Problema 24. Juan quiere armar un robot humanoide de juguete. El robot se compone de cabeza, torso
y extremidades superiores e inferiores (vienen en pares). Existen varias piezas específicas para cada una de
estas partes, pero cada una tiene un costo. Juan solo debe elegir la cabeza, el torso y las extremidades para
armar su robot, pero quiere que esto le cueste la menor cantidad de dinero.
Proponga los siguientes elementos a utilizar en un algoritmo genético para resolver el problema.

Ejercicio 107. Codificación.

Ejercicio 108. Función de aptitud.

Ejercicio 109. Operador de cruzamiento.

Ejercicio 110. Operador de mutación.

Problema 25. En una granja donde se cosecha mango se desea construir un sistema que determine la mejor
manera de distribuir el producto en los camiones que los transporta. Conociéndose la calidad y el peso de
cada caja, se desea que cada camión contenga los mangos de la mayor calidad posible y que el peso total sea
exactamente de T unidades por cada camión.
Proponga los siguientes elementos a utilizar en un algoritmo genético para determinar la mejor distribución
de n cajas en un camión determinado.

Ejercicio 111. Codificación.

Ejercicio 112 (+). Función de aptitud.

Problema 26. Juan quiere comprar en la dulcería que queda al frente de su casa. En este establecimiento
se venden diferentes variedades de dulces y confituras. Juan desea guardar algunos de los productos para ir
consumiéndolos poco a poco. Cada producto tiene un precio que no siempre está acorde a la durabilidad del
mismo. O sea, pueden encontrarse productos caros y de poca durabilidad. Por cada producto se conoce la
durabilidad (en días) y el precio (en CUP). Juan necesita decidir qué productos comprar de tal forma que se
minimice el gasto total y se maximice la durabilidad total. Juan solo tiene espacio para llevar m productos
de n disponibles a la venta en el establecimiento.
Proponga los siguientes elementos a utilizar en un algoritmo genético para determinar la mejor distribución
de n cajas en un camión determinado.

24
Ejercicio 113. Codificación.

Ejercicio 114 (*). Función de aptitud.

Ejercicio 115. Operador de cruzamiento.

Ejercicio 116. Operador de mutación.

Problema 27. Un comerciante recorre n ciudades en una ruta elegida previamente. El vendedor cuenta
con n productos y vende un producto por ciudad. Cada producto tiene un precio diferente por cada ciudad.
Sin embargo, cada producto que él transporta tiene un peso determinado, lo que lo hace más lento para
trasladarse de una ciudad a otra. O sea, el tiempo que se tarda el comerciante en viajar de una ciudad A
a otra B es proporcional a la multiplicación del peso que tenía en la ciudad A (luego de vender en dicha
ciudad) con la distancia entre las ciudades A y B. El objetivo del comerciante es realizar el viaje lo más
rápido posible de tal manera que se maximice la cantidad de dinero recaudado.
Proponga los siguientes elementos a utilizar en un algoritmo genético para resolver el problema.

Ejercicio 117. Codificación.

Ejercicio 118 (*). Función de aptitud.

Ejercicio 119. Operador de cruzamiento.

Ejercicio 120. Operador de mutación.

25

También podría gustarte