{"_id":"fmin","_rev":"208218","name":"fmin","description":"Unconstrained funcion minimization in Javascript","dist-tags":{"latest":"0.0.2"},"maintainers":[{"name":"benfrederickson","email":"ben@benfrederickson.com"}],"time":{"modified":"2023-03-24T08:19:54.000Z","created":"2016-11-25T00:01:01.174Z","0.0.2":"2016-11-25T00:09:11.161Z","0.0.1":"2016-11-25T00:01:01.174Z"},"users":{},"author":{"name":"Ben Frederickson"},"repository":{"type":"git","url":"git+https://github.com/benfred/fmin.git"},"versions":{"0.0.2":{"name":"fmin","version":"0.0.2","description":"Unconstrained funcion minimization in Javascript","keywords":["fmin","optimization","Nelder-Mead","Conjudate Gradient"],"license":"BSD-3-Clause","main":"build/fmin.js","jsnext:main":"index","homepage":"https://github.com/benfred/fmin","repository":{"type":"git","url":"git+https://github.com/benfred/fmin.git"},"jshintConfig":{"esnext":true},"scripts":{"pretest":"rm -rf build && mkdir build && json2module package.json > build/package.js && rollup -f umd -n fmin -o build/fmin.js -- index.js && rollup -f umd -n fmin_vis -o build/fmin_vis.js -- index_vis.js","test":"jshint src/*.js src/visualizations/*.js && tape 'test/**/*-test.js'","prepublish":"npm run test && uglifyjs build/fmin.js -c -m -o build/fmin.min.js","postpublish":"zip -j build/fmin.zip -- LICENSE README.md build/fmin.js build/fmin.min.js"},"devDependencies":{"contour_plot":"0.0.1","json2module":"0.0","rollup":"0.25","tape":"4","uglify-js":"2","jshint":"^2.8.0"},"bugs":{"url":"https://github.com/benfred/fmin/issues"},"directories":{"example":"examples","test":"test"},"dependencies":{"contour_plot":"^0.0.1","json2module":"^0.0.3","rollup":"^0.25.8","tape":"^4.5.1","uglify-js":"^2.6.2"},"author":{"name":"Ben Frederickson"},"gitHead":"91355c01529a162d66549cfc1c6e2d72822843d5","_id":"fmin@0.0.2","_shasum":"59bbb40d43ffdc1c94cd00a568c41f95f1973017","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"benfrederickson","email":"ben@benfrederickson.com"},"dist":{"shasum":"59bbb40d43ffdc1c94cd00a568c41f95f1973017","size":41319,"noattachment":false,"key":"/fmin/-/fmin-0.0.2.tgz","tarball":"http://name.csiicloud.com:7001/fmin/download/fmin-0.0.2.tgz"},"maintainers":[{"name":"benfrederickson","email":"ben@benfrederickson.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/fmin-0.0.2.tgz_1480032550594_0.22957121138460934"},"publish_time":1480032551161,"_hasShrinkwrap":false,"_cnpm_publish_time":1480032551161,"_cnpmcore_publish_time":"2021-12-15T17:33:16.512Z"},"0.0.1":{"name":"fmin","version":"0.0.1","description":"Unconstrained funcion minimization in Javascript","keywords":["fmin","optimization","Nelder-Mead","Conjudate Gradient"],"license":"BSD-3-Clause","main":"build/fmin.js","jsnext:main":"index","homepage":"https://github.com/benfred/fmin","repository":{"type":"git","url":"git+https://github.com/benfred/fmin.git"},"jshintConfig":{"esnext":true},"scripts":{"pretest":"rm -rf build && mkdir build && json2module package.json > build/package.js && rollup -f umd -n fmin -o build/fmin.js -- index.js && rollup -f umd -n fmin_vis -o build/fmin_vis.js -- index_vis.js","test":"jshint src/*.js src/visualizations/*.js && tape 'test/**/*-test.js'","prepublish":"npm run test && uglifyjs build/fmin.js -c -m -o build/fmin.min.js","postpublish":"zip -j build/fmin.zip -- LICENSE README.md build/fmin.js build/fmin.min.js"},"devDependencies":{"contour_plot":"0.0.1","json2module":"0.0","rollup":"0.25","tape":"4","uglify-js":"2","jshint":"^2.8.0"},"bugs":{"url":"https://github.com/benfred/fmin/issues"},"directories":{"example":"examples","test":"test"},"dependencies":{"contour_plot":"^0.0.1","json2module":"^0.0.3","rollup":"^0.25.8","tape":"^4.5.1","uglify-js":"^2.6.2"},"author":{"name":"Ben Frederickson"},"gitHead":"76d42c31432fa8eb39157806a614ae78897cbd1b","_id":"fmin@0.0.1","_shasum":"239400b127767e7dc94af7929363253804b64c0c","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"benfrederickson","email":"ben@benfrederickson.com"},"dist":{"shasum":"239400b127767e7dc94af7929363253804b64c0c","size":41287,"noattachment":false,"key":"/fmin/-/fmin-0.0.1.tgz","tarball":"http://name.csiicloud.com:7001/fmin/download/fmin-0.0.1.tgz"},"maintainers":[{"name":"benfrederickson","email":"ben@benfrederickson.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/fmin-0.0.1.tgz_1480032059083_0.2878313451074064"},"publish_time":1480032061174,"_hasShrinkwrap":false,"_cnpm_publish_time":1480032061174,"_cnpmcore_publish_time":"2021-12-15T17:33:16.788Z"}},"readme":"# fmin [![Build Status](https://travis-ci.org/benfred/fmin.svg?branch=master)](https://travis-ci.org/benfred/fmin)\n\nUnconstrained function minimization in javascript.\n\nThis package implements some basic numerical optimization algorithms: Nelder-Mead, Gradient\nDescent, Wolf Line Search and Non-Linear Conjugate Gradient methods are all provided.\n\nInteractive visualizations with D3 explaining how these algorithms work are also included in this package.\nDescriptions of the algorithms as well as most of the visualizations are available on my blog post\n[An Interactive Tutorial on Numerical\nOptimization](http://www.benfrederickson.com/numerical-optimization/).\n\n## Installing\n\nIf you use NPM, `npm install fmin`. Otherwise, download the [latest release](https://github.com/benfred/fmin/releases/latest).\n\n## API Reference\n\n<a href=\"#nelderMead\" name=\"nelderMead\">#</a> <b>nelderMead</b>(<i>f</i>, <i>initial</i>)\n\nUses the [Nelder-Mead method](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method) to\nminimize a function <i>f</i> starting at location <i>initial</i>.\n\nExample usage  minimizing the function <i>f(x, y) = x<sup>2</sup> + y<sup>2</sup> + x sin y + y\nsin x</i> is:\n![nelder mead demo](./images/nelder_mead.gif)\n\n```js\nfunction loss(X) {\n    var x = X[0], y = X[1];\n    return Math.sin(y) * x  + Math.sin(x) * y  +  x * x +  y *y;\n}\n\nvar solution = fmin.nelderMead(loss, [-3.5, 3.5]);\nconsole.log(\"solution is at \" + solution.x);\n```\n\n<!--\n<a href=\"#gradientDescent\" name=\"gradientDescent\">#</a> <b>gradientDescent</b>()\n\n[![gradient descent demo](./images/gradient_descent.gif)](./examples/gradient_descent.html)\n-->\n\n<a href=\"#conjugateGradient\" name=\"conjugateGradient\">#</a> <b>conjugateGradient</b>(<i>f</i>, <i>initial</i>)\n\nMinimizes a function using the [Polak–Ribière non-linear conjugate gradient method\n](https://en.wikipedia.org/wiki/Nonlinear_conjugate_gradient_method). The function <i>f</i> should\ncompute both the loss and the gradient.\n\nAn example minimizing [Rosenbrock's Banana\nfunction](https://en.wikipedia.org/wiki/Rosenbrock_function) is:\n\n![conjugate gradient demo](./images/conjugate_gradient.gif)\n\n```js\nfunction banana(X, fxprime) {\n    fxprime = fxprime || [0, 0];\n    var x = X[0], y = X[1];\n    fxprime[0] = 400 * x * x * x - 400 * y * x + 2 * x - 2;\n    fxprime[1] = 200 * y - 200 * x * x;\n    return (1 - x) * (1 - x) + 100 * (y - x * x) * (y - x * x);\n}\n\nvar solution = fmin.conjugateGradient(banana, [-1, 1]);\nconsole.log(\"solution is at \" + solution.x);\n```\n","_attachments":{},"homepage":"https://github.com/benfred/fmin","bugs":{"url":"https://github.com/benfred/fmin/issues"},"license":"BSD-3-Clause"}