Pular para o conteúdo principal

Trabalho 1 - Snakes and Ladders



Trabalho 1

Contexto

Snakes and Ladders é um antigo jogo de tabuleiro indiano, que hoje faz sucesso no mundo todo. Ele é jogado por dois ou mais jogadores em um mapa quadriculado onde cada um dos quadrados possui um número. Uma certa quantidade de "escadas" (ladders) e "cobras" (snakes) é desenhada no tabuleiro, conectando dois quadrados específicos do mapa. 
O objetivo do jogo é ir até o final do mapa de acordo com o número tirado na moeda (um ou dois), e assim, avançando as casas. Caso caia em alguma casa onde está a base de uma escada, o jogador a sobe até a próxima posição - o semelhente acontece com as cobras, com a diferença de que o jogador desce para uma posição anterior caso caia numa casa onde está desenhada a cabeça da cobra.

Objetivos



Para este projeto há três objetivos especificados:

    1. Apresentar o diagrama de estados da Cadeia de Markov que representa o jogo, computando, para isso, a matriz de transição de estados P.

    2. Desenvolver um script em Python para calcular a distribuição estacionária da Cadeia de Markov homogênea em questão e responder: Qual a probabilidade de um jogador vencer o jogo no longo prazo? Considerando, para esse cálculo, k = 100 um número suficiente de iterações no Power Method. Além disso, quais estados são os mais prováveis de serem acessados?

    3. Especificar a matris P (P_barra) referente ao modelo Pagerank considerando alpha = 0.1. Considerando também k = 100, aplicar o Power Method e comparar os resultados obtidos com os do item 2, e checar se as distribuições estacionárias são diferentes.


Uma Cadeia de Markov é um caso particular de processo estocástico com estados discretos, com a propriedade de que a distribuição de probabilidade do próximo estado depende apenas do estado atual e não da sequência de eventos que se procedem.

O Power Method é um modo iterativo para obter a distribuição de probabilidades dos estados num tempo k.

PageRank é o algoritmo utilizado pela ferramenta de busca Google para posicionar websites entre os resultados de suas buscas.


Execução

Para o desenvolvimento do trabalho, foi utilizada a linguagem Python, a biblioteca NumPy e a IDE Spyder. O código foi escrito primeiramente utilizando a ferramenta Notepad++.

Código para cálculo do Power Method

Matriz de Adjacências ixj contendo a probabilidade de se avançar da casa i para a j

Tabela de Probabilidades já ordenada por casa.


Analisando então a Tabela de Probabilidades, podemos concluir que a probabilidade de se ganhar o jogo a longo prazo é de 4,5%, e a casa mais provável de ser acessada é a de número 30, seguida das casas 32 e 32.



Comentários

Postagens mais visitadas deste blog

Trabalho 3 - Busca em Largura e Profundidade (BFS e DFS)

Trabalho 3 Contexto Antes de introduzirmos os algoritmos de Busca em Largura e Profundidade (BFS e DFS), vistos em sala de aula, é preciso relembrar o funcionamento de uma busca dentro de um grafo. Para realizar qualquer busca, é necessário trabalhar com um algoritmo que percorra todas as arestas e vértices de um dado grafo, realizando uma análise sistemática de todos os caminhos e nós encontrados. Após realizar a primeira inspeção, na ponta inicial, o algoritmo deve percorrer até encontrar a ponta final, examinando a cada passo, no máximo, uma vez cada aresta. Uma busca pode ser realizada de diversas maneiras. Nesse tópico, será introduzida a Busca em Largura (BFS) e a Busca em Profundidade (DFS). Algoritmo de Busca em Largura (BFS) A BFS inicia-se num vértice inicial V0 de um grafo G não ponderado. Seu retorno deve ser uma árvore T (BFS-tree), a qual possui os menores caminhos de V0 aos demais vértices. Através deste algoritmo, realiza-se a visita de V0 e seus demais viz...

Trabalho 5 - O Problema do Caixeiro Viajante

Trabalho 5 Contexto O Problema do Caixeiro Viajante (TSP) faz a seguinte pergunta: "Dada uma lista de cidades e distância entre cada par delas, qual é a distância mínima possível em que o Caixeiro Viajante poderia visitar todas as cidades exatamente uma vez e retornar à sua de origem?". Esse é um problema de nível NP-Hard (onde não há um algoritmo ótimo para a resolução do mesmo) da otimização computacional, importante em operações de pesquisa e ciência da computação teórica. Um grafo G é dito um  Grafo Hamiltoniano  se existe um ciclo no mesmo que contenha todos os seus vértices, sendo que cada vértice só aparece uma vez no ciclo, que é chamado de Ciclo Hamiltoniano; sendo assim, um grafo é hamiltoniano caso contenha um ciclo hamiltoniano. Execução O objetivo deste trabalho é, utilizando um dos algoritmos apresentados em sala para o TSP (Twice-around ou 2-otimal) e um grafo fornecido, encontrar 10 possíveis soluções para o Problema do Caixeiro Viajante e elenc...