Software
I have been writing software for almost 20 years, both opensource and proprietary software. My LinkedIn profile describes in more detail the various projects which I have participated in and the companies for which I have been consulting.
In this page I briefly describe my open source projects. If you use any of them in your research, I would appreciate it if you cite the corresponding publication. Citing software is just as important as citing any other important sources in your research. If youâ€™re not sure whether or not to cite something, Shouldacite can help you decide if you should.
JGraphT
JGraphT is free productiongrade Java library for graphdata structures and algorithms. The library is a big opensource project with a large number of contributors. I have been contributing to the library for more than 4 years and have also served as a Google Summer of Code Mentor in GSOC 2018.
JGraphT contains efficient graph datastructures and a very large collection of advanced graph algorithms. The following paper describes the internals of the library as well as the available algorithms:
 D. Michail, J. Kinable, B. Naveh, and J. V. Sichi. JGraphT  A Java library for graph data structures and algorithms. ACM Transactions on Mathematical Software, 46(2), May 2020. web
I have also written Python bindings for JGraphT. For more information see on the following:
 https://pypi.org/project/jgrapht/
 https://pythonjgrapht.readthedocs.io/
 https://github.com/dmichail/pythongrapht
 https://github.com/dmichail/jgraphtcapi
JHeaps
JHeaps is a free, productionready, efficient Java library containing a collection of heap datastructures. It contains an extensive collection of heap data structures such as:
 treebased addressable ones (Fibonacci, Pairing, Leftist, Skew, etc.)
 doubleended mergeable and addressable heaps (reflected Fibonacci, reflected Pairing)
 arraybased (binary, Dary, binary weak, etc.)
 doubleended arraybased (binary minmax)
 monotone (addressable and nonaddressable radix with double, long, int or BigInteger keys).
The project is available on Github.
Minimum Cycle Basis
This project implements algorithms to compute exact and approximate Minimum Cycle Bases of weighted graphs. For undirected graphs, four algorithms:
 An time exact algorithm
 An time exact algorithm
 An time exact algorithm
 An time approximate algorithm for any integer .
For directed graphs:
 An exact MonteCarlo algorithm
 An approximate MonteCarlo algorithm
 An time approximate MonteCarlo algorithm for any integer
If you use this package please consider citing the following paper:
 K. Mehlhorn and D. Michail. Implementing Minimum Cycle Basis Algorithms. ACM Journal of Experimental Algorithmics, 11(2):114, 2006. pdf, web
The project is available on Github.
Matchings with One Sided Preferences
This library implements algorithms which compute different matchings in bipartite graphs with one sided preferences. At this point there are algorithms for two problems:

rankmaximal matchings
The library implements an algorithm to compute a rankmaximal matching in a bipartite graph. The running time is . Here is the number of vertices, the number of edges and the largest rank used on the optimal solution.As a second algorithm, a straightforward implementation of a straightforward reduction to the maximum weight matching is provided with running time and space .

popular matchings The library contains an algorithm to compute a popular matching in a bipartite graph. The running time is using linear space.
The project is available on Github.
Acknowledgement
Are you using any of the above software? Please cite the corresponding paper.
Trouble?
Having trouble when working with any of the above software packages? Send me an email!