403 ) -> usize |
403 ) -> usize |
404 where F : Float + ToNalgebraRealField, |
404 where F : Float + ToNalgebraRealField, |
405 I : AlgIteratorFactory<F> |
405 I : AlgIteratorFactory<F> |
406 { |
406 { |
407 match inner.method { |
407 match inner.method { |
408 InnerMethod::PDPS | InnerMethod::Default => { |
408 InnerMethod::PDPS => { |
409 let inner_θ = 0.001; |
409 let inner_θ = 0.001; |
410 // Estimate of ‖K‖ for K=θ\Id. |
410 // Estimate of ‖K‖ for K=θ\Id. |
411 let normest = inner_θ; |
411 let normest = inner_θ; |
412 let (inner_τ, inner_σ) = (inner.pdps_τσ0.0 / normest, inner.pdps_τσ0.1 / normest); |
412 let (inner_τ, inner_σ) = (inner.pdps_τσ0.0 / normest, inner.pdps_τσ0.1 / normest); |
413 l1squared_nonneg_pdps_alt(y, g, λ, β, x, inner_τ, inner_σ, inner_θ, iterator) |
413 l1squared_nonneg_pdps_alt(y, g, λ, β, x, inner_τ, inner_σ, inner_θ, iterator) |
414 }, |
414 }, |
415 InnerMethod::FB /*| InnerMethod::Default*/ => { |
415 InnerMethod::FB => { |
416 // The Lipschitz factor of ∇[x ↦ g^⊤ x + λ∑x]=g - λ𝟙 is FB is just a proximal point |
416 // The Lipschitz factor of ∇[x ↦ g^⊤ x + λ∑x]=g - λ𝟙 is FB is just a proximal point |
417 // method with on constraints on τ. We “accelerate” it by adding to τ the constant θ |
417 // method with on constraints on τ. We “accelerate” it by adding to τ the constant θ |
418 // on each iteration. Exponential growth does not seem stable. |
418 // on each iteration. Exponential growth does not seem stable. |
419 let inner_τ = inner.fb_τ0; |
419 let inner_τ = inner.fb_τ0; |
420 let inner_θ = inner_τ; |
420 let inner_θ = inner_τ; |
421 l1squared_nonneg_pp(y, g, λ, β, x, inner_τ, inner_θ, iterator) |
421 l1squared_nonneg_pp(y, g, λ, β, x, inner_τ, inner_θ, iterator) |
422 }, |
422 }, |
423 _ => unimplemented!("{:?}", inner.method), |
423 other => unimplemented!("${other:?} is unimplemented"), |
424 } |
424 } |
425 } |
425 } |