[License: LGPL v3] [build]

Multi-criteria community detection library

This library makes the Louvain community detection system
significantly easier to use. Example code:

    #include "louvain_communities/louvain_communities.h" #include
<iostream>

    int main(int /*argc*/, char** /*argv*/) { LouvainC::Communities
graph;

        //First community graph.add_edge(1, 2, 2L);
graph.add_edge(1, 3, 2L); graph.add_edge(1, 4, 2L);
graph.add_edge(2, 3, 2L); graph.add_edge(2, 4, 2L);
graph.add_edge(3, 4, 2L);

        //Second community graph.add_edge(4, 5, 2L);
graph.add_edge(4, 6, 2L); graph.add_edge(4, 7, 2L);
graph.add_edge(5, 6, 2L); graph.add_edge(5, 7, 2L);
graph.add_edge(6, 7, 2L);

        //Weak connection between 1st and 2nd communities
graph.add_edge(1, 4, 0.1L);

        //Calculate communities gplain.calculate(true);

        //Get community mapping auto r = gplain.get_mapping();
for(auto& vert_to_comm: r) { std::cout << "Vertext " <<
vert_to_comm.first << " is in community " << vert_to_comm.second <<
std::endl; } }

How to build

To build:

    git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build cmake ..  make -j4 sudo
make install

In case you are going to use the system in another cmake based
project, you don’t even need to install. In these cases, you can
look for the library in your CMakeLists.txt file via:

    find_package(louvain_communities CONFIG) if
(louvain_communities_FOUND) message(STATUS "Found Louvain
Communities library") message(STATUS "Louvain Communities dynamic
lib: ${LOUVAIN_COMMUNITIES_LIBRARIES}") message(STATUS "Louvain
Communities include dirs: ${LOUVAIN_COMMUNITIES_INCLUDE_DIRS}")
else() message(FATAL_ERROR "Cannot find Louvain Communities
libraries. Please install it! Exiting.") endif()

To compile a static library simply do:

    git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build cmake -DSTATICCOMPILE=ON
..  make -j4 sudo make install

Testing

To test:

    pip install python-louvain

    git clone https://github.com/jlguillaume/louvain cd louvain make
-j4

    git clone https://github.com/meelgroup/louvain-community cd
louvain-community mkdir build && cd build ln -s ../scritps/* .  ln
-s ../../louvain/louvain .  ./mytest.py 50-10-9-q.cnf.gz.no_w.cnf
awk '{print "gplain.add_edge(" $1 ", " $2 ", " $3 "L);"}' graph.txt
> ../src/mygraph.cpp cmake -DENABLE_TESTING=ON ..  make -j4
> ./test.sh 50-10-9-q.cnf.gz.no_w.cnf

To check how well the communities fit a graph generated via VIG
(“Variable Incidence Graph”) graph-generation from a DIMACS CNF and
a layout engine using the spring method:

    pip install python-louvain git clone
https://github.com/meelgroup/louvain-community cd louvain-community
mkdir build && cd build ln -s ../scritps/* .  ./mytest.py
50-10-9-q.cnf.gz.no_w.cnf --draw

References

Based on Community Detection “Louvain”, version 0.3, from
SourceForge

Based on the article “Fast unfolding of community hierarchies in
large networks” Copyright (C) 2008 V. Blondel, J.-L. Guillaume, R.
Lambiotte, E. Lefebvre

And based on the article Copyright (C) 2013 R. Campigotto, P. Conde
Céspedes, J.-L. Guillaume

Authors: E. Lefebvre, adapted by J.-L. Guillaume and R. Campigotto,
Mate Soos
