Fri, 14 Aug 2026 10:38:27 -0500
Small optimisation
| src/sliding_pdps.rs | file | annotate | diff | comparison | revisions |
--- a/src/sliding_pdps.rs Thu Aug 06 14:33:17 2026 -0500 +++ b/src/sliding_pdps.rs Fri Aug 14 10:38:27 2026 -0500 @@ -255,13 +255,13 @@ // Solve finite-dimensional subproblem several times until the dual variable for the // regularisation term conforms to the assumptions made for the transport above. - let (mut τv̆, z_new, μ̆) = 'adapt_transport: loop { + let (mut τv̆, mut z̆, μ̆) = 'adapt_transport: loop { // Set initial guess for μ=μ^{k+1}. γ.μ̆_into(&mut μ); let μ̆ = μ.clone(); // Calculate τv̆ = τA_*(A[μ_transported + μ_transported_base]-b) - let Pair(v̆, mut z̆) = f.differential(Pair(&μ̆, &z)); + let Pair(v̆, z̆) = f.differential(Pair(&μ̆, &z)); let mut τv̆ = v̆ * τ; // opKμ.preadjoint().gemv(&mut τv̆, τ, y, 1.0); @@ -277,12 +277,6 @@ &mut stats, )?; - // Do z variable primal update here to able to estimate B_{v̆^k-v^{k+1}} - opKz_adj.apply_add(&mut z̆, &y); - z̆.axpy(1.0, &z, -σ_p); - let z_new = fnR.prox(σ_p, z̆); - //let z_new = fnR.prox(σ_p, z̆ * (-σ_p) + &z); - // A posteriori transport adaptation. if prox_penalty.aposteriori_transport( &mut γ, @@ -299,12 +293,17 @@ &config.insertion.refinement, &mut attempts, ) { - break 'adapt_transport (τv̆, z_new, μ̆); + break 'adapt_transport (τv̆, z̆, μ̆); } }; γ.get_transport_stats(&mut stats, &μ); + // Do z variable primal update + opKz_adj.apply_add(&mut z̆, &y); + z̆.axpy(1.0, &z, -σ_p); + let z_new = fnR.prox(σ_p, z̆); + //let z_new = fnR.prox(σ_p, z̆ * (-σ_p) + &z); // Do dual update // opKμ.gemv(&mut y, σ_d*(1.0 + ω), &μ, 1.0); // y = y + σ_d K[(1+ω)(μ,z)^{k+1}] z.axpy(1.0 + ω, &z_new, -ω);