Releases: leespen1/QuantumGateDesign.jl
Publication Source Code - High-Order Hermite Optimization: Fast and Exact Gradient Computation in Open-Loop Quantum Optimal Control using a Discrete Adjoint Approach
Publication Source Code
This release contains the code used in the publication High-Order Hermite Optimization: Fast and Exact Gradient Computation in Open-Loop Quantum Optimal Control using a Discrete Adjoint Approach, which was submitted to Journal of Computational Physics. A preprint is available on ArXiV.
This includes both the source code for the package QuantumGateDesign.jl, as well as the scripts for running and plotting the simulations and optimizations.
Before running any of the examples, the makefile in src/Fortran should be ran to compile the Fortran code used to evaluate B-Splines.
If you are interested in using QuantumGateDesign.jl for your own work, we recommend using a later release than this one. In addition to the scripts and source code used in the publication, this release contains several directories of unfinished work. Also, there are many unneeded package dependencies which may drastically increase the time it takes to download and precompile the package.
Figures from Publication
Release 0.2.0
We are publishing a new release to highlight some of the changes made to the package over the last couple months.
Changes
First and foremost, the documentation of this package has been greatly improved. Please read it at https://leespen1.github.io/QuantumGateDesign.jl/dev/. Explanations of the workflow, examples, and docstrings and argument lists for some of the most important functions are now in the documentation.
Significant performance improvements have been made, mainly having to do with type stability and memory allocation. I would also note that testing has been done only on Julia 1.9, because previously during development while using Julia 1.10, some of the mul! functions from the LinearAlgebra library were allocating memory for vectors, which was a huge detriment to performance.
There is now an API for using preconditioners when solving Schrodinger's equation and the adjoint equation.
Future Work
The next release will focus on improving the documentation even further, improving the organization and readability of the source code, improved tools for easily plotting results, and generally improving the stability of the package so that it is ready for "production use."
Contact
If you have any questions about the package (or suggestions), please contact Spencer Lee at leespen1@msu.edu.
Hermite Optimal Control v0.1.0 - Multiple Controls
Can now handle multiple controls, and do the gradient calculation using discrete adjoint, finite difference, and forced methods. This is a big milestone, as now we work with multiple qubit gates.
Needs to be tested more thoroughly, but for now the gradients all seem to agree with those of past stable versions of the package (which only had single controls). And when using two controls with the same parameters and control hamiltonians, the two halves of the gradient are the same, which is a good sign (though nowhere near an exhaustive test of correctness).
Next release will focus on continuous integration tests:
- Convergence and gradient agreement tests need to be updated to work with new structures
- Want to have a test which compares history, lambda history, and gradients for a fixed problem, with the solutions hard-coded and stored based on results from a previous stable version of the code. That way we can easily see if anything has changed. Could also compare to qutp results
- Long functions should be split up more to make testing easier (would have saved me a headache if I could have done the adjoint evolution more readily and independently).
Documentation should also be improved, now that I have most of the desired functionality implemented. And some variables and functions (utvt, uttvtt, etc) need to be renamed for clarity.