This repository contains code that was used to tune and benchmark RBFMopt for my Yale-NUS Computer Science Capstone Project.
Crucially, RBFMopt was shown to outperform genetic algorithms like MOEAD and NSGA-II using the DTLZ test problem suite.
All the tuning results and plots can be found in the graphics folder of this repo.
RBFMopt is a multi-objective blackbox optimization algorithm conceived of by Dr Thomas Wortmann and based off the single-objective RBFOpt designed by Dr Giacomo Nannicini.
The initial RBFMopt was implemented by Dr Wortmann in C#. I rewrote the code in Python and extended it to be able to filter points it was refeeding into the algorithm. More details can be found in a private repository. Please email Dr Wortmann if you are interested.
- Install miniconda- you need this to install Pygmo (which gives us access to NSGA II, MOEAD, and test problems)
- Create a virtual env with Python 3.6 using
conda create -n benchmark python=3.6
- Activate the virtual env
source activate benchmark
pip install requirements.txt
- this installs necessary packages like RBFOptgit clone
the private RBFMopt repository (again please request access)- While in the conda virtual env and in the RBFMopt directory, install
pip install -e .
- Activate the virtual env
source activate benchmark
- First do the calculations
python tuning_filter_calc.py
andpython tuning_ncycle_calc.py
. Each will calculate various hypervolume values of the pareto front solution to the ZDT problem test suite for the RBFMopt aglgorithm of varying filter values (90, 180, 270 and No filter in the case of tuning_filter_calc.py) and ncycle values (3, 6 and 9 in the case of tuning_ncycle_calc.py). - Once the calculations are done plot the graphs and boxplots with
python tuning_filter_plot.py
andpython tuning_ncycle_plot.py
.
- Activate the virtual env
source activate benchmark
- First do the calculations
python benchmark_calc.py
. Each will calculate various hypervolume values of the pareto front solution to the DTLZ problem test suite for RBFMopt(filter=270, ncycle=9), NSGAII and MOEAD . - Once the calculations are done plot the graphs and boxplots with
python benchmark_plot.py
.