Skip to content

juliodaal/PAProject

Repository files navigation

Resumo do trabalho / código desenvolvido

  • Implementado
  • Por implementar

Milestone

  • Criação e implementação da classe FileReader para ler e guardar os dados do dataset.

    • Leitura (através da classe java Scanner) e importação de dados dos ficheiros name.txt, weight.txt e xy.txt para instâncias LinkedList (no caso dos dados do xy.txt foram criadas 2 instâncias, uma para a coordenada x e outra para a y) e posterior armazenamento destes dados em Hubs numa LinkedList.

      name.txt
      File file = new File(pathToFile + "name.txt");
      Scanner scanner = new Scanner(file);
      List<String> name = new LinkedList<>();
      while (scanner.hasNextLine()){
        String line = scanner.nextLine();
        if(line.charAt(0)!='#') name.add(line);
      }
      scanner.close();
      weight.txt
      File file = new File(pathToFile + "name.txt");
      Scanner scanner = new Scanner(file);
      List<Integer> weight = new LinkedList<>();
      file = new File(pathToFile + "weight.txt");
      scanner = new Scanner(file);
      while (scanner.hasNextLine()){
          String line = scanner.nextLine();
          if(line.charAt(0)!='#')
              weight.add(parseInt(line));
      }
      scanner.close();
      xy.txt
      File file = new File(pathToFile + "name.txt");
      Scanner scanner = new Scanner(file);
      List<Integer> x = new LinkedList<>();
      List<Integer> y = new LinkedList<>();
      file = new File(pathToFile + "xy.txt");
      scanner = new Scanner(file);
      while (scanner.hasNextLine()){
          String s = scanner.nextLine();
          if(s.charAt(0)!='#'){
              x.add(parseInt(s.substring(0, s.indexOf(' '))));
              y.add(parseInt(s.substring(s.indexOf(' ')+1)));
          }
      }
      scanner.close();
    • Leitura e armazenamento dos dados dos ficheiros route_*.txt, separando em "pedaços" os valores (distâncias entre Hubs) da matriz e armazenando-os numa ArrayList de ArrayLists.

      public List<List<Route>> readRoutes(String fileName){
        List<List<Route>> l = new LinkedList<>();
        try {
            File file = new File(pathToFile + fileName);
            Scanner scanner;
            scanner = new Scanner(file);
            while(scanner.hasNextLine()){
                String[] linePieces = scanner.nextLine().split(" ");
                List<Route> pieces = new ArrayList<>(linePieces.length);
                for (String piece : linePieces)
                    if(!Objects.equals(piece, "")) pieces.add(new Route(parseInt(piece)));
                l.add(pieces);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return l;
      }

  • Criação da classe GraphAdjacencyList para implementação do Graph utilizando a estrutura de dados "lista de adjacências".

    • Métodos principais criados:
      • numVertices(): devolve o número de vértices do grafo;
      • numEdges(): devolve o número de arestas do grafo;
      • areAdjacent(): verifica se dois vértices são adjacentes;
      • incidentEdges(): devolve as arestas incidentes num vértice;
      • opposite(): devolve o vértice oposto ao inserido;
      • insertVertex(): insere um novo Hub (vértice);
      • removeVertex(): remove um Hub (vértice);
      • removeEdge(): remove uma Route (aresta);
      • replace(Vertex v, V newElement): substitui um Hub (vértice) existente por um novo;
      • replace(Edge<E, V> e, E newElement): substitui uma Route (aresta) existente por uma nova.

  • Criação de testes unitários para a classe GraphAdjacencyList.

  • Criação do mockup da interface gráfica idealizada para a aplicação.
drawing


Projeto Funcional

  • Função de importação de um dataset e gerar o modelo (grafo) correspondente – a rede logística, e visualizá-la na aplicação.
drawing

  • Função de exportação de rotas de um modelo.

  • Count do número de Hubs na rede (network).

  • Count do número de Routes na rede (network).

  • Centralidade dos Hubs - lista de tuplos <Hub, número de Hubs adjacentes> (apresentados por ordem decrescente do número de Hubs adjacentes).

  • Top 5 dos Hubs 'mais centrais' (5 primeiros da lista do ponto anterior) apresentados num gráfico de barras.
drawing

  • Count do número de (sub-)redes logísticas.

  • Função de adição e remoção de rotas entre dois Hubs em tempo real.

  • Função de Undo para operações adicionar/remover.

  • Atualização de rede e métricas para o conjunto de rotas resultante.

  • Função para encontrar "o caminho mais curto" entre qualquer par de Hubs escolhidos pelo utilizador.
    • Apresentação visual do resultado.

  • Função para obter o caminho entre dois Hubs que distam mais um do outro (através dos caminhos mais curtos).
    • Apresentação visual do resultado.

  • Função para obter a lista de Hubs que distam no máximo N rotas do Hub H (H e N escolhidos pelo utilizador).

About

University project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •