Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Conversation

@goerz
Copy link
Member

@goerz goerz commented Jan 22, 2024

Renames Objective to Trajectory, propagate_objective to propagate_trajectry, the objectives keyword argument in optimize to trajectories, etc.

This is a large, breaking change.

The term "objective" was originally taken from the krotov Python package, but has been a considerable source of misunderstanding. People (rightfully) get confused about "objectives" which are separate from the optimization functional. Especially when talking about a perfect entangler optimization where the objectives/trajectories have no target state, I always have to explain that 'objectives' is a misnomer, and that these are just the states whose dynamics enter the functional. The term "trajectory" is more accurate, as it consists of the initial state and the dynamical generator. Any (optional) additional properties (target_state, weight, …) are best understood as extra information specific to that trajectory that the functional may use.

As part of this breaking change, there have been considerable revisions of related functionality. Trajectories and ControlProblems can now also be instantiated with positional arguments. Trajectories can now take propagation keyword arguments with a prop_ prefix. These are taken into account in propagate_trajectory and the new init_prop_trajectory. These should be used in Krotov/GRAPE and finally enable customizing the propagation in an optimal control context (like a prop_callback that takes out population from the highest level, in lieu of a non-Hermitian Hamiltonian.)

@goerz goerz force-pushed the rename-objectives branch from 03e9a5d to cae4cb7 Compare January 22, 2024 07:33
@goerz goerz merged commit cae4cb7 into master Jan 22, 2024
@goerz goerz deleted the rename-objectives branch January 22, 2024 07:34
goerz added a commit to JuliaQuantumControl/QuantumControl.jl that referenced this pull request Jan 22, 2024
Renames `Objective` to `Trajectory`, `propagate_objective` to
`propagate_trajectry`, the `objectives` keyword argument in `optimize`
to `trajectories`, etc.

This is a large, breaking change.

The term "objective" was originally taken from the [`krotov` Python
package](https://github.com/qucontrol/krotov), but has been a
considerable source of misunderstanding. People (rightfully) get
confused about "objectives" which are separate from the optimization
functional. Especially when talking about a perfect entangler
optimization where the objectives/trajectories have no target state, I
always have to explain that 'objectives' is a misnomer, and that these
are just the states whose dynamics enter the functional. The term
"trajectory" is more accurate, as it consists of the initial state and
the dynamical generator. Any (optional) additional properties
(`target_state`, `weight`, …) are best understood as extra information
specific to that trajectory that the functional may use.

As part of this breaking change, there have been considerable revisions
of related functionality. Trajectories and ControlProblems can now also
be instantiated with positional arguments. Trajectories can now take
propagation keyword arguments with a `prop_` prefix. These are taken
into account in `propagate_trajectory` and the new
`init_prop_trajectory`. These should be used in Krotov/GRAPE and finally
enable customizing the propagation in an optimal control context (like a
`prop_callback` that takes out population from the highest level, in
lieu of a non-Hermitian Hamiltonian.)

See also
JuliaQuantumControl/QuantumControlBase.jl#72
goerz added a commit to JuliaQuantumControl/QuantumControl.jl that referenced this pull request Jan 22, 2024
Renames `Objective` to `Trajectory`, `propagate_objective` to
`propagate_trajectry`, the `objectives` keyword argument in `optimize`
to `trajectories`, etc.

This is a large, breaking change.

The term "objective" was originally taken from the [`krotov` Python
package](https://github.com/qucontrol/krotov), but has been a
considerable source of misunderstanding. People (rightfully) get
confused about "objectives" which are separate from the optimization
functional. Especially when talking about a perfect entangler
optimization where the objectives/trajectories have no target state, I
always have to explain that 'objectives' is a misnomer, and that these
are just the states whose dynamics enter the functional. The term
"trajectory" is more accurate, as it consists of the initial state and
the dynamical generator. Any (optional) additional properties
(`target_state`, `weight`, …) are best understood as extra information
specific to that trajectory that the functional may use.

As part of this breaking change, there have been considerable revisions
of related functionality. Trajectories and ControlProblems can now also
be instantiated with positional arguments. Trajectories can now take
propagation keyword arguments with a `prop_` prefix. These are taken
into account in `propagate_trajectory` and the new
`init_prop_trajectory`. These should be used in Krotov/GRAPE and finally
enable customizing the propagation in an optimal control context (like a
`prop_callback` that takes out population from the highest level, in
lieu of a non-Hermitian Hamiltonian.)

See also
JuliaQuantumControl/QuantumControlBase.jl#72
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

breaking PRs that break compatibility

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants