Skip to content

Commit dc8d2db

Browse files
authored
More JET (#1197)
1 parent 1301c6e commit dc8d2db

File tree

3 files changed

+35
-83
lines changed

3 files changed

+35
-83
lines changed

src/maximize.jl

Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,7 @@ function maximize(
7979
MaximizationWrapper(optimize(fmax, gmax, hmax, x0, method, options))
8080
end
8181

82-
minimum(r::MaximizationWrapper) = throw(MethodError())
83-
maximizer(r::Union{UnivariateOptimizationResults,MultivariateOptimizationResults}) =
84-
throw(MethodError())
8582
maximizer(r::MaximizationWrapper) = minimizer(res(r))
86-
maximum(r::Union{UnivariateOptimizationResults,MultivariateOptimizationResults}) =
87-
throw(MethodError())
8883
maximum(r::MaximizationWrapper) = -minimum(res(r))
8984
Base.summary(io::IO, r::MaximizationWrapper) = summary(io, res(r))
9085

@@ -102,6 +97,7 @@ for api_method in (
10297
:x_converged,
10398
:x_abschange,
10499
:g_tol,
100+
:g_abstol,
105101
:g_converged,
106102
:g_residual,
107103
:f_tol,
@@ -134,47 +130,5 @@ function Base.show(io::IO, r::MaximizationWrapper{<:UnivariateOptimizationResult
134130
return
135131
end
136132

137-
function Base.show(io::IO, r::MaximizationWrapper{<:MultivariateOptimizationResults})
138-
take = Iterators.take
139133

140-
println(io, "Results of Optimization Algorithm")
141-
print(io, " * Algorithm: ")
142-
summary(io, r.res)
143-
println(io)
144-
145-
if length(join(initial_state(r), ",")) < 40
146-
@printf io " * Starting Point: [%s]\n" join(initial_state(r), ",")
147-
else
148-
@printf io " * Starting Point: [%s, ...]\n" join(take(initial_state(r), 2), ",")
149-
end
150-
if length(join(maximizer(r), ",")) < 40
151-
@printf io " * Maximizer: [%s]\n" join(maximizer(r), ",")
152-
else
153-
@printf io " * Maximizer: [%s, ...]\n" join(take(maximizer(r), 2), ",")
154-
end
155-
@printf io " * Maximum: %e\n" maximum(r)
156-
@printf io " * Iterations: %d\n" iterations(r)
157-
@printf io " * Convergence: %s\n" converged(r)
158-
if isa(r.res.method, NelderMead)
159-
@printf io " * √(Σ(yᵢ-ȳ)²)/n < %.1e: %s\n" g_abstol(r) g_converged(r)
160-
else
161-
@printf io " * |x - x'| ≤ %.1e: %s \n" x_reltol(r) x_converged(r)
162-
@printf io " |x - x'| = %.2e \n" x_abschange(r)
163-
@printf io " * |f(x) - f(x')| ≤ %.1e |f(x)|: %s\n" f_reltol(r) f_converged(r)
164-
@printf io " |f(x) - f(x')| = %.2e |f(x)|\n" f_relchange(r)
165-
@printf io " * |g(x)| ≤ %.1e: %s \n" g_abstol(r) g_converged(r)
166-
@printf io " |g(x)| = %.2e \n" g_residual(r)
167-
@printf io " * Stopped by an decreasing objective: %s\n" (
168-
f_increased(r) && !iteration_limit_reached(r)
169-
)
170-
end
171-
@printf io " * Reached Maximum Number of Iterations: %s\n" iteration_limit_reached(r)
172-
@printf io " * Objective Calls: %d" f_calls(r)
173-
if !(isa(r.res.method, NelderMead) || isa(r.res.method, SimulatedAnnealing))
174-
@printf io "\n * Gradient Calls: %d" g_calls(r)
175-
end
176-
if isa(r.res.method, Newton) || isa(r.res.method, NewtonTrustRegion)
177-
@printf io "\n * Hessian Calls: %d" h_calls(r)
178-
end
179-
return
180-
end
134+
Base.show(io::IO, r::MaximizationWrapper{<:MultivariateOptimizationResults}) = show(io, r.res)

src/multivariate/solvers/constrained/ipnewton/interior.jl

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,18 @@ end
576576

577577
# TODO: do we need lagrangian_vec? Maybe for automatic differentiation?
578578
## Computation of Lagrangian and derivatives when passing all parameters as a single vector
579+
# FIXME: Seems unused
580+
581+
#=
582+
function unpack_vec!(x, b::BarrierStateVars, vec::Vector)
583+
k = unpack_vec!(x, vec, 0)
584+
for fn in fieldnames(b)
585+
k = unpack_vec!(getfield(b, fn), vec, k)
586+
end
587+
k == length(vec) ||
588+
throw(DimensionMismatch("vec should have length $k, got $(length(vec))"))
589+
x, b
590+
end
579591
function lagrangian_vec(
580592
p,
581593
d,
@@ -589,6 +601,7 @@ function lagrangian_vec(
589601
f_x, L_xsλ, ev = lagrangian(d, bounds, x, c, bstate, μ)
590602
L_xsλ
591603
end
604+
#FIXME: Seems unused
592605
function lagrangian_vec(
593606
p,
594607
d,
@@ -603,6 +616,7 @@ function lagrangian_vec(
603616
f_x, L_xsλ, ev = lagrangian(d, bounds, x, c(x), bstate, μ)
604617
L_xsλ
605618
end
619+
#FIXME: Seems unused
606620
function lagrangian_fgvec!(
607621
p,
608622
storage,
@@ -621,6 +635,7 @@ function lagrangian_fgvec!(
621635
pack_vec!(storage, gx, bgrad)
622636
L_xsλ
623637
end
638+
=#
624639

625640
## for line searches that don't use the gradient along the line
626641
function lagrangian_linefunc(αs, d, constraints, state)
@@ -1043,41 +1058,6 @@ isinterior(constraints::AbstractConstraints, x, c) = isinterior(constraints.boun
10431058
isinterior(constraints::Nothing, state::AbstractBarrierState) = true
10441059
isinterior(constraints::Nothing, x) = true
10451060

1046-
## Utilities for representing total state as single vector
1047-
# TODO: Most of these seem to be unused (IPNewton)?
1048-
function pack_vec(x, b::BarrierStateVars)
1049-
n = length(x)
1050-
for fn in fieldnames(b)
1051-
n += length(getfield(b, fn))
1052-
end
1053-
vec = Array{eltype(x)}(undef, n)
1054-
pack_vec!(vec, x, b)
1055-
end
1056-
1057-
function pack_vec!(vec, x, b::BarrierStateVars)
1058-
k = pack_vec!(vec, x, 0)
1059-
for fn in fieldnames(b)
1060-
k = pack_vec!(vec, getfield(b, fn), k)
1061-
end
1062-
k == length(vec) ||
1063-
throw(DimensionMismatch("vec should have length $k, got $(length(vec))"))
1064-
vec
1065-
end
1066-
function pack_vec!(vec, x, k::Int)
1067-
for i = 1:length(x)
1068-
vec[k+=1] = x[i]
1069-
end
1070-
k
1071-
end
1072-
function unpack_vec!(x, b::BarrierStateVars, vec::Vector)
1073-
k = unpack_vec!(x, vec, 0)
1074-
for fn in fieldnames(b)
1075-
k = unpack_vec!(getfield(b, fn), vec, k)
1076-
end
1077-
k == length(vec) ||
1078-
throw(DimensionMismatch("vec should have length $k, got $(length(vec))"))
1079-
x, b
1080-
end
10811061
function unpack_vec!(x, vec::Vector, k::Int)
10821062
for i = 1:length(x)
10831063
x[i] = vec[k+=1]

test/multivariate/solvers/constrained/ipnewton/constraints.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,24 @@
5151
end
5252

5353
@testset "IPNewton computations" begin
54+
55+
## Utilities for representing total state as single vector
56+
# TODO: Most of these seem to be unused (IPNewton)?
57+
function pack_vec(x, b::Optim.BarrierStateVars)
58+
n = length(x)
59+
for fn in propertynames(b)
60+
n += length(getfield(b, fn))
61+
end
62+
vec = Array{eltype(x)}(undef, n)
63+
pack_vec!(vec, x, b)
64+
end
65+
66+
function pack_vec!(vec, x, k::Int)
67+
for i = 1:length(x)
68+
vec[k+=1] = x[i]
69+
end
70+
k
71+
end
5472
# Compare hand-computed gradient against that from automatic differentiation
5573
function check_autodiff(d, bounds, x, cfun::Function, bstate, μ)
5674
c = cfun(x)

0 commit comments

Comments
 (0)