Skip to main content

AdaptiveAlternatingProjection

Struct AdaptiveAlternatingProjection 

Source
pub struct AdaptiveAlternatingProjection {
    pub iterations: usize,
    pub initial_object_step: f64,
    pub progress_threshold: f64,
    pub reduction_factor: f64,
    pub minimum_object_step: f64,
    pub batch_size: usize,
    pub epsilon: f64,
}
Expand description

Noise-robust alternating projection with a pass-adaptive object step.

§Method

The per-frame update is the same fixed-pupil amplitude projection used by super::AlternatingProjection. One relaxation factor is shared by every frame in a complete acquisition-schedule pass. The algorithm accumulates the mask-aware, frame-weighted amplitude-MSE objective already evaluated by those projections. After two completed passes establish consecutive objectives, it retains the step when relative progress is greater than progress_threshold; otherwise it multiplies the step by reduction_factor, without going below minimum_object_step.

This feedback rule does not retry or roll back an iteration. Its objective is the inexpensive incremental approximation described by Zuo et al., not an additional exact full-data evaluation. The current step, preceding objective, partial objective sums, and controller parameters are stored in ReconstructionState so a matching checkpoint resumes exactly. Batching cannot change the numerical path, while changing the acquisition schedule intentionally can.

§Assumptions and limitations

The algorithm recovers only the object and keeps the compiled pupil fixed. Its feedback objective is always amplitude MSE so a reporting option cannot silently change controller behavior. It cannot be nested in physical joint calibration because recompiling the forward model changes the meaning of its objective history. The convergence analysis in the cited work assumes convex component objectives; Fourier-ptychographic phase retrieval is non-convex, so the adaptive rule is a practical robustness strategy rather than a global-convergence guarantee.

§References

C. Zuo, J. Sun, and Q. Chen, “Adaptive step-size strategy for noise-robust Fourier ptychographic microscopy” (2016), Optics Express 24(18), 20724–20744.

Fields§

§iterations: usize

Number of complete passes through the acquisition schedule.

§initial_object_step: f64

Object relaxation used until the feedback rule first reduces it.

§progress_threshold: f64

Minimum relative objective decrease required to retain the current step.

§reduction_factor: f64

Multiplicative step reduction used when progress is insufficient.

§minimum_object_step: f64

Positive lower bound on the adaptive object step.

§batch_size: usize

Number of measured frames supplied to each reconstruction step.

§epsilon: f64

Positive numerical floor used in projection divisions and relative progress.

Implementations§

Source§

impl AdaptiveAlternatingProjection

Source

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

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

Source

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

Sets the finite positive initial object-projection relaxation.

Source

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

Sets the required relative progress; validation requires [0, 1).

Source

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

Sets the multiplicative reduction; validation requires (0, 1).

Source

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

Sets the finite positive step floor, no greater than the initial step.

Source

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

Sets the positive number of acquisition frames supplied per step.

Source

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

Sets the finite positive numerical floor used by projection and feedback.

Trait Implementations§

Source§

impl Clone for AdaptiveAlternatingProjection

Source§

fn clone(&self) -> AdaptiveAlternatingProjection

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 AdaptiveAlternatingProjection

Source§

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

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

impl Default for AdaptiveAlternatingProjection

Source§

fn default() -> Self

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

impl ReconstructionAlgorithm for AdaptiveAlternatingProjection

Source§

type IterationMetrics = AdaptiveAlternatingProjectionIterationMetrics

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 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 supports_joint_reconstruction(&self) -> bool

Reports whether the algorithm may run inside physical joint calibration. Read more
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 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 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§

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,