I would like to play around with Qiskit OpenPulse and the publicly available IBMQ quantum computer that supports OpenPulse. My humble goal is to use Qutip's optimal control libraries to get a pulse and feed that into OpenPulse. However, even through reading the Qiskit/OpenPulse specification on arxiv I am a little confused on the exact units and the underlying hardware details.

For starters, I tried the following:

  1. Obtain a matrix representation (tri-diagonal) of the charge Hamiltonian for Transmons (equation 2.30 from Bishop's thesis) by using the frequency transitions between 0->1 and 1->2
  2. Obtain the drift and control matrices by following section 2.8 of Bishop's thesis
  3. Fit a pulse using Qutip's GRAPE implementation with my derived drift and control

However, when I fed this pulse as a OpenPulse object to the quantum computer, I got back a completely different measured results. I believe the issue is somewhere in the units that OpenPulse is using (I noticed the pulse can not have a greater than 1 magnitude), but perhaps my issue lies somewhere in misunderstanding the transom described in Bishop's thesis and the IBMQ hardware.


1 Answer 1


The Qiskit units are unitless and require the drive Hamiltonian provided by the backend to link the program into a simulatable format. Keep in mind the Hamiltonian unit's are angular frequencies. Real hardware often has transfer functions and non-linearities that are not captured by the simplistic Hamiltonian that is returned, unless you account for these in your pulse optimization routine it may not work. However, I do know of Qutip being used for these purposes, but, do not have the source code available to share.

The rough series of steps you must follow is:

  1. Convert the Qiskit Hamiltonian to a drift/control Hamiltonian in Qutip. Take care to build a map of channels to control Hamiltonian terms and to make sure the amplitudes are mapped appropriately (factors of 2pi are a common gotcha). You'll likely need to break them up into real/imaginary terms.
  2. Solve for your desired unitary using your selected QOC routine in Qutip.
  3. Take the emitted amplitude arrays and map them back to Waveform pulses on the corresponding channels. You'll need to take to undo any amplitude mappings from Qiskit -> Qutip and vice versa.

My recommendation would be to start with simple 1-qubit pulses before moving onto two-qubit interactions. Before running on hardware, verify the found pulses perform the desired interaction on Qiskit Aer's pulse simulator. As mentioned above, the hardware will likely perform worse due to the poor model you will have used to find your pulses.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.