Comments (4)
Since I contributed the root-finding Brent method to this library, I would like to comment on this. Yes, root-finding is different from minimization, but there is a tight relationship between those methods. My understanding was that the library focusse on optimization, not only minimization, and root finders can be applied to many optimization problems. Actually, this is what I use Brent's root finder for. A separation of root finding and minimization problems makes sense in the documentation. I would favor a separation within the library only if it occurs that the interface requirements a distinct enough to rectify a separation. However, that's finally up to the library's owner.
from argmin.
I agree with @xemwebe and I also think that root finding algorithms have a place in this library as long as the methods purpose is clear from the documentation. The most difficult question now is probably how the two methods should be named. Do you have any suggestions?
from argmin.
Do you have any suggestions?
Here is a very limited example of how they are named by others:
root-finding | minimization | |
---|---|---|
Algorithms for Minimization Without Derivatives, Brent | zero (ch. 4) |
localmin (ch. 5) |
scipy (Python) |
brentq , brenth |
brent |
boost (C++) |
not implemented | brent_find_minima |
GSL (C) |
gsl_root_fsolver_brent |
gsl_min_fminimizer_brent |
I think I would personally favor naming them both brent
but under different modules, for example root::brent
and min::brent
where root
(or zero
) and min
(or opt
) would host respectively all root-finding and minimization algorithms, a bit similarly to GSL
with their prefixes. I think that this could also prevent the accidental use of a root-finding function instead of a minimization function by users.
from argmin.
Thanks a lot for compiling this table! I'd personally prefer the scipy
approach, because I find it confusing when there are two methods with the same name, even if they are in different submodules.
I'm unsure whats the best approach to separate root finding from optimization. I think for now I would prefer to have them both in solvers::brent
, but I'm open to other suggestions.
from argmin.
Related Issues (20)
- Abort iterations upon a condition on the cost function HOT 3
- Timeout HOT 1
- Vec<Vec<Vec<> parameters: 3+D parameters HOT 2
- BFGS with nalgebra Vector2 HOT 8
- Example cannot be compiled HOT 11
- GaussNewton params and cost out of sync in state HOT 4
- Async Within Cost Function HOT 2
- Newton Method one dimensional HOT 4
- Type bounds for type Param and related types in traits
- Request to add Polars (dataframe) backend HOT 3
- Gradient Methods search over parameter space instead of gradient space HOT 3
- Implement brenth for root finding HOT 2
- LBFGS with constraints on x HOT 1
- Maintenance over the next couple of months HOT 1
- Steepest descent erases prev_param HOT 5
- Gauss Newton solver to have option for Gradient and Jacobian HOT 6
- How best to share computation between cost and gradient computations in a solver-agnostic way? HOT 2
- LBFGS example, trait bounds HOT 2
- Development on Windows HOT 2
- How to inject custom termination criteria to existing solvers? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from argmin.