/PMBSolve

An optimization solver for unconstrained differentiable problems

Primary LanguageJupyter Notebook

Preconditioned Model Building Solver (PMBSolve)

PMBSolve is an optimization solver for solving unconstrained problems of the form

min f(x),

where f is a differentiable real-valued function defined on n-dimensional Euclidean space. The details of the algorithm is given in the paper by Oztoprak and Birbil (2018). An application of PMBSolve for training neural networks is given as a case study for the bachelor seminar in Erasmus School of Economics, Erasmus University Rotterdam (Li et al., 2018). In this report, you can also find an experimental study with a mini-batch version of PMBSolve.

Below, we have implementations for various programming languages. We have used the L-BFGS approach for preconditioning the initial trial step. Our implementation of the preconditioning method (precond) borrows heavily from the wonderful minFunc package of Mark Schmidt.

PMBSolve for Octave/MATLAB

This implementation has been tested on Octave 4.2.1 and MATLAB 2105b. In addition to basic usage on several test functions, we also present a matrix factorization example on a movie recommendation data set. Here is the notebook.

PMBSolve for Julia

This implementation has been tested on Julia 0.4.6. We demonstrate pmbsolve method on several test functions. Here is the notebook.

PMBSolve for Python

An implementation in scipy.optimize and an implementation as a stand-alone method. We also present a simple machine learning example using logistic regression. Here is the notebook comparing pmbsolve against other scipy.optimize methods.

Note that the logistic regression example requires the MNIST data set. It could not be included in this repository because its size exceeds the GitHub limit. In order to replicate the results, please download the CSV files here.

PMBSolve for C++11

A shared-memory implementation of pmbsolve with a large-scale matrix factorization example on a movie recommendation data set. Here is a simple how-to document. This particular implementation is also explained in the paper by Kaya et al. (2017).