- Implementado
- Por implementar
- Criação e implementação da classe
FileReaderpara ler e guardar os dados do dataset.
-
Leitura (através da classe java Scanner) e importação de dados dos ficheiros
name.txt,weight.txtexy.txtpara instâncias LinkedList (no caso dos dados doxy.txtforam criadas 2 instâncias, uma para a coordenada x e outra para a y) e posterior armazenamento destes dados em Hubs numa LinkedList.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();
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();
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
GraphAdjacencyListpara 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.
- Métodos principais criados:
- Criação de testes unitários para a classe
GraphAdjacencyList. - Criação do mockup da interface gráfica idealizada para a aplicação.
- Função de importação de um dataset e gerar o modelo (grafo) correspondente – a rede logística, e visualizá-la na aplicação.
- 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.
- 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.
- 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.
- 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).


