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

group-commuting-termsclj

(group-commuting-terms hamiltonian)

Group Hamiltonian terms that can be measured simultaneously.

Terms that commute can be measured in the same quantum circuit execution, reducing the number of measurements needed.

Parameters:

  • hamiltonian: Collection of Pauli terms

Returns: Vector of groups, where each group is a collection of commuting terms

Group Hamiltonian terms that can be measured simultaneously.

Terms that commute can be measured in the same quantum circuit execution,
reducing the number of measurements needed.

Parameters:
- hamiltonian: Collection of Pauli terms

Returns:
Vector of groups, where each group is a collection of commuting terms
sourceraw docstring

hamiltonian-expectationclj

(hamiltonian-expectation hamiltonian quantum-state)

Calculate expectation value of a Hamiltonian.

⟨H⟩ = Σᵢ cᵢ ⟨Pᵢ⟩ where cᵢ are coefficients and Pᵢ are Pauli strings.

Parameters:

  • hamiltonian: Collection of Pauli terms
  • quantum-state: Quantum state to measure

Returns: Real expectation value (energy)

Calculate expectation value of a Hamiltonian.

⟨H⟩ = Σᵢ cᵢ ⟨Pᵢ⟩ where cᵢ are coefficients and Pᵢ are Pauli strings.

Parameters:
- hamiltonian: Collection of Pauli terms
- quantum-state: Quantum state to measure

Returns:
Real expectation value (energy)
sourceraw docstring

hardware-efficient-ansatzclj

(hardware-efficient-ansatz num-qubits)
(hardware-efficient-ansatz num-qubits num-layers)
(hardware-efficient-ansatz num-qubits num-layers entangling-gate)

Create a hardware-efficient ansatz circuit.

This ansatz consists of layers of single-qubit rotations followed by entangling gates, designed to be implementable on near-term quantum devices.

Parameters:

  • num-qubits: Number of qubits
  • num-layers: Number of ansatz layers (default: 1)
  • entangling-gate: Type of entangling gate (:cnot, :cz, :crz) (default: :cnot)

Returns: Function that takes parameters and returns a quantum circuit

Create a hardware-efficient ansatz circuit.

This ansatz consists of layers of single-qubit rotations followed by
entangling gates, designed to be implementable on near-term quantum devices.

Parameters:
- num-qubits: Number of qubits
- num-layers: Number of ansatz layers (default: 1)
- entangling-gate: Type of entangling gate (:cnot, :cz, :crz) (default: :cnot)

Returns:
Function that takes parameters and returns a quantum circuit
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.

Parameters:

  • hamiltonian: Collection of Pauli terms
  • measurement-results: Map from bit strings to counts
  • total-shots: Total number of measurements

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.

Parameters:
- hamiltonian: Collection of Pauli terms
- measurement-results: Map from bit strings to counts
- total-shots: Total number of measurements

Returns:
Real expectation value estimated from measurements
sourceraw docstring

molecular-hydrogen-hamiltonianclj

(molecular-hydrogen-hamiltonian)
(molecular-hydrogen-hamiltonian bond-distance)

Create the Hamiltonian for molecular hydrogen (H2) in the STO-3G basis.

This is a standard benchmark Hamiltonian used in quantum chemistry. The Hamiltonian has 15 terms and operates on 4 qubits.

Parameters:

  • bond-distance: Internuclear distance in Angstroms (default: 0.735)

Returns: Collection of Pauli terms representing the H2 Hamiltonian

Create the Hamiltonian for molecular hydrogen (H2) in the STO-3G basis.

This is a standard benchmark Hamiltonian used in quantum chemistry.
The Hamiltonian has 15 terms and operates on 4 qubits.

Parameters:
- bond-distance: Internuclear distance in Angstroms (default: 0.735)

Returns:
Collection of Pauli terms representing the H2 Hamiltonian
sourceraw docstring

pauli-string-expectationclj

(pauli-string-expectation pauli-string quantum-state)

Calculate expectation value of a single Pauli string.

