Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add apply_step! option for Newton method #284

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

sjdaines
Copy link

@sjdaines sjdaines commented Aug 4, 2023

If using method = :newton with linesearch=LineSearches.Static(), adds an option to supply a function to modify Newton steps eg to restrict step length or to restrict to a region. This makes it possible to include problem-specific constraints (eg from a physical or chemical system) to increase robustness.

Adds an additional argument apply_step! (default value (x, x_old, newton_step)->(x .= x_old .+ newton_step)) to
define the function used to update the x value after the Newton iteration.

For example, apply_step! = (x, x_old, newton_step)->(x .= x_old .+ newton_step; x .= max.(x, 1e-80))
will enforce a constraint x[i] >= 1e-80 to maintain positive concentrations for a chemical kinetics problem.

sjdaines and others added 2 commits August 3, 2023 14:28
If using `method=:newton` with `linesearch=LineSearches.Static()` (the default linesearch), an additional argument
`project_region!` (default value `(x)->(nothing)`) can be used to define a function to modify the proposed new
`x` value after each Newton iteration.

For example, `project_region! = (x) -> (x .= max.(x, 1e-80))` will enforce a constraint `x[i] >= 1e-80`.
If `method = :newton` and `linesearch=LineSearches.Static()` (the default),
an additional argument `apply_step!` (default value `(x, x_old, newton_step)->(x .= x_old .+ newton_step)`)
can be used to define a function to modify the proposed new `x` value after the Newton iteration.
eg
    `apply_step! = (x, x_old, newton_step)->(x .= x_old .+ newton_step; x .= max.(x, 1e-80))`
will enforce a constraint `x[i] >= 1e-80`.
@sjdaines sjdaines changed the title Add a naive project_region! option for Newton method Add apply_step! option for Newton method Oct 12, 2023
@nichollsh
Copy link

+1 for this - it would be fantastic!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants