Awesome
Variational Neural Annealing
Variational neural annealing (VNA) is a framework to variationally simulate classical and quantum annealing for the purpose of solving optimization problems using neural networks. In this paper https://www.nature.com/articles/s42256-021-00401-3 (arXiv version: https://arxiv.org/abs/2101.10154), we show that we can implement a variational version of classical annealing (VCA) and its quantum counterpart (VQA) using recurrent neural networks. We find that our implementation significantly outperforms traditional simulated annealing in the asymptotic limit on prototypical spin models, suggesting the promising potential of this route to optimization.
This repository is aimed to facilitate the reproducibilty of the results of our paper.
Our implementation is based on RNN wave functions's code.
Content
This repository contains a source code of our implementation and tutorials under the format of jupyter notebooks for demonstration purposes.
src
This section contains our source code with the following implementations:
-
src/VNA_1DTRNN
: an implementation of VNA using 1D Tensorized RNNs to find the ground state of a random ising chains with open boundary conditions. All you need to do is run the filesrc/run_VNA_randomisingchain.py
. -
src/VNA_2DTRNN
: an implementation of VNA using 2D Tensorized RNNs to find the ground state of the 2D Edwards-Anderson model with open boundary conditions. To execute this module, you can run the filesrc/run_VNA_EdwardsAnderson.py
. -
src/VNA_DilatedRNN
: an implementation of VNA using Dilated RNNs to find the ground state of the Sherrington-Kirkpatrick model. To execute this implementation, you can run the python filesrc/run_VNA_SherringtonKirkpatrick.py
.
To be able to run VCA
in each one of these modules, you can set Bx0 (initial transvere magnetic field) in the hyperparameters section to zero in the execution python files. Similarly if you want to run VQA
, you can set T0 (initial temperature) to zero. Also, if you want to run RVQA
, you can set Bx0 and T0 to be both non-zero. Finally, if you want to run Classical-Quantum optimization CQO
, you can set both Bx0 and T0 to zero. More details about the acronyms VCA
, VQA
, RVQA
and CQO
are provided in our paper.
We note that in this code we use the tensordot2
operation from the TensorNetwork package to speed up tensorized operations.
tools
This section contains the tools we used to generate the random instances of the models we considered in our paper.
data
This section provides the ground states of the Edwards-Anderson (EA) and the Sherrington-Kirkpatrick (SK) models that were obtained from the spin-glass server for 25 different seeds. The instances were generated using the code provided in `tools'.
tutorials
In this section of the repository, we demonstrate how our source code works in simple cases through Jupyter notebooks that you can run on Google Colaboratory to take advantage of GPU speed up. These tutorials will help you to become more familiar with the content of the source code. The tutorials
module contains the following:
tutorials/VNA_1DTRNNs.ipynb
: a demonstration of VNA using 1D Tensorized RNNs applied to random ising chains with open boundary conditions.tutorials/VNA_2DTRNNs.ipynb
: a demonstration of VNA using 2D Tensorized RNNs on the 2D Edwards-Anderson model with open boundary conditions.tutorials/VNA_DilatedRNNs.ipynb
: a demonstration of VNA using Dilated RNNs applied to the Sherrington-Kirkpatrick model.
For more details, you can check our manuscript on arXiv: https://arxiv.org/abs/2101.10154 or on Nature Machine Intelligence: https://www.nature.com/articles/s42256-021-00401-3 (free access at https://rdcu.be/cAIyS).
For questions or inquiries, you can reach out to this email mohamed.hibat.allah@uwaterloo.ca.
Dependencies
This code works on Python (3.6.10) with TensorFlow (1.13.1) and NumPy (1.16.3) modules. We also note that this code runs much faster on a GPU as compared to a CPU. No installation is required providing that the dependencies are available.
Disclaimer
This code can be freely used for academic purposes that are socially and scientifically beneficial, however it is under Vector Institute’s Intellectual Property (IP) policy for profit related activities.
License
This code is under the 'Attribution-NonCommercial-ShareAlike 4.0 International' license.
Citing
@Article{VNA2021,
author={Hibat-Allah, Mohamed and Inack, Estelle M. and Wiersema, Roeland and Melko, Roger G. and Carrasquilla, Juan},
title={Variational neural annealing},
journal={Nature Machine Intelligence},
year={2021},
month={Nov},
day={01},
volume={3},
number={11},
pages={952-961},
issn={2522-5839},
doi={10.1038/s42256-021-00401-3},
url={https://doi.org/10.1038/s42256-021-00401-3}
}