Code repository for Approximating Nash Equilibria for Black-Box Games: A Bayesian Optimization Approach
conda install nb_conda
conda env create --file environment.yml
This will create an environment called ne.
To activate this environment, execute:
source activate ne
The demo.ipynb
demonstrates the algorithm along with the algorithms considered in the paper. It also demonstrates other utils/plots that can be found in the repo.
jupyter notebook
The script toy_experiments.py
performs experiments on SADDLE
and MOP
problems. The experiment can be configured according to a configuration files, as follows. cd
to the repo directory and do the following:
export PYTHONPATH=.
python ne/experiments/toy_experiments.py -f ne/experiments/configs/saddle_config.yml
As the experiment is running, results of different runs/algorithms/problems will be stored in ne/experiments/res
as {experiment_name}_{alg_name}_{dimension}_{run_number}.json
, these files are helpful for backup/monitoring purposes. At the end of the experiment a json file {experiment_name}.json
will be generated which essentially concatentates all {experiment_name}_*.json
The demo.ipynb
demonstrates how the results can be plotted. Moreover, a json
file whose format is similar to that created by toy_experiments.py
can be passed to the plot_regret_trace
function under ne/utils/plots.py
as demonstrated in the main
block of ne/utils/plots.py
. The results of the saddle_config.yml
experiment is stored
in ne/experiments/res/saddle_res.json
For the experiment defined above, the plots.py
script is set to display its result:
python ne/utils/plots.py
To install from Python
from rpy2.robjects.packages import importr
utils = importr('utils')
utils.install_packages('GPGame')
There might be some difficulty in installing the "GPGame" package and interfacing it with Python. Make sure you install the package (and all the required packages) with sudo
. Then copy it to the environment's R/library
sudo R
>> install.packages("GPGame")
>> quit()
sudo cp -a ~/R/x86_64-pc-linux-gnu-library/3.2/. ~/anaconda2/envs/ne/lib/R/library/
There is unintended multithreading with numpy ( https://stackoverflow.com/questions/19257070/unintented-multithreading-in-python-scikit-learn )
Check the blas/lapack library used and set the number of threads. E.g.
export OPENBLAS_NUM_THREADS=1
If you make use of this code and you'd like to cite us, please consider the following:
@article{al2018approximating,
title={Approximating Nash Equilibria for Black-Box Games: A Bayesian Optimization Approach},
author={Al-Dujaili, Abdullah and Hemberg, Erik and O'Reilly, Una-May},
journal={arXiv preprint arXiv:1804.10586},
year={2018}
}