MOOUtils (Multi-Objective Optimization Utils) is a small C library for multi-objective algorithms quality assessment. I originally intended to include generic versions of some optimization algorithms (hence the name), but due to time constraints, only the quality indicators portion of the code is included... for now.
##Features
- Quality indicators calculation
- Generational distance
- Inverted generational distance
- Spread
- Generalized spread
- Epsilon (additive and multiplicative)
##Building instructions
I tested the code with gcc 4.6 on Linux, but it should work with any other compiler and OS. The only dependancy is C's math library (math.h).
On Linux (and OS X?), you can use the provided makefile to build a static library, by using:
make libmooutils.a
After that, you can just copy both the generated libmooutils.a file and the include folder into your project. Don't forget to add the location of libmooutils.a to your LD_LIBRARY_PATH and including both it and the math.h library (-lmooutils -lm flags) when building your project.
There's also an example of the use of the library included. You can build it with:
make example
This will build the library and the example's executable file. Then you can run it with:
./example
The example program reads the data from the example_data.txt and example_truefront.txt, performs calculations of some quality indicators and outputs the results to stdout.
##About
I wrote most of this code during my Master's Degree studies at Instituto Tecnológico de Ciudad Madero. My research there focused on multi-objective optimization techniques applied to a certain combinatorial problem (task scheduling and voltage selection in heterogenous computing systems, for those wondering), and I wrote this functions as a way for me to evaluate my algorithms.
Both as an exercise and hoping that my code is of any use to anyone in the same line of research, I decided to document it and repurposed it as a C library. Feel free to use it (and maybe even expand it).
Special thanks to Nebro and Durillo's jMetal framework, for providing me a way of comparing implementations and results.
--Miguel Á. Ramiro