Changelog

Version 0.2.0 (Mar 24, 2026)

Bug Fixes

Reinforcement learning module (src/qutip_qoc/_rl.py):

  • Corrections in algorithm execution time #31

JOPT

  • Fix: Enable JOPT to support open-system optimization with TRACEDIFF fidelity #49
    • This PR resolves an issue where JOPT failed to optimize open quantum systems using TRACEDIFF fidelity due to incompatibilities between JAX autodiff and Qobj data structures.

GRAPE

  • Match grape infidelity with manually computed one #51 (fixes #46):
    • With this PR the GRAPE-reported infidelity matches the manually computed one by evolving the system using the optimized control pulses.

GitHub Workflows

  • Update versions of action tools #35

  • Make upload and download artifacts functionality compatible with the API of artifacts@v4 #64

Pulse optimisation and objective modules

  • Fix state transfer not working for GRAPE and CRAB #36 (fixes #34)

Documentation

  • Fixing broken links in README #39

  • Fix: Load jQuery explicitly to resolve broken search panel on deployed docs #42

Miscellaneous

  • Add interactive test notebooks for closed systems #43

  • Added requirements for interactive tests to setup.cfg #53

  • Make it possible to display qutip-qoc as a family package #56

Dependencies management

  • Make all JAX and machine learning related dependencies optional #32

Dependabot dependencies upgrades

  • #25

  • #26

  • #27

  • #28

  • #45

  • #61

Version 0.1.1 (Oct 04, 2024)

This is an update to the beta release of qutip-qoc.

It mainly introduces the new reinforcement learning algorithm qutip_qoc._rl.

  • Non-public facing functions have been renamed to start with an underscore.

  • As with other QuTiP functions, optimize_pulses now takes a tlist argument instead of _TimeInterval.

  • The structure for the control guess and bounds has changed and now takes in an optional __time__ keyword.

  • The result does no longer return optimized_objectives but instead optimized_H.

Features

  • New reinforcement learning algorithm, developed during GSOC24 (#19, #18, by LegionAtol)

  • Automatic transfromation of initial and target operator to superoperator (#23, by flowerthrower)

Bug Fixes

  • Prevent loss of __time__ keyword in optimize_pulses (#22, by flowerthrower)

Version 0.1.0b1 (July, 2024)

This is the beta release of qutip-qoc, the extended quantum control package in QuTiP.

It has undergone major refactoring and restructuring of the codebase.

  • Non-public facing functions have been renamed to start with an underscore.

  • As with other QuTiP functions, optimize_pulses now takes a tlist argument instead of _TimeInterval.

  • The structure for the control guess and bounds has changed and now takes in an optional __time__ keyword.

  • The result does no longer return optimized_objectives but instead optimized_H.

Bug Fixes

  • basinhopping result does not contain minimizer message

  • boundary issues with CRAB

Version 0.0.0 (December 26, 2023)

This is the alpha version of qutip-qoc, the extended quantum control package in QuTiP.

The qutip-qoc package builds up on the qutip-qtrl package. It enhances it by providing two additional algorithms to optimize analytically defined control functions. The package also aims for a more general way of defining control problems with QuTiP and makes switching between the four control algorithms very easy.

Features

  • qutip_qoc.GOAT is an extension to the Gradient Optimization of Analytic conTrols (GOAT) [1] algorithm. It encoporates an additional time parameterization to allow for optimization over the total evolution time.

  • qutip_qoc.JOPT is an JAX automatic differentiation Optimization of Analytic conTrols (JOPT) algorithm.

  • Both algorithms can be addressed by the qutip_qoc.optimize_pulses function, which consists of a two-layer approach to find global optimal values for parameterized analytical control functions. The global optimization layer provides scipy.optimize.dual_annealing and scipy.optimize.basinhopping, while the local minimization layer supports all gradient driven scipy.optimize.minimize methods.

Bug Fixes

  • None