Site Tools


cuda-q-vqe

VQE (Variational Quantum Eigensolver)

VQE finds ground state energies of Hamiltonians using a variational ansatz trained by a classical optimizer. Given Hamiltonian $H$, VQE finds parameters $\theta^*$ that minimize $\langle \psi(\theta) | H | \psi(\theta) \rangle$.

#include "cudaq.h"
#include "cudaq/algorithm/vqe.h"
#include "cudaq/optimizer.h"
#include <complex>
 
// Hamiltonian: combination of Pauli operators
// H = 0.5*Z + 0.25*X
cudaq::spin_op hamiltonian = 0.5 * cudaq::spin::z(0) + 
                              0.25 * cudaq::spin::x(0);
 
// Ansatz: parameterized circuit
struct VQEAnsatz {
  void operator()(std::vector<double> params) __qpu__ {
    cudaq::qvector q(1);
    ry(params[0], q[0]);
    if (params.size() > 1) {
      rz(params[1], q[0]);
    }
  }
};
 
int main() {
  // Initialize optimizer and parameters
  cudaq::optimizers::COBYLA optimizer;
  std::vector<double> initial_params = {0.1, 0.1};
 
  // Run VQE
  auto [params_opt, energy] = cudaq::vqe<VQEAnsatz>(
      hamiltonian,           // Hamiltonian to minimize
      optimizer,             // Classical optimizer
      initial_params,        // Initial parameters
      100                    // Max iterations
  );
 
  printf("Optimal energy: %.6f\n", energy);
  printf("Optimal params: ");
  for (auto p : params_opt) {
    printf("%.3f ", p);
  }
  printf("\n");
 
  return 0;
}

VQE is practical for near-term quantum hardware: it requires only measuring expectation values, not full state tomography. Useful for quantum chemistry (molecular ground states) and optimization.

cuda-q-vqe.md · Last modified: by 127.0.0.1