- Projeto prático em C++ para agrupamento de Grafos desenvolvido durante o Mestrado em Modelagem Computacional
- No projeto eu uso o g++ presente no Mingw-w64.
- Qualquer duvida recorrer a documentação para rodar o projeto no VS Code em Windows.
- No Linux ou WSL utilizando uma distribuição Ubuntu é possível obter o compilador através dos comandos: sudo apt install g++ sudo apt install build-essential
g++ main.cpp -o main
./main caminho_arquivo_entrada caminho_arquivo_saida n_classes max_it chance_buscar chance_perturbar
Permissão para executar
chmod +x auto.sh
Executar scripts com o casos 1 a 4
./auto.sh
Usando os dados em dataset1.txt na pasta input, com 2 classes, 1000 interações do programa, chance de buscar e perturbar 1.0 e 0.5, respectivamente:
./main input/dataset1.txt output/output-1-2.txt 2 1000 1.0 0.5
O arquivo segue o seguinte padrão:
número_de_nós
número_de_arestas
número_nó_saida número_nó_entrada peso_da_aresta
...
Usando 6 nós, 7 arestas, o nó 0 se liga ao nó 1 com uma aresta de peso 0.9:
6
7
0 1 0.9
1 2 0.3
0 2 0.5
2 3 0.6
3 4 0.9
4 5 0.2
5 3 0.3
O arquivo de saída é construido no seguinte padrão:
avaliação_solução
número_nó classe_do_nó
...
tempo_execução
Exemplo:
0.416667
0 1
1 1
2 1
3 0
4 0
5 1
6 0
7 0
8 0
9 2
0.297260
No exemplo, como temos 3 classes os nós só podem ser da classe 0, 1 ou 2.
- A avaliação da solução é melhor quanto mais próximo de zero estiver.
- Seu cálculo é feito usando o funcional MQ (Modularization Quality).
- o MQ é feito através da diferença da média de arestas externas menos a média das arestas internas de cada classe.
- Uma aresta interna é aquela que liga a dois nós da mesma classe.
- Uma aresta externa é aquela que liga dois nós de classes diferentes.