Disclaimer: I am a software engineer who is curious about quantum computing. Although I understand some basic concepts, theory and math behind it, I am by no means experienced in this domain.

I am doing some preliminary research on the state of quantum software development. Part of my research is to evaluate Microsoft's QDK and some of its samples (written in Q#).

As I understand, certain optimization problems (the traveling salesman sort) may be tackled by first reducing them as QUBO or Ising problems and then solving them via quantum annealing or VQE algorithms. Part of this process is finding out the Hamiltonian and solving Schrodinger's equation. This is my understanding, kindly correct me if wrong.

QDK's Hamiltonian simulation samples have examples for Ising and Trotter–Suzuki based simulations. But recently 1Qbit has released a VQE-based solution.

My question is: do all the methods listed above (VQE, Ising, Trotter–Suzuki) do the same thing? That is, estimate ground state energy of a given system? For example, do the H2 simulation examples based on VQE and Trotter–Suzuki pretty much do the same thing in different ways? If so, which method should be preferred?


1 Answer 1


In each of the examples you mentioned, the task breaks very roughly down into two steps: finding a Hamiltonian that describes the problem in terms of qubits, and finding the ground state energy of that Hamiltonian. From that perspective, the Jordan–Wigner transform is a way to find a qubit Hamiltonian corresponding to a given fermionic Hamiltonian.

Once you have your problem specified in terms of a qubit Hamiltonian, there's (again, very roughly) two families of approaches to finding a ground state energy. With variational approaches, you prepare states from a family of states called an ansatz, then estimate the expectation value of the Hamiltonian for each different input state, and minimize. To get each expectation value, you can do something like break the Hamiltonian $H$ up into a sum $H = \sum_i h_i H_i$, where each $h_i$ is a real number and each $H_i$ is a Hamiltonian that's easier to estimate the expectation value of, such as a Pauli operator. You can then estimate $\langle H \rangle$ by estimating each $\langle H_i \rangle$ in turn.

The other broad approach is to turn your energy estimation problem into a frequency estimation problem by evolving an input state under the qubit Hamiltonian $H$ that represents your problem. As you note in your question, this implicitly uses the Schrodinger equation $|\psi(t)\rangle = e^{-i H t} |\psi(0)\rangle$. In the special case that $|\psi(0)\rangle$ is the ground state (say, as the result of an adiabatic preparation), then this gives you that $|\psi(t)\rangle = e^{-i E t} |\psi(0)\rangle$; that is, a global phase about your initial state. Since global phases are unobservable, you can use the phase kickback trick (see Chapter 7 of my book once it's posted for more details) to make that global phase into a local phase. From there, as you vary $t$, the ground state energy appears as a frequency that you can learn using phase estimation. Phase estimation itself comes in two broad flavors (there's a bit of a theme here...), namely quantum and iterative phase estimation. In the first case, you use extra qubits to read out the phase into a quantum register, which is very helpful if you want to do further quantum processing of that energy. In the second case, you use one additional qubit to do classical measurements with phase kickback, letting you reuse your copy of the ground state. At that point, learning $E$ from your classical measurements is a classical stats problem that you can solve in a number of different ways, such as with Kitaev's algorithm, maximum likelihood estimation, Bayesian inference, robust phase estimation, random walk phase estimation, or many others.

That then leaves the problem of how to evolve under $H$. That's where techniques like Trotter–Suzuki come in. Using the Trotter–Suzuki decomposition, you break $H$ into a sum of terms that are each easy to simulate (that can be the same as the the decomposition you would use for VQE, but need not be), then rapidly switch between simulating each term. There's many other simulation algorithms out there, such as qubitization, but Trotter–Suzuki is a great place to start.

Given the plethora of different techniques, then, would you choose VQE over phase estimation or vice versa? That comes down to what kinds of quantum resources you want to use to solve your problem. At a very very high level, VQE tends to generate a very large number of quantum circuits that are each pretty shallow. By contrast, phase estimation uses quantum programs that dramatically reduce the amount of data you need by using coherent evolution (again roughly, this is the difference between Heisenberg-limited precision and the "standard quantum limit," which is neither standard, quantum, nor a limit — but I digress). The downside is that phase estimation can use more qubits and deeper quantum programs. Understanding that trade-off is a large part of where tools like the trace simulator and resources estimator provided with the Quantum Development Kit come in. There's a lot out there, and being able to write up concrete implementations of each is now we can understand where each technique is most helpful.

  • 1
    $\begingroup$ Thanks for such a detailed explanation. I'll dwell on it and get back if required. $\endgroup$ Sep 17, 2019 at 5:01
  • $\begingroup$ Also, do share more about your book and how I can get it :) $\endgroup$ Sep 17, 2019 at 7:10
  • 2
    $\begingroup$ I can help out with the book, you can find it here: bit.ly/qsharp-book 💖 If you have any questions let Chris or me know! $\endgroup$ Sep 18, 2019 at 14:42

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.