pub struct VariationalCircuit {
pub num_qubits: usize,
pub num_params: usize,
pub parameters: Array1<f64>,
pub num_layers: usize,
pub ansatz_type: AnsatzType,
}Expand description
Variational quantum circuit with parameterized gates
Fields§
§num_qubits: usizeNumber of qubits
num_params: usizeNumber of parameters
parameters: Array1<f64>Current parameters
num_layers: usizeNumber of layers
ansatz_type: AnsatzTypeType of ansatz
Implementations§
Source§impl VariationalCircuit
impl VariationalCircuit
Sourcepub fn new(
num_qubits: usize,
num_params: usize,
num_layers: usize,
ansatz_type: AnsatzType,
) -> Result<Self>
pub fn new( num_qubits: usize, num_params: usize, num_layers: usize, ansatz_type: AnsatzType, ) -> Result<Self>
Creates a new variational circuit
Sourcepub fn create_circuit<const N: usize>(&self) -> Result<Circuit<N>>
pub fn create_circuit<const N: usize>(&self) -> Result<Circuit<N>>
Creates a circuit with the current parameters
Sourcepub fn compute_expectation(
&self,
hamiltonian: &[(f64, Vec<(usize, usize)>)],
) -> Result<f64>
pub fn compute_expectation( &self, hamiltonian: &[(f64, Vec<(usize, usize)>)], ) -> Result<f64>
Computes the expectation value of a Hamiltonian via direct statevector simulation.
hamiltonian is a slice of (coefficient, pauli_term_list) tuples.
Each pauli_term_list contains (qubit_index, pauli_type) pairs where
pauli_type encodes 0=I, 1=X, 2=Y, 3=Z.
The ansatz consists of num_layers repetitions of:
– H gate on every qubit
– RZ(θ_i) on qubit i using the i-th parameter (cycling if parameters run out)
– CNOT chain (linear nearest-neighbour entanglement)
Returns Σ_k coef_k · ⟨ψ | P_k | ψ⟩.
Sourcepub fn evaluate(
&self,
objective: &dyn Fn(&VariationalCircuit) -> Result<f64>,
) -> Result<f64>
pub fn evaluate( &self, objective: &dyn Fn(&VariationalCircuit) -> Result<f64>, ) -> Result<f64>
Evaluates the objective function for optimization
Sourcepub fn optimize(
&mut self,
objective: &dyn Fn(&VariationalCircuit) -> Result<f64>,
optimizer: &Optimizer,
max_iterations: usize,
) -> Result<f64>
pub fn optimize( &mut self, objective: &dyn Fn(&VariationalCircuit) -> Result<f64>, optimizer: &Optimizer, max_iterations: usize, ) -> Result<f64>
Optimizes the circuit parameters using the parameter-shift rule for gradient computation.
For each parameter θ_i the gradient is estimated as: ∂f/∂θ_i ≈ (f(θ_i + π/2) − f(θ_i − π/2)) / 2
A gradient-descent update is then applied with the learning rate from the
supplied Optimizer. Other optimizer variants fall back to lr = 0.01.
Trait Implementations§
Source§impl Clone for VariationalCircuit
impl Clone for VariationalCircuit
Source§fn clone(&self) -> VariationalCircuit
fn clone(&self) -> VariationalCircuit
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for VariationalCircuit
impl RefUnwindSafe for VariationalCircuit
impl Send for VariationalCircuit
impl Sync for VariationalCircuit
impl Unpin for VariationalCircuit
impl UnsafeUnpin for VariationalCircuit
impl UnwindSafe for VariationalCircuit
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.