Skip to content

Commit 8d2ac12

Browse files
aldmadpo
authored andcommitted
add optional dual_safeguard with default projection
1 parent 4552955 commit 8d2ac12

File tree

1 file changed

+6
-17
lines changed

1 file changed

+6
-17
lines changed

src/AL_alg.jl

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ function AL(
111111
init_subtol::Real = T(0.1),
112112
factor_primal_linear_improvement::Real = T(3 // 4),
113113
factor_decrease_subtol::Real = T(1 // 4),
114-
) where {H, T <: Real}
114+
dual_safeguard = project_y!,
115115
if !(nlp.meta.minimize)
116116
error("AL only works for minimization problems")
117117
end
@@ -131,10 +131,6 @@ function AL(
131131
@assert factor_penalty_up > 1
132132
@assert 0 < factor_primal_linear_improvement < 1
133133
@assert 0 < factor_decrease_subtol < 1
134-
ymin = -1e20
135-
ymax = 1e20
136-
@assert ymin <= 0
137-
@assert ymax >= 0
138134
verbose = options.verbose
139135
max_time = options.maxTime
140136
max_iter = options.maxIter
@@ -174,7 +170,7 @@ function AL(
174170
iter += 1
175171

176172
# dual safeguard
177-
project_y!(alf, ymin, ymax)
173+
dual_safeguard(alf)
178174

179175
# AL subproblem
180176
suboptions.ϵa = max(subtol, options.ϵa)
@@ -252,20 +248,13 @@ function AL(
252248
end
253249

254250
"""
255-
project_y!(nlp, ymin, ymax)
251+
project_y!(nlp)
256252
257-
Given an `AugLagModel`, project `nlp.y` into [ymin, ymax]and updates `nlp.μc_y` accordingly.
253+
Given an `AugLagModel`, project `nlp.y` into [ymin, ymax] and updates `nlp.μc_y` accordingly.
258254
"""
259-
function project_y!(
260-
nlp::AugLagModel,
261-
ymin::AbstractVector{T},
262-
ymax::AbstractVector{T},
263-
) where {T <: Real}
264-
nlp.y .= max.(ymin, min.(nlp.y, ymax))
265-
nlp.μc_y .= nlp.μ .* nlp.cx .- nlp.y
266-
end
255+
project_y!(nlp::AugLagModel) = project_y!(nlp::AugLagModel, -1e20, 1e20)
267256

268-
function project_y!(nlp::AugLagModel, ymin::T, ymax::T) where {T <: Real}
257+
function project_y!(nlp::AugLagModel, ymin::V, ymax::V) where {V}
269258
nlp.y .= max.(ymin, min.(nlp.y, ymax))
270259
nlp.μc_y .= nlp.μ .* nlp.cx .- nlp.y
271260
end

0 commit comments

Comments
 (0)