Results can be reproduced by running: run_all.py
If the code does not execute fully at once, please follow the order described in run_all.py.