DiffOpt.jl icon indicating copy to clipboard operation
DiffOpt.jl copied to clipboard

Objective Sensitivity

Open andrewrosemberg opened this issue 11 months ago • 1 comments

Pull Request Summary

Title: Objective Sensitivity

Description: This pull request implements functionality for obtaining the objective sensitivity with respect to parameters and the equivalent for reverse mode in the DiffOpt.jl package.

  • Additions: 335 lines
  • Deletions: 35 lines
  • Changed Files: 7
  • Commits: 11
  • Comments: 1
  • Review Comments: 4
  • State: Open
  • Mergeable: Yes (unstable)

Usage Example

# Always a good practice to clear previously set sensitivities
DiffOpt.empty_input_sensitivities!(model)

MOI.set(model, DiffOpt.ForwardConstraintSet(), ParameterRef(p), Parameter(3.0))
MOI.set(model, DiffOpt.ForwardConstraintSet(), ParameterRef(p_c), Parameter(3.0))
DiffOpt.forward_differentiate!(model)

MOI.get(model, DiffOpt.ForwardObjectiveSensitivity())

In the backward mode, we can calculate the parameter perturbation with respect to the objective perturbation:

# Always a good practice to clear previously set sensitivities
DiffOpt.empty_input_sensitivities!(model)

MOI.set(
    model,
    DiffOpt.ReverseObjectiveSensitivity(),
    0.1,
)

DiffOpt.reverse_differentiate!(model)

MOI.get(model, DiffOpt.ReverseConstraintSet(), ParameterRef(p))

andrewrosemberg avatar Feb 22 '25 17:02 andrewrosemberg

Codecov Report

:x: Patch coverage is 88.88889% with 8 lines in your changes missing coverage. Please review. :white_check_mark: Project coverage is 89.18%. Comparing base (93f058d) to head (a15f6f6). :warning: Report is 3 commits behind head on master.

Files with missing lines Patch % Lines
src/NonLinearProgram/NonLinearProgram.jl 83.33% 6 Missing :warning:
src/diff_opt.jl 85.71% 1 Missing :warning:
src/moi_wrapper.jl 88.88% 1 Missing :warning:
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #282      +/-   ##
==========================================
+ Coverage   89.08%   89.18%   +0.10%     
==========================================
  Files          15       15              
  Lines        1969     2006      +37     
==========================================
+ Hits         1754     1789      +35     
- Misses        215      217       +2     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

:rocket: New features to boost your workflow:
  • :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

codecov[bot] avatar Feb 22 '25 21:02 codecov[bot]

closing in favor of https://github.com/jump-dev/DiffOpt.jl/pull/303

andrewrosemberg avatar Aug 20 '25 01:08 andrewrosemberg