<CRANTaskView>

<name>Optimization</name>
<topic>Optimization and Mathematical Programming</topic>
<maintainer email="R-optimization@mailbox.org">Stefan Theussl and 
    Hans W. Borchers</maintainer>
<version>2016-06-06</version>

<info>
  <p>This CRAN task view contains a list of packages which offer
  facilities for solving optimization problems.
  Although every regression model in statistics solves an optimization
  problem they are not part of this view. If you are looking for regression
  methods, the following views will contain useful starting points:
  <view>Multivariate</view>, <view>SocialSciences</view>, <view>Robust</view> 
  among others. The focus of this task view is on <a
  href="#SolverInfrastructure">Optimization Infrastructure Packages</a>, <a
  href="#GeneralPurposeSolvers">General Purpose Continuous
  Solvers</a>, <a href="#MathematicalProgrammingSolvers">Mathematical
  Programming Solvers</a> and <a href="#SpecificApplications">Specific
  Applications in Optimization</a>. Packages are categorized in these
  four sections.</p>

  <p>Many packages provide functionality for more than one
  of the subjects listed at the end of this task view. E.g., mixed
  integer linear programming solvers typically offer standard linear 
  programming routines like the simplex algorithm. Therefore following each 
  package description a list of abbreviations describes the typical features
  of the optimizer (i.e., the problems which can be solved). The
  full names of the abbreviations given in square brackets can be
  found at the end of this task view under 
  <a href="#ClassificationBySubject">Classification According to
  Subject</a>.</p>

  <p>If you think that some package is missing from the list, please
  let us know.</p>

  <h2><a name="SolverInfrastructure">Optimization Infrastructure Packages</a>
  </h2>
<!--
  <h3>Solvers provided by the base R distribution</h3>
-->
  <ul>
    <li>Trying to unify optimization algorithms via a single wrapper
    function, <pkg>optimx</pkg> helps to proper specify the
    (nonlinear) optimization problem including objective function,
    gradient function, and scaling. This package supports the
    (local) optimization of smooth, nonlinear functions with at most
    box constraints (bounds). <pkg>optimx</pkg> depends not only on
    packages and/or functions mentioned in this section of this task
    view but also on two packages implemented by the author(s),
    namely <pkg>Rcgmin</pkg> and <pkg>Rvmmin</pkg>. Both are "pure
    R" implementations of conjugate gradient minimization and
    variable metric nonlinear function minimization algorithms,
    respectively.</li>

    <li>The R Optimization Infrastructure (<pkg>ROI</pkg>) package
    provides a framework for handling optimization problems in R. It
    uses an object oriented approach to define and solve various
    optimization tasks in R which can be from different problem
    classes (e.g., linear, quadratic, non-linear programming
    problems). This makes optimization transparent for the R user as
    the corresponding workflow is completely abstracted from the
    underlying solver. Furthermore, this approach allows for easy
    switching between solvers, given that corresponding solver plugins
    are available, and thus enhances comparability.</li> </ul>

  <h2><a name="GeneralPurposeSolvers">General Purpose Continuous
  Solvers</a></h2>
<!--
  <h3>Solvers provided by the base R distribution</h3>
-->
  <ul>
    <li>Package stats offers several general purpose optimization routines.
    First, function <code>optim()</code> provides an implementation of
    the Broyden-Fletcher-Goldfarb-Shanno (BFGS) method,
    bounded BFGS, conjugate gradient, Nelder-Mead, and simulated
    annealing (SANN) optimization
    methods. It utilizes gradients, if provided, for faster
    convergence. Typically it is used for unconstrained optimization
    but includes an option for box-constrained
    optimization.

    Additionally, for minimizing a function subject to
    linear inequality constraints stats contains the routine
    <code>constrOptim()</code>.

    For one-dimensional unconstrained function optimization there is
    <code>optimize()</code> which searches an interval
    for a minimum or maximum.

    Then there is <code>nlm</code> which is used for solving nonlinear
    unconstrained minimization problems. Eventually,
    <code>nlminb()</code> offers unconstrained and constrained
    optimization using PORT routines. [RGA, QN]
    </li>
<!--
  </ul>
  <h3>Packages extending the basic solver spectrum</h3>
  <ul>
