pub struct ExtraSolver {
pub w: Vec<Vec<f64>>,
pub w_tilde: Vec<Vec<f64>>,
}Expand description
EXTRA solver for exact decentralized consensus.
EXTRA uses gradient tracking and converges to the exact minimizer of Σ_i f_i(x) with a fixed step size.
Requires:
- W: doubly stochastic mixing matrix (n_agents × n_agents)
grad_fns[i]: gradient of f_i at any point x
Fields§
§w: Vec<Vec<f64>>Doubly stochastic mixing matrix W (n_agents × n_agents).
w_tilde: Vec<Vec<f64>>W̃ = (I + W) / 2.
Implementations§
Source§impl ExtraSolver
impl ExtraSolver
Sourcepub fn new(w: Vec<Vec<f64>>) -> OptimizeResult<Self>
pub fn new(w: Vec<Vec<f64>>) -> OptimizeResult<Self>
Create a new EXTRA solver from a doubly stochastic mixing matrix W.
Sourcepub fn solve<F>(
&self,
grad_fns: &[F],
n_vars: usize,
config: &ExtraConfig,
) -> OptimizeResult<AdmmResult>
pub fn solve<F>( &self, grad_fns: &[F], n_vars: usize, config: &ExtraConfig, ) -> OptimizeResult<AdmmResult>
Solve the decentralized problem using EXTRA.
grad_fns[i](x) returns the gradient of f_i at x.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ExtraSolver
impl RefUnwindSafe for ExtraSolver
impl Send for ExtraSolver
impl Sync for ExtraSolver
impl Unpin for ExtraSolver
impl UnsafeUnpin for ExtraSolver
impl UnwindSafe for ExtraSolver
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
Mutably borrows from an owned value. Read more
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.