|
3 | 3 | > SIAM Journal on Optimization, 25(1):502–520, 2015.
|
4 | 4 | """
|
5 | 5 | function ProjectedReflectedGradientVI(stp::AbstractStopping; rho0::Float64 = 0.5)
|
6 |
| - xk = stp.current_state.x |
7 |
| - xkp = similar(xk) |
8 |
| - yk = copy(xk) |
9 |
| - rho = rho0 |
10 |
| - Fx = similar(xk) |
11 |
| - |
12 |
| - OK = update_and_start!(stp) |
13 |
| - while !OK |
14 |
| - abcresidual!(stp.pb, xk, rho, yk, Fx) |
15 |
| - project!(stp.pb, Fx, xk) # possible failure here |
16 |
| - yk .= 2 .* xkp .- xk |
17 |
| - |
18 |
| - if norm(xk - xkp, Inf) < stp.meta.atol * rho |
19 |
| - stp.meta.optimal = true |
20 |
| - end |
21 |
| - OK = update_and_stop!(stp, x = xk) |
| 6 | + xk = stp.current_state.x |
| 7 | + xkp = similar(xk) |
| 8 | + yk = copy(xk) |
| 9 | + rho = rho0 |
| 10 | + Fx = similar(xk) |
| 11 | + |
| 12 | + OK = update_and_start!(stp) |
| 13 | + while !OK |
| 14 | + abcresidual!(stp.pb, xk, rho, yk, Fx) |
| 15 | + project!(stp.pb, Fx, xk) # possible failure here |
| 16 | + yk .= 2 .* xkp .- xk |
| 17 | + |
| 18 | + if norm(xk - xkp, Inf) < stp.meta.atol * rho |
| 19 | + stp.meta.optimal = true |
22 | 20 | end
|
23 |
| - |
24 |
| - return xk |
| 21 | + OK = update_and_stop!(stp, x = xk) |
25 | 22 | end
|
26 |
| - |
| 23 | + |
| 24 | + return xk |
| 25 | +end |
| 26 | + |
27 | 27 | export ProjectedReflectedGradientVI
|
28 | 28 |
|
29 |
| -function ProjectedReflectedGradientVI(model::AbstractVIModel, x0::AbstractVector; rho0::Float64 = 0.5, kwargs...) |
| 29 | +function ProjectedReflectedGradientVI( |
| 30 | + model::AbstractVIModel, |
| 31 | + x0::AbstractVector; |
| 32 | + rho0::Float64 = 0.5, |
| 33 | + kwargs..., |
| 34 | +) |
30 | 35 | stp = GenericStopping(model, x0; kwargs...)
|
31 | 36 | return ProjectedReflectedGradientVI(stp, rho0 = rho0)
|
32 | 37 | end
|
|
0 commit comments