For this project, I used Qiskit to implement the self-learning algorithm introduced in arXiv:2005.14075. This algorithm aims to train a quantum sampler based on the quantum Fourier transform to approximate a hard-to-sample probability distribution using an easy-to-sample distribution represented using said quantum circuit. In this project, I coded an easy-to-use Python module that uses a single class Sampler to initialize and train a circuit. This is pretty easy to use, and you just have to worry about passing in the correct parameters for what you want to accomplish.
With the module presented in this project, it is possible to approximate relevant distributions in fields like chemistry, biology, physics, and all the way to finance. Two examples of these distributions are the Boltzmann distribution (which is demonstrated in the original paper) and the lognormal distribution for finance problems. Although due to computing power and time limitations, I only simulated simple normal distributions for a relatively small amount of qubits, the algorithm is demonstrated to work for much more complicated cases by the original authors.
Presentation:
The README file in the project repository contains instructions on how the module works, some examples on how to use it, and demo results while avoiding as much technicality as possible. The derivation notebook goes much more in depth into how I implemented the paper and what each function does. This notebook does some stuff inefficiently for the purpose of being clearer, but most of these issues are resolved in the actual module, which is found in here. There are some demo Python files in the repository that show the module in action, in this files you can see how easy it is to use.
Note: I forgot that Latex doesn’t render in GitHub markdown, so sorry about the ugly formulas in the README file!
Thank you for your submission! There's still time to populate your submission with code, presentation material, etc. Please make any final adjustments before the deadline tonight at 17h00 EST!
Team Name:
Project Description:
For this project, I used Qiskit to implement the self-learning algorithm introduced in arXiv:2005.14075. This algorithm aims to train a quantum sampler based on the quantum Fourier transform to approximate a hard-to-sample probability distribution using an easy-to-sample distribution represented using said quantum circuit. In this project, I coded an easy-to-use Python module that uses a single class
Sampler
to initialize and train a circuit. This is pretty easy to use, and you just have to worry about passing in the correct parameters for what you want to accomplish.With the module presented in this project, it is possible to approximate relevant distributions in fields like chemistry, biology, physics, and all the way to finance. Two examples of these distributions are the Boltzmann distribution (which is demonstrated in the original paper) and the lognormal distribution for finance problems. Although due to computing power and time limitations, I only simulated simple normal distributions for a relatively small amount of qubits, the algorithm is demonstrated to work for much more complicated cases by the original authors.
Presentation:
The README file in the project repository contains instructions on how the module works, some examples on how to use it, and demo results while avoiding as much technicality as possible. The derivation notebook goes much more in depth into how I implemented the paper and what each function does. This notebook does some stuff inefficiently for the purpose of being clearer, but most of these issues are resolved in the actual module, which is found in here. There are some demo Python files in the repository that show the module in action, in this files you can see how easy it is to use.
Note: I forgot that Latex doesn’t render in GitHub markdown, so sorry about the ugly formulas in the README file!
Source code:
The code for this project can be found in the SelfLearningDistributions repository.
Which challenges/prizes would you like to submit your project for?