Skip to content

Commit 97c3629

Browse files
Revert "Fix objective sensitivity when parameters appear in the objective (#337)" (#339)
This reverts commit d6b17d9.
1 parent d6b17d9 commit 97c3629

File tree

2 files changed

+3
-40
lines changed

2 files changed

+3
-40
lines changed

src/NonLinearProgram/nlp_utilities.jl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -489,11 +489,9 @@ function _compute_sensitivity(model::Model; tol = 1e-6)
489489
# Dual bounds upper
490490
∂s[((num_w+num_cons+num_lower+1):end), :] *= -_sense_multiplier
491491

492-
grad = _compute_gradient(model)
492+
# dual wrt parameter
493493
primal_idx = [i.value for i in model.cache.primal_vars]
494-
params_idx = [i.value for i in model.cache.params]
495-
df_dx = grad[primal_idx]
496-
df_dp_direct = grad[params_idx]
497-
df_dp = df_dx'∂s[1:num_vars, :] + df_dp_direct'
494+
df_dx = _compute_gradient(model)[primal_idx]
495+
df_dp = df_dx'∂s[1:num_vars, :]
498496
return ∂s, df_dp
499497
end

test/nlp_program.jl

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -740,41 +740,6 @@ function test_ObjectiveSensitivity_model2()
740740
@test isapprox(dp, -1.5; atol = 1e-4)
741741
end
742742

743-
function test_ObjectiveSensitivity_direct_param_contrib()
744-
model = DiffOpt.nonlinear_diff_model(Ipopt.Optimizer)
745-
set_silent(model)
746-
747-
p_val = 3.0
748-
@variable(model, p MOI.Parameter(p_val))
749-
@variable(model, x 1)
750-
@objective(model, Min, p^2 * x^2)
751-
752-
optimize!(model)
753-
@assert is_solved_and_feasible(model)
754-
755-
Δp = 0.1
756-
DiffOpt.set_forward_parameter(model, p, Δp)
757-
DiffOpt.forward_differentiate!(model)
758-
759-
df_dp = MOI.get(model, DiffOpt.ForwardObjectiveSensitivity())
760-
@test isapprox(df_dp, 2 * p_val * Δp, atol = 1e-8) # ≈ 0.6 for p=3
761-
762-
ε = 1e-6
763-
df_dp_fd =
764-
(
765-
begin
766-
set_parameter_value(p, p_val + ε)
767-
optimize!(model)
768-
Δp * objective_value(model)
769-
end - begin
770-
set_parameter_value(p, p_val - ε)
771-
optimize!(model)
772-
Δp * objective_value(model)
773-
end
774-
) / (2ε)
775-
776-
@test isapprox(df_dp, df_dp_fd, atol = 1e-4)
777-
end
778743
function test_ObjectiveSensitivity_subset_parameters()
779744
# Model with 10 parameters, differentiate only w.r.t. 3rd and 7th
780745
model = Model(() -> DiffOpt.diff_optimizer(Ipopt.Optimizer))

0 commit comments

Comments
 (0)