Skip to content

Commit

Permalink
Hyper flow cutter integration (#56)
Browse files Browse the repository at this point in the history
* Integrate HyperFlowCutter stub as refinement algorithm

* integrate hyperflow cutter stubs with FM

* HyperFlowCutter integration (#54)

* add WeightedHyperFlowCutter submodule (private access)

* commit preliminary basic version to progress

* disable nonsensical warning flags

* human readable indentation

* add comment to 2way_flow_refiner

* implement hfc refinement, fix some warnings

* fix command line parser warning

* mew WHFC version

* some debug output and comments + tiny fix in reset()

* adapt to new flowbased interleaving interface and add capabilities to write snapshot instances

* implement setting distances from cut

* temporarily disable assert and replace with runtimer error

* disable some options. REVERT this commit later on for integration

* add hyperflowcutter option description

* give hfc refiner options an appropriate order

* disable writing partition file

* add timing to flow refinement sections. set Dinic as WHFC flow algo

* add flow refinement running time output to regular output. comments for two flow skipping heuristics

* Revert "disable some options. REVERT this commit later on for integration"

This reverts commit 0df4cee.

* disable debug output

* add toolname to sql plottools serializer

* serialize sql plot tools on signal. for external timeouts

* add HFC options to cmdline parser

* some cleanup

* flow hg size constraint options. and parsing

* fix weird indentation sql_plottools_serializer

* adapt 2way_hyperflowcutter_refiner to the new HyperFlowCutter interface

* removed private WHFC submodule

* more gitignore

* Delete accidentally commited IDE file, no idea how it got commited

* add public WHFC submodule

* update mini_boost version to 1.69

* fix tiny bug

* Remove experimental flow networks and algorithms

All production configs use the hybrid flow network and either
the IBFS or the BK max-flow algorithm. To reduce compile times,
we therefore remove the the other flow networks and algorithms
from master.

However, the experimental setup will still be available in the
"experimental" branch [1].

[1] https://github.com/SebastianSchlag/kahypar/tree/experimental

* add HFC style time measurement to Tobi's flow refiner

* add command line flag for writing snapshots

* adapt flow hg extraction to new DistanceFromCut type

* add debug output to kway_hyperflowcutter_refiner

* clean up 2way_hyperflowcutter_refiner

* new WHFC version

* add command line flag for output partition

* kway hyperflowcutter: only activate blocks if they improved cut or balance. we also move nodes if the weight diff between blocks is reduced

* Provide runtime balance check

* new WHFC version

* new WHFC version

* update submodule WHFC

* implement command line parameters for ignoring distances and most balanced cut

* allow disabling iso vertices dp

* add fixed vertex support for HyperFlowCutter refinement

* update WHFC submodule

* set max block weights in 2way_hyperflowcutter_refiner, fix some compilation errors and remove errors if hg contains fixed vertices or individual part weights

* remove iso dp cli option

* rework snapshot extraction to file

* adapt (local) balance checks in 2way_hyperflowcutter_refiner to imbalance formulation instead of block weight difference

* implement soft time limit. we probably still need to prettify the cli parameters

* prettify interface for time limits

* add time limit to HFC refinement

* add HFC refinement configs

* minor changes

* start removing old irrelevant code. it compiles

* remove more code

* raise C++ standard to 17 on all targets

* adapt options parsing

* adapt sql_plottools_serializer to distinguish interrupt and time limit

* let time limit trigger write flag in context --> const ref madness

* fix warning

* raise WHFC version

* remove unused registrar stuff to fix two_way_fm_refiner_test

* fix time limit issues

* update WHFC version

* update WHFC version

* upgrade WHFC version

* change fm stopping rule for rKaHyPar to adaptive_opt

* apply codestyle

* remove old signal handling code

* revert "remove old signal handling code"

This reverts commit 335d299.

* make context.partition.time_limit_triggered mutable

* re-add constness to coarsening factories

* re-add constness to refinement algorithms

* re-add constness

* cleanup comments

* re-enable effc++ warnings

* implement adjusted epsilon flow problem scaling for individual part weights. this fixes an outstanding todo

* default initialize HFC parameters with the default config parameters, and perform some sanity checks

* bump gcc + dist version

* bump boost version

* fix travis file for boost po

* add dependencies for boost dynamic_bitset

* move WHFC to external tools

* allow cmake to find boost headers

* only search for dynamic bitset

* update CMakeLists.txt

* update CmakeLists.txt

* update cmake

* Add debug output

* update travis config

* update

* update travis config

* update .travis.yml

* remove re-added files

* update .travis.yml

* add lars to authors

* update boost version

* update boost version

* fix merge error

* update travis config

* fix merge error

* newer boost

* add ppa the correct way

* correct indentation

* update

* update

* fix merge

* update travid

* fix c++ standard

* update lgtm.yml for boost

* trigger codacity

* fix python module

* workaround for boost on lgtm

* update lgtm

* bump gcc version

* update cmake

Co-authored-by: Sebastian Schlag <sebastian.schlag@kit.edu>
Co-authored-by: Sebastian Schlag <info@sebastianschlag.de>

* Update README.md

* Update README.md

* Update README.md

* add new kKahyPar-E config

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Hyper flow cutter integration (#57)

* add WeightedHyperFlowCutter submodule (private access)

* commit preliminary basic version to progress

* disable nonsensical warning flags

* human readable indentation

* add comment to 2way_flow_refiner

* implement hfc refinement, fix some warnings

* fix command line parser warning

* mew WHFC version

* some debug output and comments + tiny fix in reset()

* adapt to new flowbased interleaving interface and add capabilities to write snapshot instances

* implement setting distances from cut

* temporarily disable assert and replace with runtimer error

* disable some options. REVERT this commit later on for integration

* add hyperflowcutter option description

* give hfc refiner options an appropriate order

* disable writing partition file

* add timing to flow refinement sections. set Dinic as WHFC flow algo

* add flow refinement running time output to regular output. comments for two flow skipping heuristics

* Revert "disable some options. REVERT this commit later on for integration"

This reverts commit 0df4cee.

* disable debug output

* add toolname to sql plottools serializer

* serialize sql plot tools on signal. for external timeouts

* add HFC options to cmdline parser

* some cleanup

* flow hg size constraint options. and parsing

* fix weird indentation sql_plottools_serializer

* adapt 2way_hyperflowcutter_refiner to the new HyperFlowCutter interface

* removed private WHFC submodule

* more gitignore

* Delete accidentally commited IDE file, no idea how it got commited

* add public WHFC submodule

* update mini_boost version to 1.69

* fix tiny bug

* Remove experimental flow networks and algorithms

All production configs use the hybrid flow network and either
the IBFS or the BK max-flow algorithm. To reduce compile times,
we therefore remove the the other flow networks and algorithms
from master.

However, the experimental setup will still be available in the
"experimental" branch [1].

[1] https://github.com/SebastianSchlag/kahypar/tree/experimental

* add HFC style time measurement to Tobi's flow refiner

* add command line flag for writing snapshots

* adapt flow hg extraction to new DistanceFromCut type

* add debug output to kway_hyperflowcutter_refiner

* clean up 2way_hyperflowcutter_refiner

* new WHFC version

* add command line flag for output partition

* kway hyperflowcutter: only activate blocks if they improved cut or balance. we also move nodes if the weight diff between blocks is reduced

* Provide runtime balance check

* new WHFC version

* new WHFC version

* update submodule WHFC

* implement command line parameters for ignoring distances and most balanced cut

* allow disabling iso vertices dp

* add fixed vertex support for HyperFlowCutter refinement

* update WHFC submodule

* set max block weights in 2way_hyperflowcutter_refiner, fix some compilation errors and remove errors if hg contains fixed vertices or individual part weights

* remove iso dp cli option

* rework snapshot extraction to file

* adapt (local) balance checks in 2way_hyperflowcutter_refiner to imbalance formulation instead of block weight difference

* implement soft time limit. we probably still need to prettify the cli parameters

* prettify interface for time limits

* add time limit to HFC refinement

* add HFC refinement configs

* minor changes

* start removing old irrelevant code. it compiles

* remove more code

* raise C++ standard to 17 on all targets

* adapt options parsing

* adapt sql_plottools_serializer to distinguish interrupt and time limit

* let time limit trigger write flag in context --> const ref madness

* fix warning

* raise WHFC version

* remove unused registrar stuff to fix two_way_fm_refiner_test

* fix time limit issues

* update WHFC version

* update WHFC version

* upgrade WHFC version

* change fm stopping rule for rKaHyPar to adaptive_opt

* apply codestyle

* remove old signal handling code

* revert "remove old signal handling code"

This reverts commit 335d299.

* make context.partition.time_limit_triggered mutable

* re-add constness to coarsening factories

* re-add constness to refinement algorithms

* re-add constness

* cleanup comments

* re-enable effc++ warnings

* implement adjusted epsilon flow problem scaling for individual part weights. this fixes an outstanding todo

* default initialize HFC parameters with the default config parameters, and perform some sanity checks

* bump gcc + dist version

* bump boost version

* fix travis file for boost po

* add dependencies for boost dynamic_bitset

* move WHFC to external tools

* allow cmake to find boost headers

* only search for dynamic bitset

* update CMakeLists.txt

* update CmakeLists.txt

* update cmake

* Add debug output

* update travis config

* update

* update travis config

* update .travis.yml

* remove re-added files

* update .travis.yml

* add lars to authors

* update boost version

* update boost version

* fix merge error

* update travis config

* fix merge error

* newer boost

* add ppa the correct way

* correct indentation

* update

* update

* fix merge

* update travid

* fix c++ standard

* update lgtm.yml for boost

* trigger codacity

* fix python module

* workaround for boost on lgtm

* update lgtm

* bump gcc version

* update cmake

* fully uncontract hypergraph in evolutionary mode since it's being used elsewhere

* more aggressive time limit trigger

Co-authored-by: Lars Gottesbüren <lars.gottesbueren@kit.edu>
Co-authored-by: Lars Gottesbüren <42266566+larsgottesbueren@users.noreply.github.com>
Co-authored-by: Sebastian Schlag <info@sebastianschlag.de>

* refactor time_limit

* improve spprocess output for evo

* improve output for time-limited partitioning

* simplify isSoftTimeLimitExceeded

* no soft time limit for MA

Co-authored-by: Sebastian Schlag <info@sebastianschlag.de>
Co-authored-by: Lars Gottesbüren <42266566+larsgottesbueren@users.noreply.github.com>
Co-authored-by: Lars Gottesbüren <lars.gottesbueren@kit.edu>
  • Loading branch information
4 people committed Mar 31, 2020
1 parent 5505069 commit 4f40f6a
Show file tree
Hide file tree
Showing 78 changed files with 1,803 additions and 7,847 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -23,3 +23,4 @@ tuning/*
debug152/*
profile/*
external_tools/*
.idea*
3 changes: 3 additions & 0 deletions .gitmodules
@@ -1,6 +1,9 @@
[submodule "external_tools/googletest"]
path = external_tools/googletest
url = https://github.com/google/googletest.git
[submodule "external_tools/WHFC"]
path = external_tools/WHFC
url = https://github.com/larsgottesbueren/WHFC.git
[submodule "python/pybind11"]
path = python/pybind11
url = https://github.com/pybind/pybind11.git
70 changes: 43 additions & 27 deletions .travis.yml
Expand Up @@ -4,45 +4,59 @@ language: cpp

# Ubuntu 14.04 Trusty support
sudo: false
dist: trusty
dist: bionic

addons:


matrix:
include:
# gcc 6 - Debug Build
- env: CMAKE_CC="gcc-6" CMAKE_CXX="g++-6" BUILD_TYPE="Debug" COV="OFF" SONAR="OFF"
# gcc 9 - Debug Build
- env: CMAKE_CC="gcc-9" CMAKE_CXX="g++-9" BUILD_TYPE="Debug" COV="OFF" SONAR="OFF"
os: linux
addons: &gcc6
addons: &gcc9
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-6
- libboost-program-options1.55.0
- libboost-program-options1.55-dev
- g++-9
- lcov
- gcovr
- cppcheck
- libpython3-all-dev
sonarcloud:
organization: "sebastianschlag-github"
before_install:
- sudo add-apt-repository -y ppa:mhier/libboost-latest
- sudo apt-get -q update
- sudo apt-get -y install libboost1.70-dev

# gcc 6 - Release Build
- env: CMAKE_CC="gcc-6" CMAKE_CXX="g++-6" BUILD_TYPE="Release" COV="OFF" SONAR="OFF"
# gcc 9 - Release Build
- env: CMAKE_CC="gcc-9" CMAKE_CXX="g++-9" BUILD_TYPE="Release" COV="OFF" SONAR="OFF"
os: linux
addons: *gcc6
addons: *gcc9
before_install:
- sudo add-apt-repository -y ppa:mhier/libboost-latest
- sudo apt-get -q update
- sudo apt-get -y install libboost1.70-dev

# gcc 6 - CodeCov
- env: CMAKE_CC="gcc-6" CMAKE_CXX="g++-6" BUILD_TYPE="Debug" COV="ON" SONAR="OFF"
# gcc 9 - CodeCov
- env: CMAKE_CC="gcc-9" CMAKE_CXX="g++-9" BUILD_TYPE="Debug" COV="ON" SONAR="OFF"
os: linux
addons: *gcc6
addons: *gcc9
before_install:
- sudo add-apt-repository -y ppa:mhier/libboost-latest
- sudo apt-get -q update
- sudo apt-get -y install libboost1.70-dev

# gcc 6 - SonarCube
- env: CMAKE_CC="gcc-6" CMAKE_CXX="g++-6" BUILD_TYPE="Debug" COV="OFF" SONAR="ON"
# gcc 9 - SonarCube
- env: CMAKE_CC="gcc-9" CMAKE_CXX="g++-9" BUILD_TYPE="Debug" COV="OFF" SONAR="ON"
os: linux
addons: *gcc6
addons: *gcc9
before_install:
- sudo add-apt-repository -y ppa:mhier/libboost-latest
- sudo apt-get -q update
- sudo apt-get -y install libboost1.70-dev

# clang 3.7 on MacOSX
- env: CMAKE_CC="clang" CMAKE_CXX="clang++" BUILD_TYPE="Debug" COV="OFF"
Expand All @@ -56,16 +70,18 @@ matrix:
- HOMEBREW_NO_AUTO_UPDATE=1 brew install cppcheck

install:
- DEPS_DIR="${HOME}/deps"
- export DEPS_DIR="${HOME}/deps"
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
- echo ${TRAVIS_OS_NAME}
- |
if [ "${TRAVIS_OS_NAME}" = "linux" ]; then
CMAKE_URL="https://cmake.org/files/v3.13/cmake-3.13.0-rc3-Linux-x86_64.tar.gz"
mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
export PATH=${DEPS_DIR}/cmake/bin:${PATH}
echo ${PATH}
export CMAKE_URL="https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.tar.gz";
mkdir cmake;
travis_retry wget --no-check-certificate -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake;
export PATH=${DEPS_DIR}/cmake/bin:${PATH};
echo ${PATH};
else
brew install cmake || brew upgrade cmake
brew install cmake || brew upgrade cmake;
fi
- cmake --version

Expand All @@ -86,18 +102,18 @@ before_script:

script:
- |
if [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-6" ] && [ "$COV" = "OFF" ]; then
if [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-9" ] && [ "$COV" = "OFF" ]; then
make clean all;
elif [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-6" ] && [ "$COV" = "ON" ]; then
elif [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-9" ] && [ "$COV" = "ON" ]; then
make clean all;
lcov --directory . --capture --output-file coverage.info;
lcov --remove coverage.info '/usr/*' --output-file coverage.info;
lcov --list coverage.info;
gcovr -r ../ -x > report.xml;
elif [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-6" ] && [ "$SONAR" = "ON" ]; then
elif [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-9" ] && [ "$SONAR" = "ON" ]; then
build-wrapper-linux-x86-64 --out-dir bw-output make clean all;
sonar-scanner;
elif [ "$BUILD_TYPE" = "Release" ] && [ "$CMAKE_CXX" = "g++-6" ]; then
elif [ "$BUILD_TYPE" = "Release" ] && [ "$CMAKE_CXX" = "g++-9" ]; then
build-wrapper-linux-x86-64 --out-dir bw-output make integration_tests; sonar-scanner;
../scripts/run_regression_tests.sh;
else
Expand All @@ -106,7 +122,7 @@ script:
after_success:
- |
if [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-6" ] && [ "$COV" == "ON" ]; then
if [ "$BUILD_TYPE" = "Debug" ] && [ "$CMAKE_CXX" = "g++-9" ] && [ "$COV" = "ON" ]; then
cd ${TRAVIS_BUILD_DIR};
bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
fi
Expand Down
1 change: 1 addition & 0 deletions AUTHORS
@@ -1,5 +1,6 @@
Sebastian Schlag <info@sebastianschlag.de>
Tobias Heuer <tobias.heuer@live.com>
Lars Gottesbüren <lars.gottesbüren@kit.edu>
Robin Andre <robinandre1995@web.de>
Yaroslav Akhremtsev <yaroslav.akhremtsev@kit.edu>
Vitali Henne <vitali.henne@gmail.com>
Expand Down
32 changes: 13 additions & 19 deletions CMakeLists.txt
Expand Up @@ -7,6 +7,8 @@ set(PROJECT_CONTACT "kahypar@sebastianschlag.de")
set(PROJECT_URL "http://www.kahypar.org")
set(PROJECT_DESCRIPTION "KaHyPar: Karlsruhe Hypergraph Partitioning")

set(CMAKE_CXX_STANDARD 17)

include_directories(${PROJECT_SOURCE_DIR})

find_package(Threads REQUIRED)
Expand All @@ -17,8 +19,8 @@ add_subdirectory(external_tools/googletest EXCLUDE_FROM_ALL)
include_directories(SYSTEM ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
include_directories(SYSTEM ${gtest_SOURCE_DIR}/../googlemock/include ${gtest_SOURCE_DIR}/../googlemock/)

# add third-party maximum flow algorithms to project
include_directories(external_tools/maximum_flow)
# add third-party algorithms to project
include_directories(external_tools)

option(KAHYPAR_USE_MINIMAL_BOOST
"Download boost automatically and compile required libraries." OFF)
Expand Down Expand Up @@ -154,33 +156,25 @@ if(KAHYPAR_USE_GCOV)
endif(KAHYPAR_USE_GCOV)

if(KAHYPAR_USE_MINIMAL_BOOST)
include(ExternalProject)
ExternalProject_Add(boost
URL
http://downloads.sourceforge.net/project/boost/boost/1.56.0/boost_1_56_0.tar.bz2
#URL_MD5 6095876341956f65f9d35939ccea1a9f
DOWNLOAD_DIR /tmp/
PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/external_tools/boost
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")

include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/external_tools/boost/src/boost/)
execute_process(COMMAND cmake -P ${CMAKE_CURRENT_SOURCE_DIR}/test.cmake)

include_directories(SYSTEM ${CMAKE_CURRENT_BINARY_DIR}/external_tools/boost/)

# glob boost sources
file(GLOB MINI_BOOST_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/external_tools/boost/src/boost/libs/program_options/src/*.cpp)
file(GLOB MINI_BOOST_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/external_tools/boost/libs/program_options/src/*.cpp)

add_library(mini_boost STATIC ${MINI_BOOST_SOURCES})
set_target_properties(mini_boost PROPERTIES LINKER_LANGUAGE CXX)
set(Boost_LIBRARIES mini_boost)
set(Boost_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external_tools/boost/boost/)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
else()
set(BOOST_MIN_VERSION "1.48.0")
find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS program_options REQUIRED)
find_package(Boost 1.69 REQUIRED COMPONENTS program_options)
if(Boost_FOUND)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
set(KAHYPAR_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${KAHYPAR_INCLUDE_DIRS})
set(KAHYPAR_LINK_LIBRARIES ${Boost_LIBRARIES} ${KAHYPAR_LINK_LIBRARIES})
message(STATUS "Boost Include: ${Boost_INCLUDE_DIR}")
message(STATUS "Boost Include: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost Library Dirs: ${Boost_LIBRARY_DIRS}")
message(STATUS "Boost Libraries: ${Boost_LIBRARIES}")
if(WIN32)
Expand Down Expand Up @@ -237,7 +231,7 @@ if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wredundant-decls")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winit-self")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnoexcept")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnoexcept")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPARANOID ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function")
Expand Down
51 changes: 21 additions & 30 deletions README.md
Expand Up @@ -78,7 +78,7 @@ Its algorithms and detailed experimental results are presented in several [resea

- Evolutionary Framework (KaHyPar-E):

KaHyPar-E enhances KaHyPar with an evolutionary framework as described in our [GECCO'18 publication][GECCO'18]. Given a fairly large amount of running time, this memetic multilevel algorithm performs better than repeated executions of KaHyPar-MF/-CA, hMetis, and PaToH. The configuration [/config/km1_direct_kway_gecco18.ini](/config/km1_direct_kway_gecco18.ini) uses KaHyPar-CA to exploit the local solution space and was used in the [GECCO'18 experiments][GECCO'18bench]. The command line parameter `--time-limit=xxx` can be used to set the maximum running time (in seconds). Parameter `--partition-evolutionary=true` enables evolutionary partitioning.
KaHyPar-E enhances KaHyPar with an evolutionary framework as described in our [GECCO'18 publication][GECCO'18]. Given a fairly large amount of running time, this memetic multilevel algorithm performs better than repeated executions of nonevolutionary KaHyPar configurations, hMetis, and PaToH. The command line parameter `--time-limit=xxx` can be used to set the maximum running time (in seconds). Parameter `--partition-evolutionary=true` enables evolutionary partitioning.

- Improve Existing Partitions:

Expand Down Expand Up @@ -127,8 +127,10 @@ In the figures, we compare KaHyPar with PaToH in quality (PaToH-Q) and default m
### Additional Resources
We provide additional resources for all KaHyPar-related publications:

|KaHyPar-MF /<br/> KaHyPar-R-MF |SEA'18 /<br/> JEA'19|[SEA Paper](SEA'18) /<br/> [JEA Paper](https://dl.acm.org/citation.cfm?doid=3310279.3329872)|[TR](https://arxiv.org/abs/1802.03587)|[Slides](https://algo2.iti.kit.edu/download/sea18-schlag.pdf)|Experimental Results:<br/>[SEA][SEA'18bench] / [JEA][SEA'19bench]|
|kKaHyPar-SEA20 /<br/> rKaHyPar-SEA20 |SEA'20 |TBA |[TR](https://arxiv.org/abs/2003.12110)| TBA | TBA |
|:--|:--|:--:|:--:|:--:|:--:|
|kKaHyPar /<br/> rKaHyPar | - | [Dissertation](https://publikationen.bibliothek.kit.edu/1000105953)| - |[Slides](http://algo2.iti.kit.edu/download/defense_schlag.pdf)|[Experimental Results](https://publikationen.bibliothek.kit.edu/1000105953)|
|KaHyPar-MF /<br/> KaHyPar-R-MF |SEA'18 /<br/> JEA'19|[SEA Paper](SEA'18) /<br/> [JEA Paper](https://dl.acm.org/citation.cfm?doid=3310279.3329872)|[TR](https://arxiv.org/abs/1802.03587)|[Slides](https://algo2.iti.kit.edu/download/sea18-schlag.pdf)|Experimental Results:<br/>[SEA][SEA'18bench] / [JEA][SEA'19bench]|
|KaHyPar-E (EvoHGP)|GECCO'18|[Paper][GECCO'18]|[TR](https://arxiv.org/abs/1710.01968)|[Slides](https://algo2.iti.kit.edu/3506.php)|[Experimental Results][GECCO'18bench]|
|KaHyPar-CA|SEA'17|[Paper][SEA'17]|\-|[Slides](http://algo2.iti.kit.edu/sea17schlag.php)|[Experimental Results][SEA'17bench]|
|KaHyPar-K|ALENEX'17|[Paper][ALENEX'17]|\-|[Slides](http://algo2.iti.kit.edu/3214.php)|[Experimental Results][ALENEX'17bench]|
Expand All @@ -144,9 +146,9 @@ Requirements
The Karlsruhe Hypergraph Partitioning Framework requires:

- A 64-bit operating system. Linux, Mac OS X and Windows are currently supported.
- A modern, ![C++17](https://img.shields.io/badge/C++-17-blue.svg?style=flat)-ready compiler such as `g++` version 5.2 or higher or `clang` version 3.2 or higher.
- A modern, ![C++14](https://img.shields.io/badge/C++-17-blue.svg?style=flat)-ready compiler such as `g++` version 9 or higher or `clang` version 11.0.3 or higher.
- The [cmake][cmake] build system.
- The [Boost.Program_options][Boost.Program_options] library.
- The [Boost.Program_options][Boost.Program_options] library and the boost header files.


Building KaHyPar
Expand Down Expand Up @@ -178,28 +180,33 @@ We use the [hMetis format](http://glaros.dtc.umn.edu/gkhome/fetch/sw/hmetis/manu
We provide two default framework configurations - one for recursive bipartitioning (*r*KaHyPar) and one for
direct k-way partitioning (*k*KaHyPar).

To start *k*KaHyPar optimizing the (connectivity - 1) objective run:
To start ***k*KaHyPar** optimizing the **(connectivity - 1)** objective run:

./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1 -m direct -p ../../../config/km1_kKaHyPar_dissertation.ini
./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1 -m direct -p ../../../config/km1_kKaHyPar_sea20.ini

To start *k*KaHyPar optimizing the cut net objective run:
To start ***k*KaHyPar** optimizing the **cut net** objective run:

./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o cut -m direct -p ../../../config/cut_kKaHyPar_dissertation.ini
./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o cut -m direct -p ../../../config/cut_kKaHyPar_sea20.ini

To start *r*KaHyPar optimizing the (connectivity - 1) objective run:
To start ***r*KaHyPar** optimizing the **(connectivity - 1)** objective run:

./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1 -m recursive -p ../../../config/km1_rKaHyPar_dissertation.ini
./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1 -m recursive -p ../../../config/km1_rKaHyPar_sea20.ini

To start *r*KaHyPar optimizing the cut net objective run:
To start ***r*KaHyPar** optimizing the **cut net** objective run:

./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o cut -m recursive -p ../../../config/cut_rKaHyPar_dissertation.ini
./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o cut -m recursive -p ../../../config/cut_rKaHyPar_sea20.ini

To start the **memetic** algorithm ***k*KaHyPar-E** optimizing the (connectivity - 1) objective run:

./KaHyPar -h <path-to-hgr> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1 -m direct -p ../../../config/km1_kKaHyPar-E_sea20.ini


#### Old Presets

Additionally, we provide nine different presets that correspond to the configurations used in the publications at
Additionally, we provide different presets that correspond to the configurations used in the publications at
[ALENEX'16][ALENEX'16], [ALENEX'17][ALENEX'17], [SEA'17][SEA'17], [SEA'18][SEA'18], [GECCO'18][GECCO'18], as well as
our [JEA journal paper](https://dl.acm.org/citation.cfm?doid=3310279.3329872).
in our [JEA journal paper](https://dl.acm.org/citation.cfm?doid=3310279.3329872) and in the [dissertation](https://publikationen.bibliothek.kit.edu/1000105953) of Sebastian Schlag. In order to use these configurations, you
have to checkout [KaHyPar release 1.1.0](https://github.com/SebastianSchlag/kahypar/releases/tag/1.1.0), since some old code as been removed in the most current release.

To start KaHyPar-MF (using *flow-based refinement*) optimizing the (connectivity - 1) objective using direct k-way mode run:

Expand Down Expand Up @@ -467,22 +474,6 @@ If you use KaHyPar in an academic setting please cite the appropriate paper. If
numpages = {8}
}

KaHyPar-MF integrates implementations of the BK and incremental breadth first search (IBFS) maximum flow algorithm into the framework (see [/external_tools/maximum_flow/](/external_tools/maximum_flow/)). The BK algorithm has been described in

"An Experimental Comparison of Min-Cut/Max-Flow Algorithms for Energy Minimization in Vision."
Yuri Boykov and Vladimir Kolmogorov.
In IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI), September 2004.

The IBFS algorithm **can be used for research purposes only** and is described in

"Faster and More Dynamic Maximum Flow by Incremental Breadth-First Search"
Andrew V. Goldberg, Sagi Hed, Haim Kaplan, Pushmeet Kohli, Robert E. Tarjan, and Renato F. Werneck
In Proceedings of the 23rd European conference on Algorithms, ESA'15, 2015

"Maximum flows by incremental breadth-first search"
Andrew V. Goldberg, Sagi Hed, Haim Kaplan, Robert E. Tarjan, and Renato F. Werneck.
In Proceedings of the 19th European conference on Algorithms, ESA'11, 2011.

Contributing
------------
If you are interested in contributing to the KaHyPar framework
Expand Down
2 changes: 1 addition & 1 deletion cmake/modules/gmock.cmake
Expand Up @@ -3,7 +3,7 @@ function(add_gmock_test target)
add_executable(${target} ${ARGN})
target_link_libraries(${target} gtest gtest_main ${CMAKE_THREAD_LIBS_INIT})

set_property(TARGET ${target} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${target} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)

add_test(${target} ${target})
Expand Down

0 comments on commit 4f40f6a

Please sign in to comment.