hgees / WumpusGodMode

Repositório para o trabalho do Wumpus para a disciplina de Lógica Matemática do curso de Engenharia de Automação e Controle da UPE - Universidade de Pernambuco
GNU General Public License v2.0
1 stars 0 forks source link

adjacentes(Posicao, Lista) #12

Closed drbeco closed 8 years ago

drbeco commented 8 years ago

Oi pessoal, queria dar uma sugestão importante.

Poderíamos ter uma função que retornasse as casas adjacentes a casa atual (ou a qualquer casa dada).

Por exemplo, se estou na casa minhaposicao([2,2]) e chamo:

minhaposicao(P),
adjacentes(P, L)

Então L=[[3,2], [2,3], [1,2], [2,1]]

Ou se estou na posição [1,1], então a lista fica apenas com L=[[2,1], [1,2]]

Essa função é uma intermediária para depois ser usada em funções mais complexas.

drbeco commented 8 years ago

Questão:

Se eu tenho uma lista de casas seguras, uma lista de casa adjacentes e uma lista de casas visitadas, e quero calcular uma lista opções de casas para visitar em seguida, quais operações de conjuntos eu faço? (União, intersecção, subtração, etc.)?

Suponha:

CS = lista de casas seguras
CV = lista de casas visitadas
CA = lista de casas adjacentes
CO = lista de opções de casas para visitar nas próximas rodadas

Então a fórmula lógica é?

CO = ??


Operações PROLOG para testar:

$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- union([[1,1], [2,2]], [[1,1], [3,3]], L).
L = ??

?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L).
L = ??

?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L).
L = ??

?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L).
L = ??

?- 

Discussão abaixo:

hgees commented 8 years ago

Muito obrigado pela ajuda professor, foi de grande ajuda, a parte da percepção de casas adjacentes está em andamento

drbeco commented 8 years ago

Gostaria que o grupo me desse uma resposta a essa questão:

CO=??

Estou usando para avaliar vocês. Ok? Estou no aguardo.

hgees commented 8 years ago

CO= ((CS União CV) Interseção CA)

Creio que esta seja a resposta para a questão

drbeco commented 8 years ago

Se o grupo estiver de acordo, façam um experimento com listas fictícias e testem (como eu escrevi ali na parte final da questão, Operações PROLOG para testar)

hgees commented 8 years ago

Após testadas as operações os resultados foram os seguintes:

$ swipl
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6)
Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- union([[1,1], [2,2]], [[1,1], [3,3]], L).
L = [[2, 2], [1, 1], [3, 3]].

?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L).
L = [[1, 1], [2, 2], [3, 3]].

?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L).
L = [[1, 1], [2, 2]].

?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L).
L = [[1, 1], [2, 2], [3, 3]].
guidoferrario commented 8 years ago

Após os testes, os resultados foram:

Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 6.6.6) Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- union([[1,1], [2,2]], [[1,1], [3,3]], L). L = [[2, 2], [1, 1], [3, 3]].

?- list_to_set([[1,1], [2,2], [1,1], [3,3]], L). L = [[1, 1], [2, 2], [3, 3]].

?- intersection([[1,1], [2,2], [3,3], [2,1]], [[1,1], [2,2], [1,2]], L). L = [[1, 1], [2, 2]].

?- subtract([[1,1], [2,2], [3,3], [4,4], [2,1]], [[4,4],[2,1],[1,2]], L). L = [[1, 1], [2, 2], [3, 3]].

Portanto, acredito que: CO = ((CS ∪ CS) ∩ CV )

drbeco commented 8 years ago

Que testes são esses que vocês estão fazendo que estão apenas repetindo meus exemplos? Inventem listas fictícias para fazerem os testes. Por exemplo, se o agente já andou umas duas ou três casas, começando pela [1,1], e foi parar lá no miolo do tabuleiro, e quer agora calcular CO

CS = Invente uma lista de casas seguras aqui
CV = Idem para lista de casas visitadas
CA = E idem para lista de casas adjacentes
CO = ?

Que estranho essas respostas de vocês. Copiando meu próprio texto, não está me acrescentando nada de novo. Esses testes eu mesmo já fiz.


Outra coisa, fazer a união de CS com CS não muda nada.

hgees commented 8 years ago

Professor, eu fiz testes com listas aleatorias criadas por mim porém só mandei essa pois foi a que você enviou como exemplo e eu quis seguir uma linha única de raciocínio.

E a união de CS com CS deve ter sido um erro de digitação do Guido, se estiver errado me corrija por favor.

guidoferrario commented 8 years ago

Realmente foi um erro meu. Peço desculpas. Acredito que o correto seria CO = ((CS ∪ CV) ∩ CA ).

drbeco commented 8 years ago

Exemplo:

-----------------------------------------
|         |     P   |         |       G |
-----------------------------------------
|         |     P   | W       |         |
-----------------------------------------
|         |         |     P   |         |
-----------------------------------------
|         |   A     |         |         |
-----------------------------------------

Suponha que o agente já andou por [1,1], [2,1] e [3,1] e está de volta para a casa [2,1] e agora quer calcular uma casa segura e não visitada e adjacente (no caso a resposta é a casa [2,2]). Como fazer?

Faça as listas:

CS = lista de casas seguras
CV = lista de casas visitadas
CA = lista de casas adjacentes

Faça um teste no prompt do PROLOG com a fórmula por você criada:

CO = fórmula? Lista resultante?

Mostre a fórmula usando as operações acima (intersecção, união, subtração, ou outra operação de lista/conjunto que precisar), mostre o teste feito no swipl (direto no prompt).

hgees commented 8 years ago

Resolvido o problema da issue. Fechado.