Aula3

23
Prolog Aula #3 Hugo Pires @ Universidade Lusófona do Porto 1

description

AI

Transcript of Aula3

  • Prolog Aula #3

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    1

  • Programa - Significado

    Um programa Prolog pode ser interpretado de duas formas:

    Declarativa

    Diz respeito apenas definio das relaes de um programa e a qual ser o resultado do mesmo

    Procedimental

    Diz respeito ao modo como o resultado obtido e a forma como as relao so calculadas pelo motor de inferncia do Prolog

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    2

  • Programa - Significado

    A facilidade com que o Prolog resolve automaticamente muitos dos aspectos procedimentais deve ser visto como uma vantagem

    Deve encorajar o programador a especificar os seus programas de uma forma declarativa

    Infelizmente nem sempre tal possvel

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    3

  • Significado - Exemplo

    Considere a clusula

    P:- Q,R.

    De um ponto de vista declarativo a clusula pode ser lida como:

    P verdadeiro se Q e R forem verdadeiros

    Q e R implicam P

    Do ponto de vista procedimental podemos ler a mesma clusula como:

    Para resolver o problema P temos de resolver primeiro o sub-problema O e depois o sub-problema R.

    Para satisfazer P temos de, primeiro, satisfazer Q e depois R.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    4

  • Significado - Exemplo

    A diferena entre estas interpretaes reside no facto de na ltima, para alm da definio lgica das relaes entre a cabea e o corpo da clusula, tambm relevante a ordem pela qual as condies so processadas.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    5

  • Significado - Exemplo Base de Conhecimento

    #1

    progenitor(marta,maria).

    progenitor(maria,jose).

    antepassado(X,Y):- progenitor(X,Y).

    antepassado(X,Y):- progenitor(X,Z),

    antepassado(Z,Y).

    Base de Conhecimento

    #2

    progenitor(marta,maria).

    progenitor(maria,jose).

    antepassado(X,Y):- progenitor(X,Y).

    antepassado(X,Y):- antepassado(Z,Y),

    progenitor(X,Z).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    6

  • Significado - Exemplo ?-antepassado(maria,X).

    Resposta BC #1 X=jose;

    false.

    ?-antepassado(maria,X).

    Resposta BC #2 X=jose;

    (ciclo infinito!)

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    7

  • Significado - Exemplo

    Apesar de ambos os programas terem o mesmo significado declarativo, pois a operao de conjuno comutativa, o significado procedimental diferente

    O segundo programa perante a mesma questo entra num ciclo infinito!

    Para alm da ordem das condies a provar tambm a ordem das clasulas relevante!

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    8

  • Significado - Exemplo

    Exerccios

    1. Construa a rvore de prova para a BC #2 e comprove.

    2. Altere na BC #1 a ordem das clusulas #3 e #4 e repita o exerccio.

    E porque no construmos programas esquecendo por completo o seu significado declarativo?

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    9

  • Significado - Exemplo

    Porque evoluo em programao sempre evitarmos os detalhes de implementao e focarmo-nos no problema a resolver.

    O objectivo procurarmos que seja o sistema, e no o programador, a resolver as questes de implementao.

    Concluso: O Prolog ajuda-nos a percorrer esse caminho mas com limitaes!

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    10

  • Representao dum Problema

    Um macaco est a porta de uma sala. No centro dessa sala est uma banana pendurada no tecto. O macaco est com fome e quer comer a banana mas no consegue esticar-se o suficiente para agarrar a banana. Junto da janela da sala est uma caixa que o macaco pode usar.

    O macaco pode realizar as seguintes aces: andar, subir caixa, empurrar a caixa (se estiver junto dela) e agarrar a banana (se estiver em cima da caixa e por baixo da banana).

    Ser que o macaco consegue comer a banana?

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    11

  • O macaco e a banana

    Um dos aspectos fundamentais em programao definir uma representao de um problema em termos do paradigma utilizado.

    Neste exemplo podemos ver o problema como uma mquina de estados

    Cada estado determinado pela posio dos objectos e a transio entre estados definida por um movimento

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    12

  • O macaco e a banana

    Analisando a descrio do problema:

    O macaco tem uma posio horizontal e outra vertical

    A caixa tem uma posio

    O macaco pode ou no ter a banana

    O estado inicial ser constitudo pelos seguintes factos:

    O macaco est no cho

    O macaco est junto porta

    A caixa est junto da janela

    O macaco no tem a banana Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    13

  • O macaco e a banana

    Podemos combinar esta situao num functor que agrega estas situaes

    estado(posio horizontal, posio vertical,

    posio da caixa, tem ou no a banana)

    Assim sendo o nosso objectivo atingir o estado

    estado(_, _, _, tem)

    O estado inicial ser definido por

    estado(na_porta, no_chao, na_janela, nao_tem)

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    14

  • O macaco e a banana

    Os movimentos possveis sero:

    agarrar a banana

    subir caixa

    empurrar a caixa

    andar

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    15

  • O macaco e a banana

    Como vimos para transitarmos de um estado para outro temos que utilizar um movimento

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    16

    Estado Inicial

    #0

    Mov #1 Estado #1

    Mov #2 Estado #2

    Estado Final

    #N

  • O macaco e a banana

    Cada movimento M pode ser representado pelo functor

    mov(Estado1,M,Estado2)

    Temos de restringir a transio de estados aos movimentos possveis

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    17

  • O macaco e a banana

    O macaco agarra a banana

    mov(estado(no_meio, na_caixa, no_meio, nao_tem),

    agarra,

    estado(no_meio, na_caixa, no_meio, tem)).

    O macaco sobe caixa (est junto a ela)

    mov(estado(X, no_chao, X, Z),

    sobe,

    estado(X, na_caixa, X, Z)). Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    18

  • O macaco e a banana

    No cho o macaco pode andar livremente

    mov(estado(X1,no _chao,Y,Z),

    andar(X1,X2),

    estado(X2,no_chao,Y,Z)).

    Esta clusula representa tambm outras situaes

    O macaco empurra a caixa livremente

    mov(estado(X1,no _chao,X1,Z),

    empurra(X1,X2),

    estado(X2,no_chao,X2,Z)). Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    19

  • O macaco e a banana

    A questo que o programa deve ser capaz de responder :

    Dado um estado inicial E o macaco consegue agarrar a banana?

    Esta questo pode ser formulada pelo predicado

    consegue(S).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    20

  • O macaco e a banana

    Quando que o macaco termina com a banana (objectivo)?

    Quando j a tem no estado inicial (facto)

    consegue(estado(_,_,_,tem)).

    Quando parte de um estado E1 e existe um movimento M que o transita para o estado E2 e nesse estado o macaco tem a banana

    consegue(E1):-mov(E1,M,E2),consegue(E2).

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    21

  • O macaco e a banana

    Coloquemos a questo

    consegue( estado( na_porta, no_chao, na_janela, nao_tem) ).

    Devido ordem das clusulas o Prolog responde true e apenas necessitou de efectuar o retrocesso (backtracking) 1 vez.

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    22

  • O macaco e a banana

    A ordem definida determina tambm as preferncias do macaco:

    1. Agarrar a banana

    2. Subir caixa

    3. Deslocar a caixa

    4. Passear

    Ainda que a troca da ordem das clusulas no interfira com o significado declarativo do programa condiciona a sua execuo procedimental!

    Hu

    go P

    ire

    s @

    Un

    ive

    rsid

    ade

    Lu

    sfo

    na

    do

    Po

    rto

    23