# Optimization function similarly to Matlab’s fmincon

**URL:** <https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023>\
**Category:** Help\
**Created:** [July 18, 2022, 10:27pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023 "2022-07-18T22:27:10Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![fortran4r](https://avatars.discourse-cdn.com/v4/letter/f/9de0a6/32.png) [@fortran4r](https://fortran-lang.discourse.group/u/fortran4r)\
**Post date:** [July 18, 2022, 10:27pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/1 "2022-07-18T22:27:10Z")

</div>

I am looking for a convenient Fortran function that works similarly to Matlab’s fmincon.

---

<div class="post-metadata">

**Author:** ![FedericoPerini](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/federicoperini/32/1750_2.png) [@FedericoPerini](https://fortran-lang.discourse.group/u/FedericoPerini)\
**Post date:** [July 19, 2022, 4:50pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/2 "2022-07-19T16:50:12Z")

</div>

If you look at the Octave equivalent to `fmincon`: [here](https://octave.sourceforge.io/optim/function/fmincon.html).

So, how about using [minpack](https://github.com/fortran-lang/minpack)?

---

<div class="post-metadata">

**Author:** ![ivanpribec](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/ivanpribec/32/3290_2.png) [@ivanpribec](https://fortran-lang.discourse.group/u/ivanpribec)\
**Post date:** [July 19, 2022, 9:25pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/3 "2022-07-19T21:25:59Z")

</div>

MINPACK doesn’t offer constrained minimization. It is also aimed primarily at solving least squares problems and solving nonlinear equations.

For constrained minimization take a loop at [NLopt](https://nlopt.readthedocs.io/en/latest/) and it’s Fortran interface [nlopt-f](https://github.com/grimme-lab/nlopt-f). Depending on the form of your constraints, and availability of an analytic Jacobian, I’d also recommend taking a look at [Powell’s Derivative Free Optimizers](https://www.pdfo.net/index.html), including `bobyqa`, `lincoa`, and `cobyla`. More optimization codes can be found in the NIST Guide to Available Mathematical Software (GAMS), [Class G2: Constrained optimization](https://gams.nist.gov/cgi-bin/serve.cgi/Class/G2)

In case your Fortran routines will be used in conjuction with R, you could also take a look at R’s internal optimization routines, see [Writing R Extensions - Optimization](https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Optimization).

---

<div class="post-metadata">

**Author:** ![urbanjost](https://avatars.discourse-cdn.com/v4/letter/u/0ea827/32.png) [@urbanjost](https://fortran-lang.discourse.group/u/urbanjost)\
**Post date:** [July 20, 2022, 12:53am UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/4 "2022-07-20T00:53:00Z")

</div>

[SOL SNOPT User Guide](https://web.stanford.edu/group/SOL/snopt.htm) is primarily in Fortran. fmincon covers a lot of territory so not sure SNOPT applies. I thought it was freely available from Stanford University but a quick look on the web page says “Proprietary”; so no idea; but might be available for Academic use.

---

<div class="post-metadata">

**Author:** ![jacobwilliams](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/jacobwilliams/32/10_2.png) [@jacobwilliams](https://fortran-lang.discourse.group/u/jacobwilliams)\
**Post date:** [July 24, 2022, 1:01pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/5 "2022-07-24T13:01:21Z")

</div>

Take a look at this post: [Optimization, root finding, and nonlinear equation solving](https://fortran-lang.discourse.group/t/optimization-root-finding-and-nonlinear-equation-solving/2340)

For constrained optimization, you would need something like [SLSQP](https://github.com/jacobwilliams/slsqp) (free), [SNOPT](https://ccom.ucsd.edu/~optimizers/solvers/snopt/) (not free) or [VF13AD](https://www.hsl.rl.ac.uk/archive/) (freely available for download). [IPOPT](https://coin-or.github.io/Ipopt/) (free, non-trivial to compile though) is C++ but has a Fortran interface that works.

---

<div class="post-metadata">

**Author:** ![ivanpribec](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/ivanpribec/32/3290_2.png) [@ivanpribec](https://fortran-lang.discourse.group/u/ivanpribec)\
**Post date:** [July 29, 2022, 10:10pm UTC](https://fortran-lang.discourse.group/t/optimization-function-similarly-to-matlab-s-fmincon/4023/6 "2022-07-29T22:10:32Z")

</div>

Is SNOPT worth the 6240$ license fee for commercial use? How does it compare with other solvers? The trial licenses are limited to 3-months. A perpetual MATLAB license for commercial use costs 2100$ and a home license for personal use costs 119$. I have no doubt that successful optimization of an industrial problem can save a few thousand $ or more. But the price seems kind of high in comparison to other software packages.

@fortran4r, did you end up using any suggested packages? Is there any particular kind of bound constraint you need, e.g. box, linear, non-linear, equality?