-->
    <li>
    Package <pkg>nloptr</pkg> provides access to NLopt, an LGPL licensed 
    library of various nonlinear optimization algorithms. It includes local 
    derivative-free (COBYLA, Nelder-Mead, Subplex) and gradient-based 
    (e.g., BFGS) methods, and also the augmented Lagrangian approach for 
    nonlinear constraints. [DF, GO, QN]</li>

    <li>Implementations of the augmented Lagrange barrier minimization 
	algorithm for optimizing smooth nonlinear objective functions (with 
	equality and inequality constraints) can be found in packages 
	<pkg>alabama</pkg> and <pkg>Rsolnp</pkg>.</li>

    <li><pkg>NlcOptim</pkg> solves nonlinear optimization problems with linear 
    and nonlinear equality and inequality constraints, implementing a Sequential
    Quadratic Programming (SQP) method.</li>

    <li><pkg>clue</pkg> contains the function <code>sumt()</code> for
    solving constrained optimization problems via the sequential
    unconstrained minimization technique (SUMT).</li>

    <li>Package <pkg>dfoptim</pkg>, derivative-free optimization
    procedures, contains quite efficient R implementations of the
    Nelder-Mead and Hooke-Jeeves algorithms (unconstrained and
    bounds-constrained). [DF]</li>

    <li><pkg>GrassmannOptim</pkg> is a package for Grassmann manifold
    optimization. The implementation uses gradient-based algorithms
    and embeds a stochastic gradient method for global search.</li>

    <li>Package <pkg>gsl</pkg> provides BFGS, conjugate gradient,
    steepest descent, and Nelder-Mead algorithms. It uses a "line
    search" approach via the function <code>multimin()</code>. It is
    based on the GNU Scientific Library (GSL). [RGA, QN]
    </li>

    <li><pkg>lbfgsb3</pkg> interfaces the J.Nocedal et al. L-BFGS-B 3.0
    Fortran code, a limited memory BFGS solver, allowing bound constraints
    and being applicable to higher-dimensional problems. [QN]</li>

    <li><pkg>lbfgs</pkg> wraps the libBFGS library by N.Okazaki, interfacing 
    both the L-BFGS and the OWL-QN algorithm, the latter being particularly 
    suited for higher-dimensional problems. [QN]</li>

    <li>Package <pkg>maxLik</pkg> provides a general purpose
    Newton-Raphson optimizer <code>maxNR()</code> as well as wrapper
    to methods, implemented in <code>optim()</code>. It supports fitting a
    submodel by specifying constant parameters.</li>

    <li>An R port of the Scilab neldermead module is packaged in
    <pkg>neldermead</pkg> offering several direct search algorithms based
    on the simplex approach.</li>

    <li>Several derivative-free optimization algorithms are provided with 
    package <pkg>minqa</pkg>; e.g., the functions <code>bobyqa()</code>,
    <code>newuoa()</code>, and <code>uobyqa()</code> allow to minimize a 
    function of many variables by a trust region method that forms quadratic
    models by interpolation. <code>bobyqa()</code> additionally permits box 
    constraints (bounds) on the parameters. [DF]</li>

    <li>Package <pkg>powell</pkg> optimizes functions using Powell's
    UObyQA algorithm (Unconstrained Optimization by Quadratic
    Approximation).</li>

    <li><pkg>RCEIM</pkg> implements a stochastic heuristic method for 
    performing multidimensional function optimization.</li>

    <li><pkg>subplex</pkg> provides unconstrained function
    optimization based on a subspace searching simplex method.</li>

    <li> Package <pkg>ucminf</pkg> implements an algorithm of quasi-Newtonian 
    type for nonlinear unconstrained optimization. [QN]</li>

    <li>In package <pkg>trust</pkg>, a routine with the same name offers
    local optimization based on the "trust region" approach.</li>

    <li><pkg>trustOptim</pkg> implements a "trust region" algorithm for
    unconstrained nonlinear optimization. The algorithm is optimized for
    objective functions with sparse Hessians. This makes the algorithm highly
    scalable and efficient, in terms of both time and memory footprint.</li>

    <li>Package <pkg>nleqslv</pkg> provides a function <code>nleqslv()</code>
    implementing Newton and Broyden methods with line search and trust region 
    global strategies for solving medium sized system of nonlinear equations.
    </li>

    <li>Package <pkg>rgenoud</pkg> offers <code>genoud()</code>, a routine 
    which is capable of solving complex function minimization/maximization 
    problems by combining evolutionary algorithms with a derivative-based 
    (quasi-Newtonian) approach.</li>
  </ul>

  <h3>Least-Squares Problems</h3>

  <ul>
    <li>Function <code>solve.qr()</code> (resp. <code>qr.solve()</code>) 
    handles over- and under-determined systems of linear equations, returning 
    least-squares solutions if possible. And package stats provides 
    <code>nls()</code> to determine least-squares estimates of the parameters 
    of a nonlinear model. <pkg>nls2</pkg> enhances function <code>nls()</code> 
    with brute force or grid-based searches, to avoid being dependent on 
    starting parameters or getting stuck in local solutions.</li>

    <li>Package <pkg>nlmrt</pkg> provides tools for minimizing nonlinear sums 
    of squares. The function to be minimized can be provided as an R function 
    or as an expression, similar to the way that nls() works.
    <code>nlmrt::nlxb()</code> tries to compute analytic derivatives for the 
    Jacobian used in a Levenberg-Marquardt. This allows for the solution of 
    problems with poorly conditioned Jacobians and small residuals</li>

    <li>Package <pkg>minpack.lm</pkg> provides a function <code>nls.lm()</code>
    for solving nonlinear least-squares problems by a modification of the
    Levenberg-Marquardt algorithm, with support for lower and upper parameter 
    bounds, as found in MINPACK.</li>

    <li>Package <pkg>nnls</pkg> interfaces the Lawson-Hanson implementation of 
    an algorithm for non-negative least-squares, allowing the combination of 
    non-negative and non-positive constraints.</li>

    <li>Package <pkg>bvls</pkg> interfaces the Stark-Parker implementation of 
    an algorithm for least-squares with upper and lower bounded variables.</li>

    <li>Package <pkg>onls</pkg> implements orthogonal nonlinear least-squares 
    regression (ONLS, a.k.a. Orthogonal Distance Regression, ODR) using a 
    Levenberg-Marquardt-type minimization algorithm based on the ODRPACK 
	Fortran library.</li>
  </ul>

  <h3>Semidefinite and Convex Solvers</h3>

  <ul>
    <li>Package <pkg>ECOSolveR</pkg> provides an interface to the Embedded 
	COnic Solver (ECOS), a well-known, efficient, and robust C library for 
	convex problems. Conic and equality constraints can be specified in 
	addition to integer and boolean variable constraints for mixed-integer 
	problems.</li>
	
	<li>Package <pkg>scs</pkg> applies operator splitting to solve linear 
	programs, cone programs (SOCP), and semidefinite programs; cones can be 
	second-order, exponential, power cones, or any combination of these.</li>

    <li><pkg>cccp</pkg> contains routines for solving cone constrained
    convex problems by means of interior-point methods (partially ported
    from Python's CVXOPT).</li>

    <li>The <pkg>CLSOCP</pkg> package provides an implementation of a one-step
    smoothing Newton method for the solution of second order cone programming
    (SOCP) problems.</li>

    <li>CSDP is a library of routines that implements a primal-dual barrier 
    method for solving semidefinite programming problems; it is interfaced in 
    the <pkg>Rcsdp</pkg> package. [SDP]</li>

    <li>The DSDP library implements an interior-point method for semidefinite
    programming with primal and dual solutions; it is interfaced in package
    <pkg>Rdsdp</pkg>. [SDP]</li>

    <li>Package <pkg>Rmosek</pkg> provides an interface to the (commercial) 
    MOSEK optimization library for large-scale LP, QP, and MIP problems, with 
    emphasis on (nonlinear) conic, semidefinite, and convex tasks; academic 
    licenses are available. (An article on Rmosek appeared in the JSS special 
    issue on Optimization with R, see below.) [SDP, CP]</li>
  </ul>

  <h3>Global and Stochastic Optimization</h3>

  <ul>
    <li>Package <pkg>DEoptim</pkg> provides a global optimizer based on the 
    Differential Evolution algorithm. <pkg>RcppDE</pkg> provides a C++ 
    implementation (using Rcpp) of the same <code>DEoptim()</code> function.
    </li>

    <li><pkg>DEoptimR</pkg> provides an implementation of the jDE variant of 
    the differential evolution stochastic algorithm for nonlinear programming 
    problems (It allows to handle constraints in a flexible manner.)</li>

    <li><pkg>GenSA</pkg> is a package providing a function for generalized 
    Simulated Annealing which can be used to search for the global minimum of 
    a quite complex non-linear objective function with a large number of 
    optima.</li>

    <li><pkg>GA</pkg> provides functions for optimization using Genetic 
    Algorithms in both, the continuous and discrete case. This package allows 
    to run corresponding optimization tasks in parallel.</li>

    <li>Package <pkg>genalg</pkg> contains <code>rbga()</code>, an
    implementation of a genetic algorithm for multi-dimensional function 
    optimization.</li>

    <li>Machine coded genetic algorithm (MCGA) provided by package
    <pkg>mcga</pkg> is a tool which solves optimization problems based
    on byte representation of variables.</li>

    <li>A particle swarm optimizer (PSO) is implemented in package 
    <pkg>pso</pkg>, and also in <pkg>psoptim</pkg>. Another (parallelized) 
	implementation of the PSO algorithm can be found in package 
	<code>ppso</code> available from
	<a href="https://www.rforge.net/ppso/">rforge.net/ppso</a>.</li>

    <li>Package <pkg>hydroPSO</pkg> implements the latest Standard Particle 
    Swarm Optimization algorithm (SPSO-2011); it is parallel-capable, and 
    includes several fine-tuning options and post-processing functions.</li>

    <li>CMA-ES by N. Hansen, a global optimization procedure using a covariance 
	matrix adapting evolutionary strategy, is implemented in several packages:
	In packages <pkg>cmaes</pkg> and <pkg>cmaesr</pkg>, in <pkg>parma</pkg> as 
    <code>cmaes</code>, in <pkg>adagio</pkg> as <code>pureCMAES</code>, and in 
	<pkg>rCMA</pkg> as <code>cmaOptimDP</code>, interfacing Hansen's own Java 
	implementation.</li>

    <li>Package <pkg>Rmalschains</pkg> implements an algorithm family for
    continuous optimization called memetic algorithms with local search chains
    (MA-LS-Chains).</li>

    <li>An R implementation of the Self-Organising Migrating Algorithm
    (SOMA) is available in package <pkg>soma</pkg>. This stochastic 
    optimization method is somewhat similar to genetic algorithms.</li>

    <li><pkg>nloptr</pkg> supports several global optimization routines,
    such as DIRECT, controlled random search (CRS), multi-level 
    single-linkage (MLSL), improved stochastic ranking (ISR-ES), or 
    stochastic global optimization (StoGO).</li>

    <li>The <pkg>NMOF</pkg> package provides implementations of differential 
    evolution, particle swarm optimization, local search and threshold 
    accepting (a variant of simulated annealing).  The latter two methods also 
    work for discrete optimization problems, as does the implementation of a 
    genetic algorithm that is included in the package.</li>
  </ul>


  <h2><a name="MathematicalProgrammingSolvers">Mathematical Programming 
  Solvers</a></h2>

  This section provides an overview of open source as well as commercial
  optimizers. Which type of mathematical programming problem can be solved
  by a certain package or function can be seen from the abbreviations in square
  brackets.
  For a <a href="#ClassificationBySubject">classification by subject</a>
  see the list at the end of this task view.

  <ul>
    <li>Package <pkg>linprog</pkg> solves linear programming problems using
    the function <code>solveLP()</code> (the solver is based on
    <pkg>lpSolve</pkg>) and can read model files in MPS
    format. [LP]</li>

    <li>In package <pkg>quadprog</pkg> <code>solve.QP()</code> solves
    quadratic programming problems with linear equality and inequality 
	constraints. [QP]</li>

    <li><pkg>BB</pkg> contains the function <code>spg()</code> providing a
    spectral projected gradient method for large scale optimization with
    simple constraints. It takes a nonlinear objective function as an
    argument as well as basic constraints. Furthermore, <pkg>BB</pkg>
    contains two functions (<code>dfsane()</code>
    and <code>sane()</code>) for using the spectral gradient method
    for solving a nonlinear system of equations.
    </li>

    <li>In the <pkg>boot</pkg> package there is a routine called
    <code>simplex()</code> which realizes the two-phase tableau simplex
    method for (relatively small) linear programming problems. [LP]</li>

    <li><pkg>kernlab</pkg> contains the function <code>ipop</code> for
    solving quadratic programming problems using interior point
    methods. [IPM, QP]
    </li>

    <li><pkg>limSolve</pkg> offers to solve linear or quadratic
    optimization functions. [LP, QP]
    </li>

    <li><pkg>LowRankQP</pkg> primal/dual interior point method solving
    quadratic programming problems [IPM, QP]</li>

    <li>Package <pkg>rcdd</pkg> offers the function <code>lpcdd()</code>
    for solving linear programs with exact arithmetic using the
    <a href="https://gmplib.org">GNU Multiple Precision (GMP)
    </a> library. [LP]</li>

    <li>In package Rdonlp2 (see the <rforge>rmetrics</rforge> project)
    function<code>donlp2()</code> , a wrapper for the DONLP2
    solver, offers the minimization of smooth nonlinear functions and
    constraints. DONLP2 can be used freely for any kind of research
    purposes, otherwise it requires licensing. [GO, NLP]
    </li>

    <li> The <a href="https://www.neos-server.org/neos/">NEOS Server
    for Optimization</a> provides online access to state-of-the-art
    optimization problem solvers. Package <pkg>rneos</pkg> enables the
    user to pass optimization problems to NEOS and retrieve results
    within R.
    </li>
<!--
    <li> An interface to Ipopt from the <a
    href="http://www.coin-or.org/">COIN-OR</a> initiative called
    <rforge>ipoptr</rforge> is available from R-Forge. Ipopt is an open
    source solver for large-scale nonlinear continuous optimization. [NLP]
    </li>
-->
  </ul>

  <h3>Interfaces to Open Source Optimizers</h3>

  <ul>
    <li>Package <pkg>clpAPI</pkg> provides high level access from R to
    low-level API routines of the <a
    href="https://projects.coin-or.org/Clp">COIN OR Clp</a> solver
    library. [LP]</li>

    <li>Package <pkg>lpSolve</pkg> contains the routine
    <code>lp()</code> to solve LPs and MILPs by calling the freely
    available solver <a
    href="http://lpsolve.sourceforge.net">lp_solve</a>. This solver is
    based on the revised simplex method and a branch-and-bound (B&amp;B)
    approach. It supports semi-continuous variables and Special Ordered
    Sets (SOS). Furthermore <code>lp.assign()</code> and
    <code>lp.transport()</code> are aimed at solving assignment problems
    and transportation problems, respectively. Additionally, there is the
    package <pkg>lpSolveAPI</pkg> which provides an R interface to the
    low level API routines of lp_solve (see also project
    <rforge>lpsolve</rforge> on R-Forge).
    <pkg>lpSolveAPI</pkg> supports reading linear programs from files in lp
    and MPS format. [BP, IP, LP, MILP, SPLP]</li>


    <li>Packages <pkg>glpkAPI</pkg> as well as
    package <pkg>Rglpk</pkg> provide an interface to the <a
    href="https://www.gnu.org/software/glpk/">GNU Linear Programming
    Kit</a> (GLPK). Whereas the former provides high level access
    to low level routines the latter offers a high level routine
    <code>Rglpk_solve_LP()</code> to solve MILPs using GLPK.  Both
    packages offer the possibility to use models formulated in the MPS
    format. [BP, IP, IPM, LP, MILP]</li>
    <!--
	GNU LP or MathProg, can be loaded.
	<code>Rglpk_solve_LP()</code> solves linear and mixed-integer programs
	applying the GNU Linear Programming Kit (GLPK).  of target
	functions and constraints is done through matrices.
    -->

    <li><pkg>Rsymphony</pkg> has the routine <code>Rsymphony_solve_LP()</code> 
	that interfaces the SYMPHONY solver for mixed-integer linear programs.
	(SYMPHONY is part of the <a href="http://www.coin-or.org/">Computational 
	Infrastructure for Operations Research</a> (COIN-OR) project.) 
    Package <code>lsymphony</code> in Bioconductor provides a similar interface 
	to SYMPHONY that is easier to install. [LP, IP, MILP]</li>

    <li>The NOMAD solver is implemented in the <pkg>crs</pkg> package
    for solving mixed integer programming problems. This algorithm is
    accessible via the <code>snomadr()</code> function and is
    primarily designed for constrained optimization of blackbox
    functions.</li>

<!-- <li>Packages Rbonmin and Rlago provide interfaces to the corresponding 
     mixed integer nonlinear optimizers part of the 
     <a href="http://www.coin-or.org/">COIN-OR</a> project. They are currently 
     being developed on R-Forge in project <rforge>rino</rforge>. [NLP] </li>
-->

  </ul>

  <h3>Interfaces to Commercial Optimizers</h3>

  This section surveys interfaces to commercial solvers. Typically, the
  corresponding libraries have to be installed separately.

  <ul>
    <li>Packages <pkg>cplexAPI</pkg> and <pkg>Rcplex</pkg> provide an
    interface to the CPLEX solver package from <a href="https://www-01.ibm.com/software/commerce/optimization/cplex-optimizer/">
	IBM</a>. CPLEX
    provides dual/primal simplex optimizers as well as a barrier
    optimizer for solving large scale linear and quadratic
    programs. Furthermore, it offers a mixed integer optimizer to
    solve difficult mixed integer programs including (possibly
    non-convex) MIQCP. Note that CPLEX is <b>not free</b> and you have
    to get a license from <a
    href="https://www.ibm.com/">IBM</a>. Academics will receive a free
    licence upon request. [LP, IP, BP, QP, MILP, MIQP, IPM]</li>

    <li>The API of the commercial solver LINDO can be accessed in R
    via package <pkg>rLindo</pkg>. The <a
    href="http://www.lindo.com/rlindo">LINDO API</a> allows for
    solving linear, integer, quadratic, conic, general nonlinear,
    global, and stochastic programming problems. [LP, IP, BP, QP,
    MILP, MIQP, SP]</li>
    
    <li>Package <pkg>Rmosek</pkg> offers an interface to the
    commercial optimizer from <a
    href="https://www.mosek.com/">MOSEK</a>. It provides dual/primal
    simplex optimizers as well as a barrier optimizer. In addition to
    solving LP and QP problems this solver can handle SOCP and
    quadratically constrained programming (QPQC) tasks. Furthermore,
    it offers a mixed integer optimizer to solve difficult mixed
    integer programs (MILP, MISOCP, etc.). Note that you have to get a
    license from <a href="https://www.mosek.com/">MOSEK</a>. Academic
    licenses are free of charge.  [LP, IP, BP, QP, MILP, MIQP,
    IPM]</li>

    <li>Gurobi Optimization ships an R binding since their 5.0 release
    that allows to solve LP, MIP, QP, MIQP, SOCP, and MISOCP models
    from within R. See the <a
    href="https://www.gurobi.com/products/modeling-languages/r">R with
    Gurobi</a> website for more details. [LP, QP, MILP, MIQP]</li>

    <li>The <pkg>localsolver</pkg> package provides an interface to the hybrid
    mathematical programming software LocalSolver from Innovation 24.
    LocalSolver is a commercial product, academic licenses are available on
    request. [LP, MIP, QP, NLP, HEUR]</li>
  </ul>

  <!--
      Matching: Multivariate and Propensity Score Matching with Balance 
      Optimization
      Provides functions for multivariate and propensity score matching and
      for finding optimal balance based on a genetic search algorithm. A 
      variety of univariate and multivariate metrics to determine if balance 
      has been obtained are also provided.
  -->

  <h2><a name="SpecificApplications">Specific Applications in
  Optimization</a></h2>

  <ul>
    <li>Package <pkg>adagio</pkg> provides functions for single and
    multiple knapsack problems and solves subset sum and assignment
    tasks.</li>

    <li>In package <pkg>clue</pkg> <code>solve_LSAP()</code> enables
    the user to solve the linear sum assignment problem (LSAP) using an
    efficient C implementation of the Hungarian algorithm. [SPLP]</li>

    <li>Package <pkg>qap</pkg> solves Quadratic Assignment Problems (QAP) 
    applying a simulated annealing heuristics (other approaches will 
    follow).</li>

    <li>The <pkg>CEoptim</pkg> package provides an optimization solver,
    based on the Cross-Entropy method, for continuous and combinatorial
    optimization problems. It can be used to solve multi-extremal problems,
    accepts linear constraints,and handles discrete and continuous variables.
    [COP]</li>

    <li> The data cloning algorithm is a global optimization approach
    and a variant of simulated annealing which has been implemented
    in package <pkg>dclone</pkg>. The package provides low level
    functions for implementing maximum likelihood estimating
    procedures for complex models using data cloning and Bayesian
    Markov chain Monte Carlo methods.</li>

    <li> Objective functions for benchmarking the performance of
    global optimization algorithms can be found in <pkg>globalOptTests</pkg>.
    Package <pkg>smoof</pkg> has generators for a number of both single- 
	and multi-objective test functions that are frequently used for the 
	benchmarking optimization algorithms.</li>

    <li><pkg>cec2013</pkg> and <pkg>cec2005benchmark</pkg> contain many test
    functions for global optimization from the 2005 and 2013 special sessions
    on real-parameter optimization at the IEEE CEC congresses on evolutionary
    computation.</li>

    <li>Package <pkg>goalprog</pkg> provides some functions for
    lexicographic linear goal
    programming and optimization. Goal programming is a branch of
    multi-objective, multi-criteria decision analysis. [MOP]</li>

    <li><pkg>igraph</pkg>, a package for graph and network analysis,
    uses the very fast igraph C library. It can be used to calculate
    shortest paths, maximal network flows, minimum
    spanning trees, etc. [GRAPH]</li>

    <li><pkg>irace</pkg> contains an optimization algorithm for optimizing the
    parameters of other optimization algorithms. This problem is called 
    "(offline) algorithm configuration". [GO]</li>

    <li><pkg>matchingR</pkg> and <pkg>matchingMarkets</pkg> implement the 
    Gale-Shapley algorithm for the stable marriage and the college admissions 
    problem, the stable roommates and the house allocation problem.
    [COP, MM]</li>

    <li>Package <pkg>kofnGA</pkg> uses a genetic algorithm to choose a 
    subset of a fixed size k from the integers 1:n, such that a user-
    supplied objective function is minimized at that subset.</li>

    <li><pkg>copulaedas</pkg> provides a platform where 'estimation of 
    distribution algorithms' (EDA) based on copulas can be implemented and 
    studied; the package offers various EDAs, and newly developed EDAs can be 
    integrated by extending an S4 class.</li>

    <li><pkg>tabuSearch</pkg> implements a tabu search algorithm for optimizing 
    binary strings, maximizing a user defined target function, and returns the 
    best (i.e. maximizing) binary configuration found.</li>

    <li>Besides functionality for solving general isotone regression problems,
    package <pkg>isotone</pkg> provides a framework of active set methods for
    isotone optimization problems with arbitrary order restrictions.</li>

    <li><pkg>maxLik</pkg> adds a likelihood-specific layer on top of a number of
    maximization routines like Brendt-Hall-Hall-Hausman (BHHH) and 
    Newton-Raphson among others. It includes summary and print methods which 
    extract the standard errors based on the Hessian matrix and allows easy 
    swapping of maximization algorithms. It also provides a function to check 
    whether an analytic derivative is computed directly.</li>

    <li>Multi-criteria optimization problems can be solved using
    package <pkg>mco</pkg> which implements genetic
    algorithms. [MOP]</li>

    <li>Package <pkg>optmatch</pkg> provides routines for solving
    matching problems by translating them into minimum-cost flow problems,
    which are in turn solved optimally by the RELAX-IV codes of
    Bertsekas and Tseng (free for research). [SPLP]</li>

    <li>Package <pkg>quantreg</pkg> contains variations of simplex and
    of interior point routines (<code>nlrq()</code>,
    <code>crq()</code>). It provides an interface to L1 regression
    in the R code of function <code>rq()</code>. [SPLP, LP, IPM]</li>

    <li>The <pkg>desirability</pkg> package contains S3 classes for
    multivariate optimization using the desirability function approach
    of Harrington (1965) using functional forms described by
    Derringer and Suich (1980).</li>

    <li>Package <pkg>sna</pkg> contains the function <code>lab.optim()</code>
    which is the front-end to a series of heuristic routines for optimizing
    some bivariate graph statistic. [GRAPH]</li>

    <li>Package <pkg>TSP</pkg> provides basic infrastructure for
    handling and solving the
    traveling salesperson problem (TSP). The main routine
    <code>solve_TSP()</code> solves the TSP
    through several heuristics. In addition, it provides an interface
    to the
    <a href="http://www.tsp.gatech.edu/concorde/index.html">Concorde TSP
    Solver</a>, which has to be
    downloaded separately.  [SPLP]
    </li>
  </ul>

<!--
Not listed yet:
<li><pkg>Bhat</pkg> provides the Davidon-Fletcher-Powell optimization
algorithm in function <code>dfp()</code>. Furthermore the
Newton-Raphson algorithm is implemented in function <code>newton()</code>.
</li>
<li><pkg>RFreak</pkg>R interface to a modified version of the Free
Evolutionary Algorithm Kit <a
href="http://sourceforge.net/projects/freak427/">FrEAK</a>.</li>
<li><pkg>RankAggreg</pkg> performs aggregation of ordered lists based
on the ranks using three different algorithms (cross-entropy Monte
Carlo algorithm, genetic algorithm, and a brute force algorithm)</li>
<li>Package <rforge>rootSolve</rforge> includes
routines to find the root of nonlinear functions and to perform
steady-state and equilibrium analysis of ordinary differential equations.</li>
-->

  <h2><a name="ClassificationBySubject">Classification According to
  Subject</a></h2>

  <p>What follows is an attempt to provide a by-subject overview of
  packages.  The full name of the subject as well as the corresponding
  <a
  href="http://www.ams.org/mathscinet/msc/msc2010.html?t=90Cxx&amp;btn=Current">
  MSC 2010</a> code (if available) are given in brackets.
  </p>
    <ul>
      <li>LP (Linear programming, 90C05): <pkg>boot</pkg>,
      <pkg>clpAPI</pkg>, <pkg>cplexAPI</pkg>, <pkg>glpkAPI</pkg>,
      <pkg>limSolve</pkg>, <pkg>linprog</pkg>, <pkg>lpSolve</pkg>,
      <pkg>lpSolveAPI</pkg>, <pkg>quantreg</pkg>, <pkg>rcdd</pkg>,
      <pkg>Rcplex</pkg>, <pkg>Rglpk</pkg>, <pkg>rLindo</pkg>,
	  <pkg>Rmosek</pkg>, <pkg>Rsymphony</pkg>
      </li>
<!--
      <li>LSP (Large-scale problems, 90C06): makes no sense to me here
-->
      <li> GO (Global Optimization): <pkg>DEoptim</pkg>, <pkg>DEoptimR</pkg>,
      <pkg>GenSA</pkg>, <pkg>GA</pkg>, <pkg>pso</pkg>, <pkg>hydroPSO</pkg>,
      <pkg>cmaes</pkg>, <pkg>nloptr</pkg>, <pkg>NMOF</pkg></li>

      <li>SPLP (Special problems of linear programming like transportation,
      multi-index, etc., 90C08): <pkg>clue</pkg>, <pkg>lpSolve</pkg>,
      <pkg>lpSolveAPI</pkg>, <pkg>quantreg</pkg>, 
      <pkg>TSP</pkg></li>

      <li>BP (Boolean programming, 90C09): <pkg>cplexAPI</pkg>, 
      <pkg>glpkAPI</pkg>, <pkg>lpSolve</pkg>, <pkg>lpSolveAPI</pkg>, 
      <pkg>Rcplex</pkg>, <pkg>Rglpk</pkg></li>

      <li>IP (Integer programming, 90C10): <pkg>cplexAPI</pkg>, 
      <pkg>glpkAPI</pkg>, <pkg>lpSolve</pkg>, <pkg>lpSolveAPI</pkg>, 
      <pkg>Rcplex</pkg>, <pkg>Rglpk</pkg>, <pkg>rLindo</pkg>
      <pkg>Rmosek</pkg>, <pkg>Rsymphony</pkg></li>

      <li>MIP (Mixed integer programming and its variants MILP for LP
      and MIQP for QP, 90C11):  <pkg>cplexAPI</pkg>, <pkg>glpkAPI</pkg>, 
      <pkg>lpSolve</pkg>, <pkg>lpSolveAPI</pkg>, <pkg>Rcplex</pkg>, 
      <pkg>Rglpk</pkg>, <pkg>rLindo</pkg>, <pkg>Rmosek</pkg>, 
	  <pkg>Rsymphony</pkg></li>

      <li>SP (Stochastic programming, 90C15): <pkg>rLindo</pkg>
      </li>

      <li>QP (Quadratic programming, 90C20): <pkg>cplexAPI</pkg>, 
      <pkg>kernlab</pkg>, <pkg>limSolve</pkg>, <pkg>LowRankQP</pkg>, 
      <pkg>quadprog</pkg>, <pkg>Rcplex</pkg>, <pkg>Rmosek</pkg></li>

      <li>SDP (Semidefinite programming, 90C22): <pkg>Rcsdp</pkg>, 
      <pkg>Rdsdp</pkg></li>

      <li>CP (Convex programming, 90C25): <pkg>cccp</pkg>, 
      <pkg>CLSOCP</pkg></li>
<!--
	  <li>Nonconvex programming, 90C26</li>
-->
	  <li>COP (Combinatorial optimization, 90C27): <pkg>adagio</pkg>,
	  <pkg>CEoptim</pkg>, <pkg>TSP</pkg>, <pkg>matchingR</pkg></li>

      <li>MOP (Multi-objective and goal programming, 90C29):
      <pkg>goalprog</pkg>, <pkg>mco</pkg> </li>

      <li>NLP (Nonlinear programming, 90C30): <pkg>nloptr</pkg>,
      <pkg>alabama</pkg>, <pkg>Rsolnp</pkg>, Rdonlp2, <pkg>rLindo</pkg></li>
<!--
	  <li>Sensitivity, stability, parametric optimization, 90C31</li>
	  <li>Fractional programming, 90C32</li>
	  <li>Complementarity problems, 90C33</li>
	  <li>Semi-infinite programming, 90C34</li>
-->
      <li>GRAPH (Programming involving graphs or networks, 90C35):
      <pkg>igraph</pkg>, <pkg>sna</pkg> </li>
<!--
	  <li>Dynamic programming, 90C39</li>
	  <li>Markov and semi-Markov decision processes, 90C40</li>
	  <li>Optimality conditions, duality, 90C46</li>
	  <li>Minimax problems, 90C47</li>
	  <li>Programming in abstract spaces, 90C48</li>
	  <li>Extreme-point and pivoting methods, 90C49</li>
-->
      <li>IPM (Interior-point methods, 90C51): <pkg>cplexAPI</pkg>, 
      <pkg>kernlab</pkg>, <pkg>glpkAPI</pkg>, <pkg>LowRankQP</pkg>, 
      <pkg>quantreg</pkg>, <pkg>Rcplex</pkg>
      </li>

      <li>RGA (Methods of reduced gradient type, 90C52): stats
      (<code>optim()</code>), <pkg>gsl</pkg></li>

      <li>QN (Methods of quasi-Newton type, 90C53): stats
      (<code>optim()</code>), <pkg>gsl</pkg>, <pkg>lbfgs</pkg>,
      <pkg>lbfgsb3</pkg>, <pkg>nloptr</pkg>, <pkg>ucminf</pkg></li>

      <li>DF (Derivative-free methods, 90C56): <pkg>dfoptim</pkg>,
      <pkg>minqa</pkg>, <pkg>nloptr</pkg></li>
<!--
	   <li>Methods of successive quadratic programming type, 90C55</li>
	   <li>Polyhedral combinatorics, branch-and-bound,
	   branch-and-cut, 90C57</li>
-->
      <li>HEUR (Approximation methods and heuristics, 90C59): 
      <pkg>irace</pkg></li>
<!--
	   <li>Abstract computational complexity for mathematical
	   programming problems, 90C60</li>
	   <li>LFuzzy programming, 90C70</li>
	   <li>Applications of mathematical programming, 90C90</li>
	   <li>None of the above, but in this section, 90C99</li>
-->
    </ul>
</info>

<packagelist>
  <pkg>adagio</pkg>
  <pkg priority="core">alabama</pkg>
  <pkg>BB</pkg>
  <pkg>boot</pkg>
  <pkg>bvls</pkg>
  <pkg>cccp</pkg>
  <pkg>cec2005benchmark</pkg>
  <pkg>cec2013</pkg>
  <pkg>CEoptim</pkg>
  <pkg>clpAPI</pkg>
  <pkg>CLSOCP</pkg>
  <pkg>clue</pkg>
  <pkg>cmaes</pkg>
  <pkg>cmaesr</pkg>
  <pkg>copulaedas</pkg>
  <pkg>cplexAPI</pkg>
  <pkg>crs</pkg>
  <pkg>dclone</pkg>
  <pkg>dfoptim</pkg>
  <pkg>DEoptim</pkg>
  <pkg>DEoptimR</pkg>
  <pkg>desirability</pkg>
  <pkg>ECOSolveR</pkg>
  <pkg>GA</pkg>
  <pkg>genalg</pkg>
  <pkg>GenSA</pkg>
  <pkg>globalOptTests</pkg>
  <pkg>glpkAPI</pkg>
  <pkg>goalprog</pkg>
  <pkg>GrassmannOptim</pkg>
  <pkg>gsl</pkg>
  <pkg>hydroPSO</pkg>
  <pkg>igraph</pkg>
  <pkg>irace</pkg>
  <pkg>isotone</pkg>
  <pkg>kernlab</pkg>
  <pkg>kofnGA</pkg>
  <pkg>lbfgs</pkg>
  <pkg>lbfgsb3</pkg>
  <pkg>limSolve</pkg>
  <pkg>linprog</pkg>
  <pkg>localsolver</pkg>
  <pkg>LowRankQP</pkg>
  <pkg priority="core">lpSolve</pkg>
  <pkg>lpSolveAPI</pkg>
  <pkg>matchingMarkets</pkg>
  <pkg>matchingR</pkg>
  <pkg>maxLik</pkg>
  <pkg>mcga</pkg>
  <pkg>mco</pkg>
  <pkg>minpack.lm</pkg>
  <pkg>nlmrt</pkg>
  <pkg>optmatch</pkg>
  <pkg priority="core">minqa</pkg>
  <pkg>neldermead</pkg>
  <pkg>NlcOptim</pkg>
  <pkg>nleqslv</pkg>
  <pkg>nloptr</pkg>
  <pkg>nls2</pkg>
  <pkg>NMOF</pkg>
  <pkg>nnls</pkg>
  <pkg>onls</pkg>
  <pkg priority="core">optimx</pkg>
  <pkg>parma</pkg>
  <pkg>powell</pkg>
  <pkg>pso</pkg>
  <pkg>psoptim</pkg>
  <pkg>qap</pkg>
  <pkg priority="core">quadprog</pkg>
  <pkg>quantreg</pkg>
  <pkg>rcdd</pkg>
  <pkg>RCEIM</pkg>
  <pkg>Rcgmin</pkg>
  <pkg>rCMA</pkg>
  <pkg>Rcplex</pkg>
  <pkg>RcppDE</pkg>
  <pkg>Rcsdp</pkg>
  <pkg>Rdsdp</pkg>
  <pkg>rgenoud</pkg>
  <pkg priority="core">Rglpk</pkg>
  <pkg>rLindo</pkg>
  <pkg>Rmalschains</pkg>
  <pkg>Rmosek</pkg>
  <pkg>rneos</pkg>
  <pkg>ROI</pkg>
  <pkg>Rsolnp</pkg>
  <pkg priority="core">Rsymphony</pkg>
  <pkg>Rvmmin</pkg>
  <pkg>scs</pkg>
  <pkg>smoof</pkg>
  <pkg>sna</pkg>
  <pkg>soma</pkg>
  <pkg>subplex</pkg>
  <pkg>tabuSearch</pkg>
  <pkg>trust</pkg>
  <pkg>trustOptim</pkg>
  <pkg>TSP</pkg>
  <pkg>ucminf</pkg>
</packagelist>

<links>
  <a href="https://www.jstatsoft.org/v60">Journal of Statistical Software 
  Special Volume on Optimization (Editor: Ravi Varadhan)</a>
  <a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-1118569288.html">
  Nonlinear Parameter Optimization Using R Tools -- John C. Nash (Wiley)</a>
  <a href="https://www.springer.com/mathematics/book/978-3-319-08262-2">
  Modern Optimization With R -- Paulo Cortez (Springer UseR Series)</a>
  <a href="http://www.portfolioprobe.com/2012/07/23/a-comparison-of-some-heuristic-optimization-methods/">
  Comparison of some heuristic optimization methods</a>
  <a href="http://www.coin-or.org/">COIN-OR Project</a>
  <a href="http://www.neos-guide.org/Optimization-Guide">
  NEOS Optimization Guide</a>
  <a href="http://plato.asu.edu/sub/pns.html">
  Decision Tree for Optimization Software</a>
  <a href="http://www.ams.org/mathscinet/msc/msc2010.html?t=90Cxx&amp;btn=Current">
  Mathematics Subject Classification - Mathematical programming</a>
</links>

</CRANTaskView>
