Departamento de Informática Faculdade de Ciências Universidade de Lisboa Sistemas Baseados em Conhecimento Primeiro Teste 24 de Abril de 2008 Nome Completo: Nº Aluno: Licenciatura: com consulta 1 hora e 30 minutos Responda às perguntas nesta própria folha, nos espaços indicados. (I) (7 valores) 1. Considere uma das variantes do jogo do Nim para dois jogadores em que temos inicialmente uma pilha de 7 fósforos, e uma jogada consiste em dividir uma das pilhas em duas pilhas não vazias e diferentes. Por exemplo, o primeiro jogador, pode dividir a pilha única de 7 em duas pilhas de 1 e de 6, ou de 2 e de 5, ou de 3 e de 4, mas não pode dividi-la em duas de 3 fósforos. No caso da primeiro jogador ter dividido a pilha inicial em duas de 3 e de 4, o segundo jogador pode dividir a de 3 em duas: [1,2], ou a de 4 em duas: [1,3] e assim por diante. O jogador ganha quando o adversário não puder dividir nenhuma das pilhas, ou seja quando só existirem pilhas de 1 e de 2 fósforos. a) Construa a árvore de pesquisa {Dica: Se construir o grafo do espaço de estados e não a árvore poupa espaço.}. A ordem das pilhas não é importante, senão teríamos uma árvore muito mais extensa e redundante. b) Defina uma função de utilidade para os estados terminais. Derrota = -1 e vitória = +1. Não há empates. 1/1
c) Aplique o algoritmo minimax. Resolva esta alínea na fig. da alínea a. d) Será que existe uma estratégia vencedora para o primeiro jogador? O valor da raiz é -1, que corresponde a uma derrota, o que quer dizer que não há estratégia vencedora. 2. Considere a árvore de jogo na figura seguinte onde A-F representam alguns valores reais. Assuma que os nós são explorados da esquerda para a direita e que utilizamos o algoritmo alfa-beta a) Atribua um valor a A de tal modo que B seja cortado. Justifique. Se A tiver um valor maior ou igual a 5, não precisaremos de continuar a avaliar os nós irmãos, porque vai haver um corte. Quando o nó antecessor de A invoca o alfabeta sobre o seu primeiro sucessor (A) ele tem alfa=- e beta=5. Após a avaliação da folha A (por exemplo 5) alfa é actualizado e fica com o valor 5. Como alfa é maior ou igual a beta então corta! 2/2
b) Supondo que as folhas com o valor 5 e 0 poderiam ser alteradas, existiria alguma maneira de cortar o nó A? Não! Porque antes de avaliar A o nó antecessor tem alfa=- e não há maneira (independentemente do valor de beta, que é igual ao menor valor das duas folhas mais à esquerda) desse alfa ser maior do que qualquer beta, - é o menor valor possível. c) Existem valores para A e B de modo a que a subárvore que contém C e D seja podada? Justifique. Não! Por razões semelhantes às invocadas em cima. Quando o nó antecessor da subárvore que contém C e D começa a executar o algoritmo de alfa e beta, tem alfa=min(max(5,0),max(a,b)) e beta=+ e não há maneira do alfa (qualquer que seja o seu valor) de ser maior do que +, para qualquer A ou B. d) Sendo A=B=5, dê valores a C e a D de modo a que a subárvore que contem E e F seja podada. Justifique. Se A e B forem 5, então quando vamos avaliar o nó raiz da subárvore binária que contém C e D, teremos alfa=5 e beta=+. Se C e D forem inferiores ou iguais a 5, isso quer dizer que o antecessor de C e D vai terá alfa=5 e beta=5 e teremos um corte na subárvore de E e F, porque alfa maior ou igual a beta. É o que acontece quando C=D=5, por exemplo. e) Tendo a possibilidade de escolher os valores dos nós de A-F, qual o máximo número de folhas que é possível podar? Justifique. Só podemos podar 3 folhas. Já vimos que não podemos podar C e D. Não podemos podar nunca as duas primeiras folhas (a contar da esquerda) porque beta é sempre igual a +. Não podemos podar A porque alfa=-, quando o vamos avaliar e alfa não pode ser maior do que beta. Já vimos que podemos podar E e F e B. 3/3
(II) (7) Uma parte de um bosque de um parque florestal precisava de ser desbastada, para reflorestamento. Inicialmente existiam 49 abetos dispostos numa matriz de 7 por 7, como mostra a figura, quando os lenhadores acabaram o seu trabalho, tinham removido 29 árvores e conseguiram deixar 20, que ficaram dispostas em 18 linhas com 4 árvores cada! Como fizeram isto? O objectivo é procurar a solução do problema do reflorestamento (descrito em cima) utilizando o Paradigma de Espaço de Estados. a) Defina uma representação para os estados. Uma maneira de representar pode ser um tuplo com a lista de árvores desbastadas, uma lista de árvores por desbastar, o número dessa lista e o número de linhas de tamanho 4 que existem. Uma árvore desbastada é um ponto com as coordenadas da árvore (linha+coluna, ordem de cima para baixo e da esquerda para a direita). b) Como são os estados iniciais e finais? O estado inicial é um triplo com (0,[],[(1,1),(1,2), (7,7)],0). O estado final tem como primeiro elemento do tuplo, 29 e como último 18, no meio tem uma lista de 29 árvores desbastadas e outra com vinte por desbastar. 4/4
c) O que são os operadores? Um operador consiste em ir buscar uma árvore ainda não desbastada, à terceira lista e colocá-la na lista das árvores desbastadas. É preciso incrementar o primeiro elemento do tuplo e actualizar o número de linhas com 4 árvores. d) Que algoritmo de pesquisa acha mais adequado para o resolver? Porquê? A pesquisa em profundidade é uma boa opção no caso de querermos utilizar uma pesquisa cega. Não queremos optimizar, não há a hipótese de termos ciclos, os estados finais estão todos à mesma profundidade. (Pelas razões inversas, tanto a largura como o aprofundamento progressivo, seriam uma hipótese pouco razoável). Poderíamos optimizar a profundidade se tivéssemos operadores que atinjam becos sem saída quando já não é possível atingir uma solução. (explicado em baixo). Uma boa solução seria o trepa-colinas (desce-gradiente) em que escolheríamos o sucessor com menor valor heurístico. Isso depende da heurística mas seria um caso a explorar. (discutem-se as heurísticas em e) e) Pense numa heurística e discuta a sua admissibilidade. Podemos contar o número de linhas com 4 árvores que ficaram por desbastar e fazer a diferença entre o número 18 e esse valor. A heurística terá o valor 0 no objectivo. Não convém que a heurística seja menor do que zero, por isso se houver mais do que 18 linhas com 4 árvores e ainda árvores por debastar das 29, então daremos uma punição a esse estado, (obtendo por exemplo o seu simétrico). Convém que tenha um valor muito alto no caso de não podermos satisfazer o objectivo. Basta pensar que já não temos 18 linhas com mais de 4 árvores. Devemos dar um valor muito alto (o mais alto possível) a esses estados. A admissibilidade não faz sentido aqui porque a distancia para o objectivo é sempre conhecida. Nós sabemos logo que vamos cortar 29 árvores e sabemos quantas já cortámos. 5/5
(III) (6,5 valores) 1. Considere o espaço de estados apresentado na figura em baixo, em que S é o estado inicial e G 1 ou G 2 são os estados finais; os arcos apresentam os custos dos operadores de transição entre estados e em que associados aos estados temos os valores heurísticos respectivos. Para cada um dos algoritmos listados nas alíneas a seguir, indique qual o objectivo alcançado, o caminho solução e a sequência de estados visitados. a) Largura, com memoria de visitados. Evolução da Largura: ((0 S)) (S) não é solução e remove-se, adiciona-se dois novos caminhos sucessores de (S). A e C ainda não expandidos. ((2 A S) (3 C S)) (A S) não é solução e remove-se, adiciona-se dois novos caminhos sucessores de (A S). ((3 C S) (B A S) (E A S)) (A S) não é solução e remove-se, adiciona-se no fim dois novos caminhos sucessores de (A S). D e G 2 não tinham sido visitados. ((B A S) (E A S) (D C S) (G 2 C S)) (B A S) não é solução e remove-se, C e D já tinham sido visitados, mas não G 1. ((E A S) (D C S) (G 2 C S) (G 1 B A S)) (E A S) não é solução e remove-se, E não tem sucessores ainda não visitados. ((D C S) (G 2 C S) (G 1 B A S)) (D C S) não é solução e remove-se, D não tem sucessores ainda não visitados. ((G 2 C S) (G 1 B A S)) (G 2 C S) é solução! O Caminho solução (com menos operadores) é S C G 2 A sequência de visitados é S A C B E D G 2 G 1 O objectivo atingido foi G 2 6/6
b) Aprofundamento progressivo. Nível 1 ((S)) (S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa () Nível 2: ((S)) (S) não é solução, é retirado e temos dois sucessores: A e C ((A S) (C S)) (A S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa ((C S)) (C S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa () Nível 3 ((S)) (S) não é solução, é retirado e temos dois sucessores: A e C ((A S) (C S)) (A S) não é solução, retiramos e como A tem 2 sucessores colocamos à cabeça dois novos caminhos ((B A S) (E A S) (C S)) (B A S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa ((E A S) (C S)) (C A S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa ((C S)) (C S) não é solução, retiramos e como C tem 2 sucessores colocamos à cabeça dois novos caminhos ((D C S) (G 2 C S)) (D C S) não é solução, retiramos e não tem sucessores porque chegámos ao limite da pesquisa ((G 2 C S)) (G 2 C S) não é solução! Objectivo atingido G 2 Caminho Solução: S C G 2 Sequência de visitados: S S A C S A C B E D G 2 c) Custo Uniforme com programação dinâmica. ((S)) (S) não é solução e remove-se, adiciona-se no fim dois novos caminhos sucessores de (S). A e C não tinham sido visitados. S é adicionado à lista de expandidos ((A S) (C S)) (A S) não é solução e remove-se, adiciona-se no fim dois novos caminhos sucessores de (A S). B e E não tinham sido expandidos. A é adicionado à lista de expandidos. ((3 C S) (3 B A S) (10 E A S)) (3 B A S) não é solução (igual valor que (3 C S), mas ganha no critério de desempate) e remove-se, adicionase no fim dois novos caminhos sucessores de (A S). C e D e G 1 não tinham sido expandidos. B é adicionado à lista de expandidos. (3 C B S) não é adicionado porque não é mais curto do que outro caminho que acaba em C: (3 C S). ((10 E A S) (4 D B A S) (3 C S) (7 G 1 B A S)) (3 C S) não é solução e remove-se, D e G 2 não tinham sido expandidos, mas (4 D C S) não é mais curto do que o caminho já existente que acaba em D. C é expandido! ((10 E A S) (4 D B A S) (8 G 2 C S) (7 G 1 B A S)) (4 D B A S) não é solução e remove-se, D tem como sucessores os dois objectivos que não foram expandidos claro. (9 G 1 D B A S) não é melhor do que o caminho que temos para o primeiro objectivo mas (6 G 2 D B A S) é ((10 E A S) (6 G 2 D B A S) (7 G 1 B A S)) (6 G 2 D B A S) é solução! O Caminho solução óptimo é S A B D G 2 A sequência de visitados é S A C B E D G 1 G 2 G 2 O objectivo atingido foi G 2 7/7
2. Quantos nós serão visitados se, para o grafo seguinte, ao procurarmos um caminho entre I e F, aplicarmos o A* com programação dinâmica? E qual o caminho solução? Suponha em que todos os nós estão ligados através das distâncias em linha recta excepto os arcos em zigzag que ligam ao estado final F. Todos os arcos que não ligam a F estão desenhados à escala e todos os arcos que ligam a F têm o mesmo comprimento (100 vezes maiores do que o maior dos outros). A heurística é a distancia em linha recta até F. F I Todos os nós são visitados até chegarmos a F expandindo qualquer o nó com menor valor de custo+heurística, porque os nós em cada nível têm os mesmos sucessores sempre. Até atingirmos F todos os nós terão sido visitados pelo menos uma vez. Os 18 estados foram visitados pelo menos uma vez. O caminho solução será: F I Podemos escolher qualquer dos dois arcos zigzag entre o antecessor de F a laranja e F. O facto de a heurística ser admissível não garante a solução óptima mas neste caso acontece. Quando chegamos a F pelo caminho mais curto só colocamos 1 caminho por causa da Programação Dinâmica como estamos perante dois arcos de 100, a escolha é arbitrária. Apesar de já termos chegado a F, teremos ainda de expandir todos os nós que não tinham ainda sido expandidos, devido à diferença de distâncias dos caminhos zigzag face aos outros. Mas, quando expandirmos o nó antecessor de F que não está a laranja ele vai-nos dar piores caminhos para F que não serão adicionados. Ficaremos assim com um único caminho que acaba em F e que é óptimo. 8/8