sesion6: sección de constants y backtracking · facultad de ingeniería y arquitectura sección de...

18
Facultad de Ingeniería y Arquitectura 2017-II Ingeniería de Sistemas – Sistemas Expertos Sesion6: Sección de Constants y Backtracking Oscar Bazán Ch.

Upload: dinhkhanh

Post on 05-Oct-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Facultad de Ingeniería y Arquitectura 2017-II Ingeniería de Sistemas – Sistemas Expertos

Sesion6: Sección de Constants y Backtracking

Oscar Bazán Ch.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

La sección Contants:

Cabe resaltar que al usarla no diferencia entre

minúsculas y mayúsculas, es diferente que las

variables:

Ejm:

CONSTANTS

Dos = 2

GOAL

A=dos, write(A).

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

En el ejemplo anterior mostrará el valor 2 seguido

de A= 2.

Otra cosa, la declaración debe darse antes del

inicio del programa o antes de cualquier

declaración.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

BACKTRACKING

Cuando se busca información, se va a la parte

superior de todo el programa.

Para hacer un match de igual forma.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Ejemplo y explicación de backtracking:

PREDICATES

nondeterm le_gusta(symbol,symbol)

sabe(symbol,symbol)

nondeterm comida(symbol)

CLAUSES

le_gusta(peter,X):-

comida(X), sabe(X,bien).

sabe(pizza,bien).

sabe(amburguesa,regular).

comida(amburguesa).

comida(pizza).

GOAL

le_gusta(peter, Que).

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Se puede apreciar el orden en que se han

colocado los hechos.

1ero. Se llama a “comida(Que)”.

Lo primero que encuentra es “amburguesa”. (3era

línea)

2do. Busca el match (yendo a la parte superior

nuevamente) con “sabe(amburguesa, regular)”

(2da línea). Pero no satisface.

3ero. Retrocede a comida(“amburguesa”) donde

se quedó y toma el siguiente valor:

comida(“pizza”).

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

De esta forma hizo backtracking.

Que=pizza

1 Solution

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

DIFERENCIA “<>”

VEAMOS CÓMO SE MANIFIESTA UN

BACKTRACKING MEDIANTE LA DIFERENCIA:

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

DOMAINS

joven = symbol

edad = integer

PREDICATES

nondeterm jugador(joven, edad)

CLAUSES

jugador(peter,19).

jugador(paul,24).

jugador(oscar,20).

jugador(susana,19).

GOAL

jugador(Persona1, 19),

jugador(Persona2, 19),

Persona1 <> Persona2.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

¿Cuál crees que debe ser el resultado del Goal?.

Lo más lógico sería:

Persona1=peter, Persona2=susana

1 solution

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Sin embargo por el backtracking empleado en

Visual Prolog, cada vez se inicia nuevas

búsquedas.

Cuando llegue a buscar a partir de

jugador(susana,19) como Persona1, encontrará

primero a peter y el resultado real será:

Persona1=peter, Persona2=susana

Persona1=susana, Persona2=peter

2 Solutions

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Se concluye que el backtracking podría ocasionar

resultados redundantes. Es por ello que se

debería tener mucho cuidado con la lógica

empleada.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Con el mismo ejemplo, si nuestro Goal fuese:

jugador(Person1, 19), jugador(Person2, 20).

¿Cuál sería el resultado?...

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

Veamos OTRO EJEMPLO DE BACKTRACKING:

DOMAINS

nombre,cosa = symbol

PREDICATES

le_gusta(nombre, cosa)

lee(nombre)

es_investigador(nombre)

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

CLAUSES

le_gusta(john,correr):-!.

le_gusta(juan,nadar):-!.

le_gusta(pedro,libros):-!.

le_gusta(susana,peliculas):-!.

le_gusta(Z,libros):-

lee(Z),

es_investigador(Z).

lee(john).

es_investigador(john).

Goal

le_gusta(X,correr).

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

La respuesta:

X=john

1 Solution.

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking

PRINCIPIOS BÁSICOS DE BACKTRACKING:

1. Los subgoals se pueden satisfacer de la parte

superior hacia la inferior del programa.

2. Las cláusulas son revisadas en orden, de arriba

hacia abajo del programa.

3. Cuando un subgoal hace match con la cabecera

de la regla, el cuerpo de la regla podría también

satisfacerse. O sea, el cuerpo de la regla

constituye un nuevo grupo de subgoals a

satisfacer.

4. Un goal se satisface cuando se halla un match

de un hecho para cada uno de las extremidades

(hojas) de un árbol – goal.

FIN

Facultad de Ingeniería y Arquitectura Sección de Constants y Backtracking