Liking cljdoc? Tell your friends :D

org.soulspace.qclojure.application.algorithm.vqe

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.

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.
raw docstring

analyze-vqe-landscapeclj

(analyze-vqe-landscape objective-fn optimal-params perturbation-size)

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

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
sourceraw docstring

create-measurement-circuitsclj

(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:

  • 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 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
sourceraw docstring

create-vqe-objectiveclj

(create-vqe-objective hamiltonian ansatz-fn backend options)

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

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
sourceraw docstring

heisenberg-hamiltonianclj

(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:

  • 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

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
sourceraw docstring

measurement-based-expectationclj

(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:

  • 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

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
sourceraw docstring

molecular-hydrogen-hamiltonianclj

(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:

  • 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

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
sourceraw docstring

variational-quantum-eigensolverclj

(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:

  • :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})

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})
sourceraw docstring

vqe-convergence-analysisclj

(vqe-convergence-analysis optimization-result)

Analyze VQE convergence from optimization history.

Parameters:

  • optimization-result: Result from VQE optimization

Returns: Map with convergence analysis

Analyze VQE convergence from optimization history.

Parameters:
- optimization-result: Result from VQE optimization

Returns:
Map with convergence analysis
sourceraw docstring

vqe-optimizationclj

(vqe-optimization objective-fn initial-parameters options)

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

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
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close