Parameters:

  • pauli-string: String like 'XYZZ' representing Pauli operators
  • quantum-state: Quantum state to measure

Returns: Real expectation value

Calculate expectation value of a single Pauli string.

Parameters:
- pauli-string: String like 'XYZZ' representing Pauli operators
- quantum-state: Quantum state to measure

Returns:
Real expectation value
sourceraw docstring

pauli-termclj

(pauli-term coefficient pauli-string)

Create a Pauli term with coefficient and Pauli string.

Parameters:

  • coefficient: Real coefficient for the term
  • pauli-string: String like 'XYZZ' representing tensor product of Pauli operators

Returns: Map representing a single term in the Hamiltonian

Create a Pauli term with coefficient and Pauli string.

Parameters:
- coefficient: Real coefficient for the term
- pauli-string: String like 'XYZZ' representing tensor product of Pauli operators

Returns:
Map representing a single term in the Hamiltonian
sourceraw docstring

symmetry-preserving-ansatzclj

(symmetry-preserving-ansatz num-qubits num-particles)
(symmetry-preserving-ansatz num-qubits num-particles num-layers)

Create a symmetry-preserving ansatz circuit.

This ansatz preserves certain symmetries like particle number conservation, important for quantum chemistry and condensed matter applications.

Parameters:

  • num-qubits: Number of qubits
  • num-particles: Number of particles to conserve
  • num-layers: Number of ansatz layers

Returns: Function that takes parameters and returns a quantum circuit

Create a symmetry-preserving ansatz circuit.

This ansatz preserves certain symmetries like particle number conservation,
important for quantum chemistry and condensed matter applications.

Parameters:
- num-qubits: Number of qubits
- num-particles: Number of particles to conserve
- num-layers: Number of ansatz layers

Returns:
Function that takes parameters and returns a quantum circuit
sourceraw docstring

uccsd-inspired-ansatzclj

(uccsd-inspired-ansatz num-qubits)
(uccsd-inspired-ansatz num-qubits num-excitations)

Create a UCCSD-inspired ansatz circuit.

Unitary Coupled Cluster with Singles and Doubles (UCCSD) is a quantum chemistry ansatz that captures important electronic correlations. This is a simplified version suitable for VQE implementations.

Parameters:

  • num-qubits: Number of qubits (must be even for electron pairs)
  • num-excitations: Number of excitation operators to include

Returns: Function that takes parameters and returns a quantum circuit

Create a UCCSD-inspired ansatz circuit.

Unitary Coupled Cluster with Singles and Doubles (UCCSD) is a quantum chemistry
ansatz that captures important electronic correlations. This is a simplified
version suitable for VQE implementations.

Parameters:
- num-qubits: Number of qubits (must be even for electron pairs)
- num-excitations: Number of excitation operators to include

Returns:
Function that takes parameters and returns a quantum circuit
sourceraw docstring

validate-hamiltonianclj

(validate-hamiltonian hamiltonian)

Validate that a Hamiltonian is properly formed.

Parameters:

  • hamiltonian: Collection of Pauli terms

Returns: Boolean indicating validity

Validate that a Hamiltonian is properly formed.

Parameters:
- hamiltonian: Collection of Pauli terms

Returns:
Boolean indicating validity
sourceraw docstring

variational-quantum-eigensolverclj

(variational-quantum-eigensolver backend config)
(variational-quantum-eigensolver backend config _options)

Main VQE algorithm implementation.

Parameters:

  • backend: Quantum backend implementing QuantumBackend protocol
  • config: VQE configuration map
  • options: Additional options for execution

Returns: Map containing VQE results and analysis

Main VQE algorithm implementation.

Parameters:
- backend: Quantum backend implementing QuantumBackend protocol
- config: VQE configuration map
- options: Additional options for execution

Returns:
Map containing VQE results and analysis
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 classical optimizer.

Parameters:

  • objective-fn: Objective function to minimize
  • initial-parameters: Starting parameter values
  • options: Optimization options

Returns: Map with optimization results

Run VQE optimization using classical optimizer.

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