Variational Quantum Eigensolver (VQE) Algorithm Implementation
VQE is a quantum-classical hybrid algorithm for finding the ground state energy of quantum systems. It uses a parameterized quantum circuit (ansatz) to prepare trial states and classical optimization to minimize the energy expectation value.
Key Features:
Algorithm Flow:
This implementation targets production use with real quantum hardware.
Variational Quantum Eigensolver (VQE) Algorithm Implementation VQE is a quantum-classical hybrid algorithm for finding the ground state energy of quantum systems. It uses a parameterized quantum circuit (ansatz) to prepare trial states and classical optimization to minimize the energy expectation value. Key Features: - Multiple ansatz types (hardware-efficient, UCCSD-inspired, symmetry-preserving) - Pauli string Hamiltonian representation with measurement grouping - Integration with fastmath optimization for classical optimization - Comprehensive analysis and convergence monitoring - Support for both gate-based and measurement-based implementations Algorithm Flow: 1. Initialize parameterized quantum circuit (ansatz) 2. Prepare trial state |ψ(θ)⟩ with parameters θ 3. Measure expectation value ⟨ψ(θ)|H|ψ(θ)⟩ 4. Use classical optimizer to update parameters 5. Repeat until convergence This implementation targets production use with real quantum hardware.
(analyze-vqe-landscape objective-fn optimal-params perturbation-size)
Analyze the VQE energy landscape around optimal parameters.
Parameters:
Returns: Map with landscape analysis
Analyze the VQE energy landscape around optimal parameters. Parameters: - objective-fn: VQE objective function - optimal-params: Optimal parameters found - perturbation-size: Size of parameter perturbations for analysis Returns: Map with landscape analysis
(create-measurement-circuits pauli-terms basis-type base-circuit)
Create quantum circuits for measuring Pauli terms with proper basis rotations.
This function generates the measurement circuits needed for hardware execution of VQE. Each Pauli term requires specific basis rotations before measurement.
Parameters:
Returns: Quantum circuit with appropriate basis rotation gates added
Create quantum circuits for measuring Pauli terms with proper basis rotations. This function generates the measurement circuits needed for hardware execution of VQE. Each Pauli term requires specific basis rotations before measurement. Parameters: - pauli-terms: Collection of Pauli terms requiring the same measurement basis - basis-type: Type of measurement basis (:z, :x, :y, or :mixed) - base-circuit: Base quantum circuit (ansatz output) to modify Returns: Quantum circuit with appropriate basis rotation gates added
(create-vqe-objective hamiltonian ansatz-fn backend options)
Create the objective function for VQE optimization.
This function creates a production-ready objective function that:
The implementation supports both backend execution (for real hardware) and direct simulation (for testing and development).
Parameters:
Returns: Function that takes parameters and returns energy expectation value
Create the objective function for VQE optimization. This function creates a production-ready objective function that: 1. Takes variational parameters as input 2. Constructs the ansatz circuit with those parameters 3. Executes the circuit on the backend or simulator 4. Calculates the Hamiltonian expectation value from the final quantum state 5. Returns the energy (to be minimized by the optimizer) The implementation supports both backend execution (for real hardware) and direct simulation (for testing and development). Parameters: - hamiltonian: Hamiltonian to minimize (collection of Pauli terms) - ansatz-fn: Function that takes parameters and returns a circuit - backend: Quantum backend for circuit execution (can be nil for direct simulation) - options: Execution options (shots, etc.) Returns: Function that takes parameters and returns energy expectation value
(heisenberg-hamiltonian num-sites)
(heisenberg-hamiltonian num-sites coupling)
(heisenberg-hamiltonian num-sites coupling periodic)
Create a Heisenberg model Hamiltonian for a 1D chain.
H = J Σᵢ (XᵢXᵢ₊₁ + YᵢYᵢ₊₁ + ZᵢZᵢ₊₁)
Parameters:
Returns: Collection of Pauli terms
Create a Heisenberg model Hamiltonian for a 1D chain. H = J Σᵢ (XᵢXᵢ₊₁ + YᵢYᵢ₊₁ + ZᵢZᵢ₊₁) Parameters: - num-sites: Number of sites in the chain - coupling: Coupling strength J (default: 1.0) - periodic: Whether to use periodic boundary conditions (default: true) Returns: Collection of Pauli terms
(measurement-based-expectation hamiltonian measurement-results total-shots)
Calculate expectation value using measurement statistics (for real hardware).
This function is used when running on actual quantum hardware where we get measurement counts rather than direct access to the quantum state.
IMPORTANT: This function assumes that the measurement-results correspond to measurements made in the appropriate rotated basis for each Pauli string. For proper hardware implementation:
In practice, you would group Pauli strings by measurement basis and perform separate circuit executions for each group.
Parameters:
Returns: Real expectation value estimated from measurements
Calculate expectation value using measurement statistics (for real hardware). This function is used when running on actual quantum hardware where we get measurement counts rather than direct access to the quantum state. IMPORTANT: This function assumes that the measurement-results correspond to measurements made in the appropriate rotated basis for each Pauli string. For proper hardware implementation: - Z measurements: computational basis (no rotation needed) - X measurements: apply H gates before measurement - Y measurements: apply S†H gates before measurement In practice, you would group Pauli strings by measurement basis and perform separate circuit executions for each group. Parameters: - hamiltonian: Collection of Pauli terms - measurement-results: Map from Pauli strings to measurement result maps Format: {pauli-string {bit-string count}} - total-shots: Total number of measurements per Pauli string Returns: Real expectation value estimated from measurements
(molecular-hydrogen-hamiltonian)
(molecular-hydrogen-hamiltonian bond-distance)
Create the molecular hydrogen (H₂) Hamiltonian in the STO-3G basis using Jordan-Wigner encoding.
This implementation provides the standard H₂ Hamiltonian used in quantum computing literature, mapped to a 4-qubit system via the Jordan-Wigner transformation. The qubit mapping follows the standard convention:
qubit 0: First spin orbital
qubit 1: Second spin orbital
qubit 2: Third spin orbital
qubit 3: Fourth spin orbital
The Hartree-Fock reference states |0011⟩ and |1100⟩ are degenerate in this representation, with the true ground state being a superposition that VQE should discover.
High-precision coefficients from Kandala et al. Nature (2017) ensure:
Parameters:
Returns: Collection of Pauli terms representing the H₂ molecular Hamiltonian with μHa precision
Create the molecular hydrogen (H₂) Hamiltonian in the STO-3G basis using Jordan-Wigner encoding. This implementation provides the standard H₂ Hamiltonian used in quantum computing literature, mapped to a 4-qubit system via the Jordan-Wigner transformation. The qubit mapping follows the standard convention: qubit 0: First spin orbital qubit 1: Second spin orbital qubit 2: Third spin orbital qubit 3: Fourth spin orbital The Hartree-Fock reference states |0011⟩ and |1100⟩ are degenerate in this representation, with the true ground state being a superposition that VQE should discover. High-precision coefficients from Kandala et al. Nature (2017) ensure: - Hartree-Fock energy: EXACTLY -1.117 Ha (μHa precision) - VQE ground state target: ~-1.137 Ha - Production-ready accuracy for quantum hardware implementations Parameters: - bond-distance: H-H bond distance in Angstroms (coefficient set is optimized for 0.735 Å) Returns: Collection of Pauli terms representing the H₂ molecular Hamiltonian with μHa precision
(variational-quantum-eigensolver backend options)
Main VQE algorithm implementation.
This function orchestrates the VQE process, including ansatz creation, optimization, and execution on a quantum backend. It supports various ansatz types and optimization methods, allowing for flexible configuration based on the problem and available resources.
Supported ansatz types:
Supported optimization methods:
Parameters:
Returns: Map containing VQE results and analysis
Example: (variational-quantum-eigensolver backend {:hamiltonian [{:coefficient 1.0 :terms [[0 1]]} {:coefficient -0.5 :terms [[0 0] [1 1]]}] :ansatz-type :hardware-efficient :num-qubits 2 :num-layers 2 :optimization-method :adam :max-iterations 100 :tolerance 1e-5 :shots 2048})
Main VQE algorithm implementation. This function orchestrates the VQE process, including ansatz creation, optimization, and execution on a quantum backend. It supports various ansatz types and optimization methods, allowing for flexible configuration based on the problem and available resources. Supported ansatz types: - :hardware-efficient - Hardware-efficient ansatz with configurable layers and entangling gates - :chemistry-inspired - Chemistry-inspired ansatz with excitation layers - :uccsd - UCCSD ansatz for chemistry problems - :symmetry-preserving - Symmetry-preserving ansatz for fermionic systems - :custom - Custom ansatz function provided in options Supported optimization methods: - :gradient-descent - Basic gradient descent with parameter shift gradients - :adam - Adam optimizer with parameter shift gradients - :quantum-natural-gradient - Quantum Natural Gradient using Fisher Information Matrix - :nelder-mead - Derivative-free Nelder-Mead simplex method - :powell - Derivative-free Powell's method - :cmaes - Covariance Matrix Adaptation Evolution Strategy (robust) - :bobyqa - Bound Optimization BY Quadratic Approximation (handles bounds well) - :gradient - Fastmath gradient-based optimizers (not available in this version) Parameters: - backend: Quantum backend implementing QuantumBackend protocol - options: Additional options map for execution - :optimization-method - Optimization method to use (default: :adam) - :max-iterations - Maximum iterations for optimization (default: 500) - :tolerance - Convergence tolerance (default: 1e-6) - :ansatz-type - Ansatz type to use (default: :hardware-efficient) - :num-qubits - Number of qubits in the circuit (default: 2) - :num-layers - Number of layers for hardware-efficient ansatz (default: 1) - :num-excitation-layers - Number of excitation layers for chemistry-inspired ansatz (default: 1) - :num-excitations - Number of excitations for UCCSD ansatz (default: 2) - :num-particles - Number of particles for symmetry-preserving ansatz (default: 2) - :shots - Number of shots for circuit execution (default: 1024) Returns: Map containing VQE results and analysis Example: (variational-quantum-eigensolver backend {:hamiltonian [{:coefficient 1.0 :terms [[0 1]]} {:coefficient -0.5 :terms [[0 0] [1 1]]}] :ansatz-type :hardware-efficient :num-qubits 2 :num-layers 2 :optimization-method :adam :max-iterations 100 :tolerance 1e-5 :shots 2048})
(vqe-convergence-analysis optimization-result)
Analyze VQE convergence from optimization history.
Parameters:
Returns: Map with convergence analysis
Analyze VQE convergence from optimization history. Parameters: - optimization-result: Result from VQE optimization Returns: Map with convergence analysis
(vqe-optimization objective-fn initial-parameters options)
Run VQE optimization using the specified method.
Supports multiple optimization methods:
Custom implementations with parameter shift rules:
Fastmath derivative-free optimizers:
Note: Other fastmath optimizers like BFGS, L-BFGS, CG, COBYLA are not available in this fastmath version due to builder issues. Use the verified methods above.
Parameters:
Returns: Map with optimization results
Run VQE optimization using the specified method. Supports multiple optimization methods: Custom implementations with parameter shift rules: - :gradient-descent - Parameter shift rule with gradient descent (robust) - :adam - Adam optimizer with parameter shift gradients (often fastest) - :quantum-natural-gradient - Quantum Natural Gradient (experimental, requires QFIM) Fastmath derivative-free optimizers: - :nelder-mead - Nelder-Mead simplex (good general purpose) - :powell - Powell's method (coordinate descent) - :cmaes - Covariance Matrix Adaptation Evolution Strategy (robust, global) - :bobyqa - Bound Optimization BY Quadratic Approximation (handles bounds well) Note: Other fastmath optimizers like BFGS, L-BFGS, CG, COBYLA are not available in this fastmath version due to builder issues. Use the verified methods above. Parameters: - objective-fn: Objective function to minimize - initial-parameters: Starting parameter values - options: Optimization options Returns: Map with optimization results
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close