Closed hongyehu closed 4 months ago
Both of these are hidden by the problem template structure, but you can get more fine-grained control over the problem data if we look one layer deeper. Check out this fragment from the UnitarySmoothPulseProblem
(line ~206)
components = (
Ũ⃗ = Ũ⃗,
a = a,
da = da,
dda = dda,
)
bounds = (
a = a_bounds,
dda = dda_bounds,
)
traj = NamedTrajectory(
components;
controls=(:dda,),
timestep=Δt,
bounds=bounds,
initial=initial,
final=final,
goal=goal
)
You can directly specify the bounds you'd like. In a UnitarySmoothPulseProblem
, we use symmetric bounds. However, bounds is just a tuple with the form: ([lower, vector, entries], [upper, vector, entries])
. The number of vector entries should correspond to the number of controls in the control matrix.
The slope constraint can be set using a da_bound
. In a UnitarySmoothPulseProblem
, we use $\ddot{a}$ as the control variable---it is Euler integrated twice to get back to $a$. Hence, you have direct access to $\dot{a}$ and can append your constraint, mimicking the style of the others.
Our recommended workflow is to write a new problem template that is adapted to your desired problem. You can start from an existing template and make piecemeal changes to adapt it to your needs.
One current goal is to document this workflow and make our problem templates into much cleaner minimal working examples to better enable this workflow.
Closing with a note to improve docs and template flexibility.
Feature Description
In quantum control using the ansatz Hamiltonian: $H(t) = H{drift} + \sum{i} a{i}(t)H{i}$. Sometimes the machine requires:
Importance
5 (highest)
What does this feature affect?
Other information
related to a deadline for experiments.