Two-states to two-states optimal control

22 views
Skip to first unread message

Ali Husain

unread,
Jun 7, 2024, 7:16:55 AMJun 7
to QuTiP: Quantum Toolbox in Python
What is the most convenient way to set up an optimization for a pulse sequence which maps a subset of the Hilbert space to another subset? I see that currently you can set a target unitary or a target ket state, but I need something in between.

For example, consider a Hilbert space of 10 states. I want a pulse sequence which maps, for example, states 1 to 2 and 3 to 4 but don't care about where the rest of the states end up.

Patrick Hopf

unread,
Jun 9, 2024, 6:02:58 AMJun 9
to QuTiP: Quantum Toolbox in Python
Dear Ali,

Thank you for your request.
There is a neat way to achieve this within the new QuTiP-QOC package.
The beta release is currently on its way. However, if you are comfortable installing from source, you can already use the multi-objective feature. Since this is the beta version, we are happy to get any feedback from early users.
Please feel free to open an issue if you have any problems or want to see new features.
I hope this could help you with your question.

Kind regards
Patrick 

initial_0 = target_1 = qt.basis(3, 0) # |0>
initial_1 = target_0 = qt.basis(3, 1) # |1>

tlist = np.linspace(0, 0.5, 100)
init_pulse = [np.sin(t) for t in tlist]
control = qt.Qobj([[0, 1, 0], [1, 0, 1], [0, 1, 0]])

drift = qt.qeye(3)

H = [drift, [control, init_pulse]]
objectives = [ # weights are optional
qoc.Objective(initial_0, H, target_0, weight=0.5),
qoc.Objective(initial_1, H, target_1, weight=0.5),
]

result = qoc.optimize_pulses(
objectives,
control_parameters={
"ctrl": {
"guess": init_pulse,
"bounds": [-10, 10],
}
},
tlist=tlist,
algorithm_kwargs={
"alg": "GRAPE",
"fid_err_targ": 0.1,
}
)
Reply all
Reply to author
Forward
0 new messages