Skip to main content

Admm

Struct Admm 

Source
pub struct Admm {
    pub iterations: usize,
    pub object_step: f64,
    pub penalty: f64,
    pub dual_relaxation: f64,
    pub batch_size: usize,
    pub epsilon: f64,
}
Expand description

Linearized ADMM reconstruction for Fourier ptychographic microscopy.

§Method

The algorithm splits each predicted detector field from the shared object by introducing an auxiliary field and a scaled dual variable. Each step alternates among a measurement-amplitude proximal update of the auxiliary fields, a pupil-preconditioned linearized update of the common object spectrum, and a scaled-dual update that drives the auxiliary and predicted fields toward consensus. This separates the nonlinear measurement constraint from the overlapping Fourier-patch consistency constraint.

For incoherently multiplexed data, the amplitude proximal is joint across all source modes in a frame. Auxiliary and scaled-dual fields are stored per frame-source mode in ReconstructionState for exact checkpoint resumption. The fixed-pupil linearization and multiplexed proximal used here are crate adaptations of the reference ADMM-FPM formulation.

Each iteration reports detector-field RMS residuals. The primal residual is r_k = A x_k - z_k, evaluated after the linearized object update, and the dual residual is s_k = rho (z_k - z_{k-1}). Here A x denotes the concatenated per-mode detector fields, including each mode of a multiplexed frame. Masked pixels and zero-weight frames are excluded. These residuals diagnose consensus and auxiliary-field motion; the solver does not use them as stopping criteria.

§Reference

A. Wang, Z. Zhang, S. Wang, A. Pan, C. Ma, and B. Yao, “Fourier Ptychographic Microscopy via Alternating Direction Method of Multipliers” (2022), Cells 11(9), 1512.

Fields§

§iterations: usize

Number of complete passes through the acquisition schedule.

§object_step: f64

Step size of the linearized, pupil-preconditioned object update.

§penalty: f64

Positive augmented-Lagrangian penalty tying auxiliary fields to the fields predicted by the shared object.

§dual_relaxation: f64

Scaled-dual update relaxation in the inclusive range 0..=2.

§batch_size: usize

Number of measured frames supplied to each reconstruction step; the default processes every frame together.

§epsilon: f64

Positive numerical floor used in normalizations and dark-field handling.

Implementations§

Source§

impl Admm

Source

pub fn iterations(self, iterations: usize) -> Self

Sets the number of complete acquisition-schedule passes; validation requires non-zero.

Source

pub fn object_step(self, step: f64) -> Self

Sets the finite positive step size for the linearized object update.

Source

pub fn penalty(self, penalty: f64) -> Self

Sets the finite positive augmented-Lagrangian consensus penalty.

Source

pub fn dual_relaxation(self, relaxation: f64) -> Self

Sets finite scaled-dual relaxation in the inclusive interval [0, 2].

Source

pub fn batch_size(self, batch_size: usize) -> Self

Sets the positive acquisition-frame batch size.

Trait Implementations§

Source§

impl Clone for Admm

Source§

fn clone(&self) -> Admm

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Admm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Admm

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl ReconstructionAlgorithm for Admm

Source§

type IterationMetrics = AdmmIterationMetrics

Algorithm-specific metrics emitted by each step and appended to the trace.
Source§

fn validate(&self) -> Result<()>

Validates solver parameters independently of a reconstruction problem.
Source§

fn step<M: MeasurementRead>( &mut self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, batch: &Batch, _iteration: usize, ) -> Result<StepOutput<Self::IterationMetrics>>

Updates state for one scheduled batch in zero-based iteration.
Source§

fn iterations(&self) -> usize

Returns the requested number of complete schedule passes.
Source§

fn batch_size(&self) -> usize

Returns the number of measured frames combined into one step.
Source§

fn validate_problem<M: MeasurementRead>( &self, _problem: &ReconstructionProblem<M>, ) -> Result<()>

Validates solver requirements that depend on problem.
Source§

fn initialize<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionState>

Creates the default CPU-backed state for problem.
Source§

fn initialize_with_backend<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, backend: Arc<dyn Backend>, ) -> Result<ReconstructionState>

Creates reconstruction state using the supplied execution backend.
Source§

fn canonicalize_state<M: MeasurementRead>( &self, _problem: &ReconstructionProblem<M>, _state: &mut ReconstructionState, ) -> Result<()>

Projects algorithm-owned ambiguities into a stable reported convention. Read more
Source§

fn supports_joint_reconstruction(&self) -> bool

Reports whether the algorithm may run inside physical joint calibration. Read more
Source§

fn run<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm with default sequential scheduling and no callbacks.
Source§

fn run_with_callbacks<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, callbacks: Vec<Box<dyn Callback>>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm and invokes callbacks at their declared hooks.
Source§

fn run_from_checkpoint<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, checkpoint: ReconstructionCheckpoint, ) -> Result<ReconstructionResult>
where Self: Sized,

Resumes a run from a checkpoint after validating it against problem.

Auto Trait Implementations§

§

impl Freeze for Admm

§

impl RefUnwindSafe for Admm

§

impl Send for Admm

§

impl Sync for Admm

§

impl Unpin for Admm

§

impl UnsafeUnpin for Admm

§

impl UnwindSafe for Admm

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T> Key for T
where T: Clone,

§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
§

fn size(&self) -> usize

The size of the key in bytes.
§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,