Giter Club home page Giter Club logo

metodos-busca's Introduction

Métodos de busca

Métodos de busca para disciplina INE5430@UFSC.
Instale os pacotes necessários usando pip install -r requirements.txt.
Inclui uma estrutura de grafos Grafo.py e uma aplicação em grafos Aplicacao.py.

Enunciado

Vamos programar agentes baseados em buscas para capturar ouro em uma mina. Cada agente consegue se movimentar pela mina, mas isso gasta sua bateria que é muito cara e não é recarregável. Os movimentos do agente são ir para a esquerda (E), ir para a direita (D), ir para cima (C), ir para baixo (B). O agente pode também pegar o ouro (PO). O objetivo principal de cada agente é maximizar a quantidade de ouro capturado e minimizar as perdas de energia de sua bateria.
A mina será considerada na entrada dos dados. Ela será representada por uma matriz M, com n linhas e n colunas.
Cada posição (i; j) da mina pode significar:

  • uma posição com obstáculo, se M[i][j] = 1;
  • um posição com ouro, se M[i][j] = *;
  • uma posição livre, se M[i][j] = 0.

Exemplo de entrada:

      8
      0 0 0 0 1 0 0 *
      1 1 1 0 1 0 1 1
      0 0 0 0 1 0 1 0
      * 0 1 1 1 0 0 0
      0 0 0 0 0 0 0 0
      1 1 1 0 1 1 1 0
      0 0 1 0 0 * 1 0
      0 0 0 0 0 0 1 *

Nesta mina, há uma expectativa de n=2 posições (não necessariamente alcançáveis) com ouro. A bateria do agente começa com n^1.5 pontos. Se um agente consegue se movimentar de uma posição para outra, então consideramos que houve uma perda de 1 ponto na sua bateria. Cada ouro capturado significa uma possível compra de cinco baterias novas (com n^1.5 pontos) para o agente. É claro que o agente fica impossibilitado de se movimentar quando a bateria acaba.

Métodos implementados

  • DFS - Deep first search ou busca em profundidade;
  • BFS - Breadth first search ou busca em largura;
  • Best-first;
  • A* - A star;

Heurísticas usadas

Best-First

A heurística usada foi a menor distância manhattan do nó atual (A) até o nodo contendo o ouro mais próximo (N).

A*

Para A* foi usada a mesma heurística do best-first, porém se a distância até o ouro mais próximo para o nó A e nó B é igual, então ele escolhe o nó com a menor distância relativa aos outros nós contendo ouro. Essa distância é obtida somando todas as distâncias até os nós contendo ouro.
Por exemplo, considere o seguinte grafo, sendo que os nodos O contém ouro:

            A
          /   \
         B--O1--C--------D---------O2

As distâncias manhattan calculadas são:
A = [2, 3]
B = [1, 4]
C = [1, 2]
D = [2, 1]
O1 = [0, 3]
O2 = [3, 0]

Quando a busca chega no nó A, o best-first seleciona qualquer um dos dois (depende da ordem de criação do grafo), porém o A* escolherá o C pois a distância até O1 é igual para B e C mas a soma das distâncias (3 para C e 5 para B) fará com que C seja escolhido.

Resultados obtidos

Os valores na tabela representam, respectivamente [pontuação/número de passos]

Entrada DFS BFS Best-First A*
8x8 394 / 72 315 / 149 403 / 62 403 / 62
16x16 2326 / 306 2075 / 555 2527 / 104 2527 / 104
32x32 13341 / 1336 12532 / 2143 14388 / 288 14342 / 334
64x64 - - 81865 / 598 81831 / 632

Os métodos DFS e BFS não terminaram sua execução na matriz 64x64 pois atingem o limite da recursão para a linguagem, isso se deve a suas complexidades naturais O(b^m) e O(b^d), sendo, respectivamente DFS e BFS, e b sendo o fator de branching, d e m sendo a profundidade máxima.

metodos-busca's People

Contributors

ehonnef avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.