Statistics and Analytics for the Social and Computing Sciences

14.5 using r to solve linear optimization.

The most difficult part about using R to solve a linear optimization problem is to translate the optimization problem into code. Let’s reproduce the table with all the necessary information for the example of Farmer Jean:

Here’s how you translate it into code. First, we define the objective function parameters, which are just the coefficients of \(X_1\) and \(X_2\) in the object function: Profits = 0.15 \(X_1\) + 0.40 \(X_2\)

Next, we define the constraints, which are broken up into 3 variables: the constraints matrix, the constraint directions, and the constraint values (or constraint RHS for right-hand-side).

\[0.20X_1 + 0.70 X_2 \leq 100\] \[X_1 + X_2 \leq 200\]

The constraint matrix is simply concatenating all the coefficients here into a matrix. For simplicity, using the convention below, we just read off the matrix from top to bottom, then within each line, from left to right. So we have: (0.20, 0.70, 1, 1). When I construct the matrix, you have to specify the number of columns ( ncol ) which is simply the number of decision variables we have; in this case it’s 2.

The constraint directions are just a vector that corresponds to each constraint ( \(\leq\) , \(\leq\) ), and the constraint right-hand-side values are just (100, 200)

The important thing to note is to get the order of all the constraints correct. In particular, if you have certain constraints that do not include ALL of the decision variables, to include 0 s whenever appropriate.

TIP! For example, if you have an additional constraint that you can only produce a maximum of 500 \(X_1\) , this constraint translates to: \(X_1 \leq 500\) but to be even more helpful to yourself, write it out as: \[ 1 X_1 + 0 X_2 \leq 500 \] This will help you remember to put … 1,0 … into the relevant row of the constraints matrix when you are reading the matrix off from your table.

Finally, we put all of these into a call to the lp function within the lpSolve package. We specify max for maximizing the objective function, pass in the rest of the parameters we just defined, and finally we also ask it to compute.sens=TRUE : we need this for the sensitivity analysis in the next section.

Putting it all together, and looking at the solution ( lp.solution$solution ) and objective function value ( lp.solution$objval )

Thus, the optimal solution is \(X_1\) = 80, \(X_2\) = 120, and the optimal profit is 60, which is what we found manually in the previous section.

CRAN Task View: Optimization and Mathematical Programming

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: Multivariate , SocialSciences , Robust among others. The focus of this task view is on Optimization Infrastructure Packages , General Purpose Continuous Solvers , Mathematical Programming Solvers , and Specific Applications in Optimization . Packages are categorized in these sections.

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 Classification According to Subject .

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

Optimization Infrastructure Packages

  • The optimx package provides a replacement and extension of the optim() function in Base R with a call to several function minimization codes in R in a single statement. These methods handle smooth, possibly box constrained functions of several or many parameters. Function optimr() in this package extends the optim() function with the same syntax but more 'method' choices. Function opm() applies several solvers to a selected optimization task and returns a dataframe of results for easy comparison. The earlier optimx() function which has similar functionality but a slightly different syntax and output is included for compatibility.
  • The R Optimization Infrastructure ( ROI ) 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. The approach allows for easy switching between solvers and thus enhances comparability. More information can be found at the ROI home page .
  • The package CVXR provides an object-oriented modeling language for Disciplined Convex Programming (DCP). It allows the user to formulate convex optimization problems in a natural way following mathematical convention and DCP rules. The system analyzes the problem, verifies its convexity, converts it into a canonical form, and hands it off to an appropriate solver such as ECOS or SCS to obtain the solution. (CVXR is derived from the MATLAB toolbox CVX, developed at Stanford University, cf. CVXR home page .)

General Purpose Continuous Solvers

Package stats offers several general purpose optimization routines. For one-dimensional unconstrained function optimization there is optimize() which searches an interval for a minimum or maximum. Function optim() provides an implementation of the Broyden-Fletcher-Goldfarb-Shanno (BFGS) method, bounded BFGS, conjugate gradient (CG), 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 constrOptim() . Then there is nlm which is used for solving nonlinear unconstrained minimization problems. nlminb() offers box-constrained optimization using the PORT routines. [RGA, QN]

  • Package lbfgs wraps the libBFGS C library by Okazaki and Morales (converted from Nocedal's L-BFGS-B 3.0 Fortran code), interfacing both the L-BFGS and the OWL-QN algorithm, the latter being particularly suited for higher-dimensional problems.
  • lbfgsb3 and lbfgsb3c both interface J.Nocedal's L-BFGS-B 3.0 Fortran code, a limited memory BFGS minimizer, allowing bound constraints and being applicable to higher-dimensional problems. ('lbfgsb3c' has an 'optim'-like interface based on 'Rcpp'.)
  • RcppNumerical is a collection of open source libraries for numerical computing and their integration with 'Rcpp'. It provides a wrapper for the L-BFGS algorithm, based on the LBFGS++ library (based on code of N. Okazaki).
  • Package ucminf implements an algorithm of quasi-Newton type for nonlinear unconstrained optimization, combining a trust region with line search approaches. The interface of ucminf() is designed for easy interchange with optim() .[QN]
  • The following packages implement optimization routines in pure R, for nonlinear functions with bounds constraints: Rcgmin : gradient function minimization similar to GC; Rvmmin : variable metric function minimization; Rtnmin : truncated Newton function minimization.
  • mize implements optimization algorithms in pure R, including conjugate gradient (CG), Broyden-Fletcher-Goldfarb-Shanno (BFGS) and limited memory BFGS (L-BFGS) methods. Most internal parameters can be set through the calling interface.
  • Package dfoptim , for derivative-free optimization procedures, contains quite efficient R implementations of the Nelder-Mead and Hooke-Jeeves algorithms (unconstrained and with bounds constraints). [DF]
  • Package nloptr 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]
  • Package alabama provides an implementations of the Augmented Lagrange Barrier minimization algorithm for optimizing smooth nonlinear objective functions with (nonlinear) equality and inequality constraints.
  • Package Rsolnp provides an implementation of the Augmented Lagrange Multiplier method for solving nonlinear optimization problems with equality and inequality constraints (based on code by Y. Ye).
  • NlcOptim solves nonlinear optimization problems with linear and nonlinear equality and inequality constraints, implementing a Sequential Quadratic Programming (SQP) method; accepts the input parameters as a constrained matrix.
  • In package Rdonlp2 (see the rmetrics project) function donlp2() , 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]
  • clue contains the function sumt() for solving constrained optimization problems via the sequential unconstrained minimization technique (SUMT).
  • BB contains the function spg() 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, BB contains two functions ( dfsane() and sane() ) for using the spectral gradient method for solving a nonlinear system of equations.
  • GrassmannOptim is a package for Grassmann manifold optimization. The implementation uses gradient-based algorithms and embeds a stochastic gradient method for global search.
  • ManifoldOptim is an R interface to the 'ROPTLIB' optimization library. It optimizes real-valued functions over manifolds such as Stiefel, Grassmann, and Symmetric Positive Definite matrices.
  • Package gsl provides BFGS, conjugate gradient, steepest descent, and Nelder-Mead algorithms. It uses a "line search" approach via the function multimin() . It is based on the GNU Scientific Library (GSL). [RGA, QN]
  • An R port of the Scilab neldermead module is packaged in neldermead offering several direct search algorithms based on the simplex approach. And n1qn1 provides an R port of the n1qn1 optimization procedure in Scilab, a quasi-Newton BFGS method without constraints.
  • optimsimplex provides building blocks for simplex-based optimization algorithms such as the Nelder-Mead, Spendley, Box method, or multi-dimensional search by Torczon, etc.
  • Several derivative-free optimization algorithms are provided with package minqa ; e.g., the functions bobyqa() , newuoa() , and uobyqa() allow to minimize a function of many variables by a trust region method that forms quadratic models by interpolation. bobyqa() additionally permits box constraints (bounds) on the parameters. [DF]
  • Package powell optimizes functions using Powell's UObyQA algorithm (Unconstrained Optimization by Quadratic Approximation).
  • subplex provides unconstrained function optimization based on a subspace searching simplex method.
  • In package trust , a routine with the same name offers local optimization based on the "trust region" approach.
  • trustOptim 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.
  • Package quantreg contains variations of simplex and of interior point routines ( nlrq() , crq() ). It provides an interface to L1 regression in the R code of function rq() . [SPLP, LP, IPM]

Quadratic Optimization

  • In package quadprog solve.QP() solves quadratic programming problems with linear equality and inequality constraints. (The matrix has to be positive definite.) quadprogXT extends this with absolute value constraints and absolute values in the objective function. [QP]
  • kernlab contains the function ipop for solving quadratic programming problems using interior point methods. (The matrix can be positive semidefinite.) [IPM, QP]
  • Dykstra solves quadratic programming problems using R. L. Dykstra's cyclic projection algorithm for positive definite and semidefinite matrices. The routine allows for a combination of equality and inequality constraints. [QP]
  • osqp provides bindings to OSQP , the 'Operator Splitting QP' solver from the University of Oxford Control Group; it solves sparse convex quadratic programming problems with optional equality and inequality constraints efficiently. [QP]
  • coneproj contains routines for cone projection and quadratic programming, estimation and inference for constrained parametric regression, and shape-restricted regression problems. [QP]
  • LowRankQP primal/dual interior point method solving quadratic programming problems (especially for semidefinite quadratic forms). [IPM, QP]
  • The COIN-OR project 'qpOASES' implements a reliable QP solver, even when tackling semi-definite or degenerated QP problems; it is particularly suited for model predictive control (MPC) applications; the ROI plugin ROI.plugin.qpoases makes it accessible for R users. [QP]
  • limSolve offers to solve linear or quadratic optimization functions, subject to equality and/or inequality constraints. [LP, QP]

Optimization Test Functions

  • Objective functions for benchmarking the performance of global optimization algorithms can be found in globalOptTests .
  • smoof has generators for a number of both single- and multi-objective test functions that are frequently used for benchmarking optimization algorithms; offers a set of convenient functions to generate, plot, and work with objective functions.
  • flacco contains tools and features used for an Exploratory Landscape Analysis (ELA) of continuous optimization problems, capable of quantifying rather complex properties, such as the global structure, separability, etc., of the optimization problems.
  • cec2013 and cec2005benchmark 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.
  • Package funconstrain (on Github) implements 35 of the test functions by More, Garbow, and Hillstom, useful for testing unconstrained optimization methods.

Least-Squares Problems

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

  • Package nlsr provides tools for working with nonlinear least-squares problems. Functions nlfb and nlxb are intended to eventually supersede the 'nls()' function in Base R, by applying a variant of the Marquardt procedure for nonlinear least-squares, with bounds constraints and optionally Jacobian described as R functions. (It is based on the now-deprecated package nlmrt .)
  • Package minpack.lm provides a function nls.lm() 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.
  • Package lsei contains functions that solve least-squares linear regression problems under linear equality/inequality constraints. Functions for solving quadratic programming problems are also available, which transform such problems into least squares ones first. (Based on Fortran programs of Lawson and Hanson.)
  • Package nnls interfaces the Lawson-Hanson implementation of an algorithm for non-negative least-squares, allowing the combination of non-negative and non-positive constraints.
  • Package bvls interfaces the Stark-Parker implementation of an algorithm for least-squares with upper and lower bounded variables.
  • Package onls 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.
  • colf performs least squares constrained optimization on a linear objective function. It contains a number of algorithms to choose from and offers a formula syntax similar to lm() .

Semidefinite and Convex Solvers

  • Package ECOSolveR 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.
  • Package scs applies operator splitting to solve linear programs (LPs), second-order cone programs (SOCP), semidefinite programs, (SDPs), exponential cone programs (ECPs), and power cone programs (PCPs), or problems with any combination of those cones.
  • sdpt3r solves general semidefinite Linear Programming problems, using an R implementation of the MATLAB toolbox SDPT3. Includes problems such as the nearest correlation matrix, D-optimal experimental design, Distance Weighted Discrimination, or the maximum cut problem.
  • cccp contains routines for solving cone constrained convex problems by means of interior-point methods. The implemented algorithms are partially ported from CVXOPT, a Python module for convex optimization
  • The CLSOCP package provides an implementation of a one-step smoothing Newton method for the solution of second order cone programming (SOCP) problems.
  • CSDP is a library of routines that implements a primal-dual barrier method for solving semidefinite programming problems; it is interfaced in the Rcsdp package. [SDP]
  • The DSDP library implements an interior-point method for semidefinite programming with primal and dual solutions; it is interfaced in package Rdsdp . [SDP]
  • Package Rmosek 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]

Global and Stochastic Optimization

  • Package DEoptim provides a global optimizer based on the Differential Evolution algorithm. RcppDE provides a C++ implementation (using Rcpp) of the same DEoptim() function.
  • DEoptimR 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.)
  • The CEoptim package implements a cross-entropy optimization technique that can be applied to continuous, discrete, mixed, and constrained optimization problems. [COP]
  • GenSA 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.
  • GA provides functions for optimization using Genetic Algorithms in both, the continuous and discrete case. This package allows to run corresponding optimization tasks in parallel.
  • Package genalg contains rbga() , an implementation of a genetic algorithm for multi-dimensional function optimization.
  • Package rgenoud offers genoud() , a routine which is capable of solving complex function minimization/maximization problems by combining evolutionary algorithms with a derivative-based (quasi-Newtonian) approach.
  • Machine coded genetic algorithm (MCGA) provided by package mcga is a tool which solves optimization problems based on byte representation of variables.
  • A particle swarm optimizer (PSO) is implemented in package pso , and also in psoptim . Another (parallelized) implementation of the PSO algorithm can be found in package ppso available from .
  • Package hydroPSO implements the latest Standard Particle Swarm Optimization algorithm (SPSO-2011); it is parallel-capable, and includes several fine-tuning options and post-processing functions.
  • hydromad (on Github) contains the SCEoptim function for Shuffled Compex Evolution (SCE) optimization, an evolutionary algorithm, combined with a simplex method.
  • Package ABCoptim implements the Artificial Bee Colony (ABC) optimization approach.
  • Package metaheuristicOpt contains implementations of several evolutionary optimization algorithms, such as particle swarm, dragonfly and firefly, sine cosine algorithms and many others.
  • Package ecr provides a framework for building evolutionary algorithms for single- and multi-objective continuous or discrete optimization problems.
  • CMA-ES by N. Hansen, global optimization procedure using a covariance matrix adapting evolutionary strategy, is implemented in several packages: In packages cmaes and cmaesr , in parma as cmaes , in adagio as pureCMAES , and in rCMA as cmaOptimDP , interfacing Hansen's own Java implementation.
  • Package Rmalschains implements an algorithm family for continuous optimization called memetic algorithms with local search chains (MA-LS-Chains).
  • An R implementation of the Self-Organising Migrating Algorithm (SOMA) is available in package soma . This stochastic optimization method is somewhat similar to genetic algorithms.
  • nloptr 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).
  • The NMOF 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.
  • SACOBRA is a package for numeric constrained optimization of expensive black-box functions under severely limited budgets; it implements an extension of the COBRA algorithm with initial design generation and self-adjusting random restarts.
  • RCEIM implements a stochastic heuristic method for performing multi-dimensional function optimization.

Mathematical Programming Solvers

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 Classification According to Subject see the list at the end of this task view.

  • Package ompr is an optimization modeling package to model and solve Mixed Integer Linear Programs in an algebraic way directly in R. The models are solver-independent and thus offer the possibility to solve models with different solvers. (Inspired by Julia's JuMP project.)
  • linprog solves linear programming problems using the function solveLP() (the solver is based on lpSolve ) and can read model files in MPS format. [LP]
  • In the boot package there is a routine called simplex() which realizes the two-phase tableau simplex method for (relatively small) linear programming problems. [LP]
  • rcdd offers the function lpcdd() for solving linear programs with exact arithmetic using the GNU Multiple Precision (GMP) library. [LP]
  • The NEOS Server for Optimization provides online access to state-of-the-art optimization problem solvers. The packages rneos and ROI.plugin.neos enable the user to pass optimization problems to NEOS and retrieve results within R.

Interfaces to Open Source Optimizers

  • Package clpAPI provides high level access from R to low-level API routines of the COIN OR Clp solver library. [LP]
  • Package lpSolve contains the routine lp() to solve LPs and MILPs by calling the freely available solver lp_solve . This solver is based on the revised simplex method and a branch-and-bound (B&B) approach. It supports semi-continuous variables and Special Ordered Sets (SOS). Furthermore lp.assign() and lp.transport() are aimed at solving assignment problems and transportation problems, respectively. Additionally, there is the package lpSolveAPI which provides an R interface to the low level API routines of lp_solve (see also project lpsolve on R-Forge). lpSolveAPI supports reading linear programs from files in lp and MPS format. [BP, IP, LP, MILP, SPLP]
  • Packages glpkAPI as well as package Rglpk provide an interface to the GNU Linear Programming Kit (GLPK). Whereas the former provides high level access to low level routines the latter offers a high level routine Rglpk_solve_LP() to solve MILPs using GLPK. Both packages offer the possibility to use models formulated in the MPS format. [BP, IP, IPM, LP, MILP]
  • Rsymphony has the routine Rsymphony_solve_LP() that interfaces the SYMPHONY solver for mixed-integer linear programs. (SYMPHONY is part of the Computational Infrastructure for Operations Research (COIN-OR) project.) Package lsymphony in Bioconductor provides a similar interface to SYMPHONY that is easier to install. [LP, IP, MILP]
  • The NOMAD solver is implemented in the crs package for solving mixed integer programming problems. This algorithm is accessible via the snomadr() function and is primarily designed for constrained optimization of blackbox functions. [MILP]
  • 'Clp' and 'Cbc' are open source solvers from the COIN-OR suite. 'Clp' solves linear programs with continuous objective variables and is available through ROI.plugin.clp . 'Cbc' is a powerful mixed integer linear programming solver (based on 'Clp'); package 'rcbc' can be installed from: rcbc (on Github). [LP, MILP]

Interfaces to Commercial Optimizers

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

  • Packages cplexAPI and Rcplex provide interfaces to the IBM CPLEX Optimizer . CPLEX provides dual/primal simplex optimizers as well as a barrier optimizer for solving large scale linear and quadratic programs. It offers a mixed integer optimizer to solve difficult mixed integer programs including (possibly non-convex) MIQCP. Note that CPLEX is not free and you have to get a license. Academics will receive a free licence upon request. [LP, IP, BP, QP, MILP, MIQP, IPM]
  • The API of the commercial solver LINDO can be accessed in R via package rLindo . The LINDO API allows for solving linear, integer, quadratic, conic, general nonlinear, global and stochastic programming problems. [LP, IP, BP, QP,MILP, MIQP, SP]
  • Package Rmosek offers an interface to the commercial optimizer from MOSEK . 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.). You have to get a license, but Academic licenses are free of charge. [LP, IP, BP, QP, MILP, MIQP, IPM]
  • 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 R with Gurobi website for more details. [LP, QP, MILP, MIQP]
  • The localsolver 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]

Combinatorial Optimization

  • Package adagio provides R functions for single and multiple knapsack problems, and solves subset sum and assignment tasks.
  • In package clue solve_LSAP() enables the user to solve the linear sum assignment problem (LSAP) using an efficient C implementation of the Hungarian algorithm. [SPLP]
  • FLSSS provides multi-threaded solvers for fixed-size single and multi dimensional subset sum problems with optional constraints on target sum and element range, fixed-size single and multi dimensional knapsack problems, binary knapsack problems and generalized assignment problems via exact algorithms or metaheuristics.
  • Package qap solves Quadratic Assignment Problems (QAP) applying a simulated annealing heuristics (other approaches will follow).
  • igraph , 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]
  • mknapsack solves multiple knapsack problems, based on LP solvers such as 'lpSolve' or 'CBC'; will assign items to knapsacks in a way that the value of the top knapsacks is as large as possible.
  • Package 'knapsack' (see R-Forge project optimist ) provides routines from the book `Knapsack Problems' by Martello and Toth. There are functions for (multiple) knapsack, subset sum and binpacking problems. (Use of Fortran codes is restricted to personal research and academic purposes only.)
  • nilde provides routines for enumerating all integer solutions of linear Diophantine equations, resp. all solutions of knapsack, subset sum, and additive partitioning problems (based on a generating functions approach).
  • matchingR and matchingMarkets implement the Gale-Shapley algorithm for the stable marriage and the college admissions problem, the stable roommates and the house allocation problem. [COP, MM]
  • Package optmatch provides routines for solving matching problems by translating them into minimum-cost flow problems and then solved optimaly by the RELAX-IV codes of Bertsekas and Tseng (free for research). [SPLP]
  • Package TSP provides basic infrastructure for handling and solving the traveling salesperson problem (TSP). The main routine solve_TSP() solves the TSP through several heuristics. In addition, it provides an interface to the Concorde TSP Solver , which has to be downloaded separately. [SPLP]

Specific Applications in Optimization

  • Function caRamel in package caRamel is a multi-objective optimizer, applying a combination of the multiobjective evolutionary annealing-simplex (MEAS) method and the non-dominated sorting genetic algorithm (NGSA-II); it was initially developed for the calibration of hydrological models.
  • Multi-criteria optimization problems can be solved using package mco which implements genetic algorithms. [MOP]
  • The data cloning algorithm is a global optimization approach and a variant of simulated annealing which has been implemented in package dclone . 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.
  • irace contains an optimization algorithm for optimizing the parameters of other optimization algorithms. This problem is called "(offline) algorithm configuration". [GO]
  • Package kofnGA 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.
  • copulaedas 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.
  • tabuSearch 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.
  • Besides functionality for solving general isotone regression problems, package isotone provides a framework of active set methods for isotone optimization problems with arbitrary order restrictions.
  • mlrMBO is a flexible and comprehensive R toolbox for model-based optimization ('MBO'), also known as Bayesian optimization. And rBayesianOptimization is an implementation of Bayesian global optimization with Gaussian Processes, for parameter tuning and optimization of hyperparameters.
  • The desirability package contains S3 classes for multivariate optimization using the desirability function approach of Harrington (1965) using functional forms described by Derringer and Suich (1980).
  • Package sna contains the function lab.optim() which is the front-end to a series of heuristic routines for optimizing some bivariate graph statistic. [GRAPH]
  • maxLik 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.

Classification According to Subject

What follows is an attempt to provide a by-subject overview of packages. The full name of the subject as well as the corresponding MSC 2010 code (if available) are given in brackets.

  • LP (Linear programming, 90C05): boot , clpAPI , cplexAPI , glpkAPI , limSolve , linprog , lpSolve , lpSolveAPI , quantreg , rcdd , Rcplex , Rglpk , rLindo , Rmosek , Rsymphony
  • GO (Global Optimization): DEoptim , DEoptimR , GenSA , GA , pso , hydroPSO , cmaes , nloptr , NMOF
  • SPLP (Special problems of linear programming like transportation, multi-index, etc., 90C08): clue , lpSolve , lpSolveAPI , quantreg , TSP
  • BP (Boolean programming, 90C09): cplexAPI , glpkAPI , lpSolve , lpSolveAPI , Rcplex , Rglpk
  • IP (Integer programming, 90C10): cplexAPI , glpkAPI , lpSolve , lpSolveAPI , Rcplex , Rglpk , rLindo Rmosek , Rsymphony
  • MIP (Mixed integer programming and its variants MILP for LP and MIQP for QP, 90C11): cplexAPI , glpkAPI , lpSolve , lpSolveAPI , Rcplex , Rglpk , rLindo , Rmosek , Rsymphony
  • SP (Stochastic programming, 90C15): rLindo
  • QP (Quadratic programming, 90C20): cplexAPI , kernlab , limSolve , LowRankQP , quadprog , Rcplex , Rmosek
  • SDP (Semidefinite programming, 90C22): Rcsdp , Rdsdp
  • CP (Convex programming, 90C25): cccp , CLSOCP
  • COP (Combinatorial optimization, 90C27): adagio , CEoptim , TSP , matchingR
  • MOP (Multi-objective and goal programming, 90C29): mco
  • NLP (Nonlinear programming, 90C30): nloptr , alabama , Rsolnp , Rdonlp2, rLindo
  • GRAPH (Programming involving graphs or networks, 90C35): igraph , sna
  • IPM (Interior-point methods, 90C51): cplexAPI , kernlab , glpkAPI , LowRankQP , quantreg , Rcplex
  • RGA (Methods of reduced gradient type, 90C52): stats ( optim() ), gsl
  • QN (Methods of quasi-Newton type, 90C53): stats ( optim() ), gsl , lbfgs , lbfgsb3 , nloptr , ucminf
  • DF (Derivative-free methods, 90C56): dfoptim , minqa , nloptr
  • HEUR (Approximation methods and heuristics, 90C59): irace

CRAN packages:

  • alabama (core)
  • cec2005benchmark
  • DEoptim (core)
  • desirability
  • dfoptim (core)
  • globalOptTests
  • GrassmannOptim
  • localsolver
  • ManifoldOptim
  • matchingMarkets
  • metaheuristicOpt
  • optimsimplex
  • quadprog (core)
  • rBayesianOptimization
  • RcppNumerical
  • Rmalschains
  • ROI.plugin.clp
  • ROI.plugin.neos
  • ROI.plugin.qpoases
  • ucminf (core)

Related links:

  • Journal of Statistical Software Special Volume on Optimization (Editor: Ravi Varadhan)
  • Nonlinear Parameter Optimization Using R Tools -- John C. Nash (Wiley)
  • Modern Optimization With R -- Paulo Cortez (Springer UseR Series)
  • Yet Another Math Programming Consultant
  • COIN-OR Project
  • NEOS Optimization Guide
  • Decision Tree for Optimization Software
  • Mathematics Subject Classification - Mathematical programming


R news and tutorials contributed by hundreds of R bloggers

Linear programming in r.

Posted on August 16, 2018 by Mic in R bloggers | 0 Comments

[social4i size="small" align="align-left"] --> [This article was first published on The Beginner Programmer , and kindly contributed to R-bloggers ]. (You can report issue about the content on this page here ) Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Linear programming is a technique to solve optimization problems whose constraints and outcome are represented by linear relationships.


Simply put, linear programming allows to solve problems of the following kind:

  • Maximize/minimize $\hat C^T \hat X$
  • Under the constraint $\hat A \hat X \leq \hat B$
  • And the constraint $\hat X \geq 0$

This doesn’t seem much when you glance at it but in practice it is a powerful tool that can be used to make decisions in practical life scenarios.

It is often the case that we need to make decisions based on constraints. Often the invisible and most harsh constraint is time, but generally speaking there are a lot of other constraints that we need to take into account. A simple set of examples would be:

  • I want to change my heating system. I want to minimize the cost of the system and the bills, what kind of heating system should I install? A pellet stove? Electric radiators?
  • I want to obtain the maximum profit from the sale of these two products I produce. In what quantities should I produce each product?

Linear programming can help you with these kind of decisions where:

  • The function you are trying to optimize is a linear combination of the decision variables (this might not always be the case).

The constraints you have are a linear combination of the decision variables.

An example of linear optimization

I’m going to implement in R an example of linear optimization that I found in the book “Modeling and Solving Linear Programming with R” by Jose M. Sallan, Oriol Lordan and Vincenc Fernandez.  The example is named “Production of two models of chairs” and can be found at page 57, section 3.5. I’m going to solve only the first point.

The problem text is the following

A company produces two models of chairs: 4P and 3P. The model 4P needs 4 legs, 1 seat and 1 back. On the other hand, the model 3P needs 3 legs and 1 seat. The company has a initial stock of 200 legs, 500 seats and 100 backs. If the company needs more legs, seats and backs, it can buy standard wood blocks, whose cost is 80 euro per block. The company can produce 10 seats, 20 legs and 2 backs from a standard wood block. The cost of producing the model 4P is 30 euro/chair, meanwhile the cost of the model 3P is 40 euro/chair. Finally, the company informs that the minimum number of chairs to produce is 1000 units per month. Define a linear programming model, which minimizes the total cost (the production costs of the two chairs, plus the buying of new wood blocks).

Problem definition

First, we need to translate the problem in a mathematical way. Let’s define the following variables

  • $x_{4p}$ is the number of 4P chairs to be produced.
  • $x_{3p}$ is the number of 3P chairs to be produced.
  • $x_w$ is the number of wood blocks to be bought.

Now we can define $\hat X = \begin{pmatrix} x_{4p} \\ x_{3p}  \\  x_w \end{pmatrix}$ as the decision variable vector. Note that it must be $\hat X \geq 0$.

We would like to minimize the total cost so we must set our objective function as follows

$$cost(x_{4p}, x_{3p}, x_w) = 30 x_{4p} + 40 x_{3p} + 80 x_w = MIN(cost) $$

which means that $\hat C = \begin{pmatrix} 30 \\ 40  \\  80 \end{pmatrix}$.

The constraints can be set in the following way

  • For the seats $$ x_{4p} + x_{3p} \leq 500 + 10 x_w $$
  • For the legs $$ 4 x_{4p} + 3 x_{3p} \leq 200 + 20 x_w $$
  • For the backs $$ x_{4p} \leq 100 + 2 x_w $$
  • Minimum number of chairs produced $$ x_{4p} + x_{3p} \geq 1000 $$

We can now define the coefficient matrix $A = \begin{pmatrix} 1 & 1 & -10 & \\  4 & 3 & -20 & \\  1 & 0 & -2 & \\  – 1 & – 1 & 0 &  \end{pmatrix} $ and $B = \begin{pmatrix} 500 \\ 200 \\ 100 \\ -1000 \end{pmatrix}$.

R implementation and solution

We are now ready to implement this is in R. There are many different packages which can solve this kind of problems but my favourites are lpSolve and lpSolveAPI which is a kind of API built on top of lpSolve . I will use both.

A nice feature about the lpSolve package is that you can specify the direction of the constraints. Indeed in our case the last constraint of minimum number of chairs produced does not fit in with the mathematical definiton of the problem that we gave in the previous paragraph. Here we can either change the signs (and therefore the inequality direction) or specify the inequality direction in lpSolve . I’ll do this second way.

We can set that all the variables should be integers by setting the argument “” in the lpSolve::lp function. Of course, lpSolve can work with both integers and real numbers.

It’s also particularly important to check the status at the end of the execution: if it is 0, then a solution has been found but if it is 2 then this means that there is no feasible solution.

To leave a comment for the author, please follow the link and comment on their blog: The Beginner Programmer . offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job . Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Copyright © 2022 | MH Corporate basic by MH Themes

Never miss an update! Subscribe to R-bloggers to receive e-mails with the latest R posts. (You will not see this message again.)

Mixed-integer programming

Combinatorial optimization problems can be found in many places: finding the optimal seating plan for you and your coworkers, designing a conference schedule or setting up facilities in an emergency situation.

Many of these real world optimization problems can be naturally formulated as a special class of problems, called a mixed-integer linear program (MILP) . As the name suggests, the aim is to optimize a linear objective function, subject to a set of linear inequalities with some of the variables being integer valued. Once able to formulate the problem as a MILP, you can use specialized open-source and commercial solvers that have been developed over the past decades to efficiently solve it to optimality.

This sections aims to give you an overview about MILPs, how to model and solve them in R. (Real) world examples can be found in the practicals section.

Also, always take a look at the CRAN Optimization Task View , it lists essentially all packages available for combinatorial optimzation (including MILPs).


  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
  • Manage My Drafts

2024 DevOps Lifecycle : Share your expertise on CI/CD, deployment metrics, tech debt, and more for our Feb. Trend Report (+ enter a raffle!).

Kubernetes in the Enterprise: Join our Virtual Roundtable as we dive into Kubernetes over the past year, core usages, and emerging trends.

Low-Code Development: Learn the concepts of low code, features + use cases for professional devs, and the low-code implementation process.

Getting Started With Jenkins: Learn fundamentals that underpin CI/CD, how to create a pipeline, and when and where to use Jenkins.

  • Accelerate Innovation by Shifting Left FinOps: Part 6
  • Accelerate Innovation by Shifting Left FinOps, Part 3
  • Harmonizing Space, Time, and Semantics: Navigating the Complexity of Geo-Distributed IoT Databases
  • Accelerate Innovation by Shifting Left FinOps, Part 2
  • Preserving Context Across Threads
  • Modernizing Mainframe Applications by Harnessing Specialty Processors and the Power of the Cloud
  • Performance of ULID and UUID in Postgres Database
  • Stop Using Jenkins for Continuous Deployment (CD)

Optimization in R

Ricky Ho user avatar

Join the DZone community and get the full member experience.

Optimization is a very common problem in data analytics.  Given a set of variables (which one has control), how to pick the right value such that the benefit is maximized.  More formally, optimization is about determining a set of variables x1, x2, … that maximize or minimize an objective function f(x1, x2, …).

Unconstrained optimization

Equality constraint optimization.

  • g1(x1, x2, …) = 0
  • g2(x1, x2, …) = 0

Inequality constraint optimization

Linear programming.

  • a11.x1 + a12.x2 <= b1
  • a21.x1 + a22.x2 <= b2
  • a31.x1 + a32.x2 <= b3
  • x1 >= 0, x2 >=0
  • StockA gives 5% return on average
  • StockB gives 4% return on average
  • StockC gives 6% return on average
  • 10% < x1, x2, x3 < 100%
  • x1 + x2 + x3 = 1
  • x3 < x1 + x2
  • x1 < 2 * x2

Quadratic Programming

  • a11.x1 + a12.x2 == b1
  • a21.x1 + a22.x2 == b2
  • a31.x1 + a32.x2 >= b3
  • a41.x1 + a42.x2 >= b4
  • a51.x1 + a52.x2 >= b5
  • x1 + x2 + x3 == 1
  • X1*5% + x2*4% + x3*6% >= 5.2%
  • 0% < x1, x2, x3 < 100%

Integration with Predictive Analytics

Published at DZone with permission of Ricky Ho , DZone MVB . See the original article here.

Opinions expressed by DZone contributors are their own.

Partner Resources

  • About DZone
  • Send feedback
  • Advertise with DZone


  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone
  • Terms of Service
  • Privacy Policy
  • 3343 Perimeter Hill Drive
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

ROI R Optimization Infrastructure

  • as.L_term: Canonicalize the Linear Term
  • as.Q_term: Canonicalize the Quadraric Term
  • Bounds_Accessor_Mutator: Bounds - Accessor and Mutator Functions
  • C_constraint: Conic Constraints
  • cone: Cone Constructors
  • constraints: Constraints - Accessor and Mutator Functions
  • equal: Compare two Objects
  • F_constraint: Function Constraints
  • F_objective: General (Nonlinear) Objective Function
  • G: Extract Gradient information
  • is.default_bound: Check for default bounds
  • J: Extract Jacobian Information
  • L_constraint: Linear Constraints
  • L_objective: Linear Objective Function
  • maximum: Maximum - Accessor and Mutator Functions
  • nlminb2: Nonlinear programming with nonlinear constraints.
  • NO_constraint: Class: '"NO_constraint"'
  • objective: Objective - Accessor and Mutator Functions
  • OP: Optimization Problem Constructor
  • OP_signature: Optimization Problem Signature
  • Q_constraint: Quadratic Constraints
  • Q_objective: Quadratic Objective Function
  • rbind.constraint: Combine Constraints
  • ROI_applicable_solvers: Obtain Applicable Solvers
  • ROI_available_solvers: Available Solvers
  • ROI_bound: bound
  • ROI_constraint: constraint
  • ROI_options: ROI Options
  • ROI_plugin_add_status_code_to_db: Add Status Code to the Status Database
  • ROI_plugin_build_equality_constraints: Build Functional Equality Constraints
  • ROI_plugin_build_inequality_constraints: Build Functional Inequality Constraints
  • ROI_plugin_canonicalize_solution: Canonicalize Solution
  • ROI_plugin_get_solver_name: Get Solver Name
  • ROI_plugin_make_signature: Make Signatures
  • ROI_plugin_register_reader_writer: Register Reader / Writer Method
  • ROI_plugin_register_reformulation: Register Reformulation Method
  • ROI_plugin_register_solver_control: Register Solver Controls
  • ROI_plugin_register_solver_method: Register Solver Method
  • ROI_plugin_solution: Extract solution from the solver.
  • ROI_read: Read Optimization Problems
  • ROI_reformulate: Reformulate a Optimization Problem
  • ROI_registered_reader: List Registered Reader
  • ROI_registered_reformulations: Registered Reformulations
  • ROI_registered_solver_control: Registered Solver Controls
  • ROI_registered_solvers: Solver Tools
  • ROI_registered_writer: Write Optimization Problems
  • ROI_require_solver: Require Solver
  • ROI_solve: Solve an Optimization Problem
  • ROI_solver_signature: Obtain Solver Signature
  • ROI_write: Write Optimization Problems
  • Browse all...

ROI_solve : Solve an Optimization Problem In ROI: R Optimization Infrastructure

View source: R/roi.R

Solve an Optimization Problem


Solve a given optimization problem. This function uses the given solver (or searches for an appropriate solver) to solve the supplied optimization problem.

a list containing the solution and a message from the solver.

solutionthe vector of optimal coefficients

objvalthe value of the objective function at the optimum

statusa list giving the status code and message form the solver. The status code is 0 on success (no error occurred) 1 otherwise.

messagea list giving the original message provided by the solver.

Stefan Theussl

Theussl S, Schwendinger F, Hornik K (2020). 'ROI: An Extensible R Optimization Infrastructure.' Journal of Statistical Software_, *94*(15), 1-64. doi: 10.18637/jss.v094.i15 (URL:

Related to ROI_solve in ROI ...

R package documentation, browse r packages, we want your feedback.

solving optimization problems in r

Add the following code to your website.

REMOVE THIS Copy to clipboard

For more information on customizing the embed code, read Embedding Snippets .


  • Linear programming

Solving a simple linear programming problem using lpSolve in R

  • Linnart Felkl

solving optimization problems in r

In this post I show how to conduct simple linear optimization in R. You can also find other posts written by me that look at other linear optimization tasks, suchs as the transportation problem (can be solved with lp.transport), the assignment problem (can be solved with lp.assign) and integer linear programming (also linear mixed integer problems can be solved in R).

Linear programming is widely applied for modelling facility location problems. lpSolve is an extension available in R providing access to an C-based interface for solving linear programming problems. Since the interface is developed in C it has maximum performance, minimizing the time required for solving linear programming problems without having to switch programming environment or programming language.

In this post I give an example of simple linear programming problem solved with lpSolve.

The objective function is to maximize revenue defined by the function f(x,y) = 2x + 3y, subject to the constraints that x, y are non-negative and x + y not greater than 3.

As the Internet will show you, this problem is easy to solve, i.e. by drawing a line plot or by applying the simplex algorithm. I will not explain the algorithms or methodology for solving linear problems in detail, but I will give a brief example of how this simple problem can be modelled and solved using lpSolve in R. Afterwards, I will show a graphical illustration which verifies the result.

I load the lpSolve package (having installed it already) and model the problem, using the lpSolve API:

Now let us solve the linear problem:

The optimal solution is the following (optimal x and y value for problem at hand):

Now let us graphically verify the result. I define two lines which I visualize using geom_line from the ggplot2 package. The first line represents the constraint that x + y must be no greater than 3, the second line represents the objective function. The line for the objective function represents it maximum achievable value, i.e. the optimal value. The line for the constraint represents its binding cases, i.e. when it equals exactly 3. In more simple terms: “line objective” : 2x + 3y = 9 “line constraint” : x + y = 3

solving optimization problems in r

Considering that x+y=3, can you see that the optimal solution to this problem must be x=0, y=3 – and that this maximizes the objective function?

If you are interested in non-linear programming (e.g. gradient descent with nloptr) or quadratic optimization (quadprog) in R, then please go ahead and check out my other posts on these types of optimization tasks too.

solving optimization problems in r

Data scientist focusing on simulation, optimization and modeling in R, SQL, VBA and Python

You May Also Like

solving optimization problems in r

Optimized SCM capacity scheduling

solving optimization problems in r

Inventory simulation for optimized stock

solving optimization problems in r

Conveyor system optimization procedure

Leave a reply.

  • Default Comments
  • Facebook Comments

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed .

  • Entries feed
  • Comments feed

Privacy Overview

  • Submissions
  • Artificial Intelligence
  • Career Advice
  • Computer Vision
  • Data Engineering
  • Data Science
  • Language Models
  • Machine Learning
  • Programming
  • Certificates
  • Online Masters
  • Cheat Sheets
  • Publications

Optimization Using R

Optimization is a technique for finding out the best possible solution for a given problem for all the possible solutions. Optimization uses a rigorous mathematical model to find out the most efficient solution to the given problem.

By Perceptive Analytics

Header image

What is optimization?

  Optimization is a technique for finding out the best possible solution for a given problem for all the possible solutions. Optimization uses a rigorous mathematical model to find out the most efficient solution to the given problem. To start with an optimization problem, it is important to first identify an objective. An objective is a quantitative measure of performance. For example: to maximize profits, minimize time, minimize costs, maximize sales.

There are a variety of optimization techniques -

Unconstrained optimization

In certain cases the variable can be freely selected within it’s full range. The optim() function in R can be used for 1- dimensional or n-dimensional problems. The general format for the optim() function is -

We start off with an example, let’s define the objective function what we are looking to solve -

Setting up the constraints next

The optimization function is invoked

Next we check if the optimization converged to a minimum or not. The easy way to do this is to check if

The optimization has converged to minimum. Finding out the input arguments for the optimization function can be obtained by

The value of objective function at the minimum is obtained by

Linear programming

  Here is a good definition from technopedia - “Linear programming is a mathematical method that is used to determine the best possible outcome or solution from a given set of parameters or list of requirements, which are represented in the form of linear relationships. It is most often used in computer modeling or simulation in order to find the best solution in allocating finite resources such as money, energy, manpower, machine resources, time, space and many other variables. In most cases, the "best outcome" needed from linear programming is maximum profit or lowest cost. ”

An example of a LP problem is -

Maximize or Minimize objective function: f(y1, y2) = g1.y1 + g2.y2   Subjected to inequality constraints:

  A company wants to maximize the profit for two products A and B which are sold at $ 25 and $ 20 respectively. There are 1800 resource units available every day and product A requires 20 units while B requires 12 units. Both of these products require a production time of 4 minutes and total available working hours are 8 in a day. What should be the production quantity for each of the products to maximize profits?

A LP problem can either be a maximization problem or a minimization problem. The Above problem is a maximization problem. Some of the steps that should be followed while defining a LP problem are -  

Lets walk through the above example -

As already defined this is a maximization problem, first we define the objective function.  

max (Sales) = max (25 y 1 + 20 y 2 )

We are trying to maximize the sales while finding out the optimum number of products to manufacture. Now we set the constraints for this particular LP problem. We are dealing with both resource and time constraints.

20y 1 + 12 y 2 <= 1800 (Resource Constraint) 4y 1 + 4y 2 <= 8*60 (Time constraint)

There are two ways to solve a LP problem

We will be solving this problem using the simplex method but in R. We shall also explain another example with excel’s solver. There are a couple of packages in R to solve LP problems. Some of the popular ones are -

Implementation in R using Lpsolve

  Let’s use lpsolve for this problem. First we need to set the objective function, this has already been defined.

Creating a matrix for the constraints, we create a 2 by 2 matrix for this. And then setting constraints.

Now we are basically creating the equations that we have already defined by setting the rhs and the direction of the constraints.

The final step is to find the optimal solution. The syntax for the lpsolve package is -

lp (direction , objective, const.mat, const.dir, const.rhs)

Now we get the optimum values for y1 and y2, i.e the number of product A and product B that should be manufactured.

The maximum sales figure is -

More On This Topic

  • Machine Learning Pipeline Optimization with TPOT
  • How to Create an AutoML Pipeline Optimization Sandbox
  • Neural Network Optimization with AIMET
  • SQL Query Optimization Techniques
  • Database Optimization: Exploring Indexes in SQL
  • Gradient Descent: The Mountain Trekker's Guide to Optimization with…

solving optimization problems in r

Get the FREE ebook 'The Great Big Natural Language Processing Primer' and 'The Complete Collection of Data Science Cheat Sheets' along with the leading newsletter on Data Science, Machine Learning, AI & Analytics straight to your inbox.

By subscribing you accept KDnuggets Privacy Policy

Latest Posts

  • 5 Free University Courses to Learn Python
  • 5 Rare Data Science Skills That Can Help You Get Employed
  • 3 Ways to Generate Hyper-Realistic Faces Using Stable Diffusion
  • 7 Pandas Plotting Functions for Quick Data Visualization
  • 5 Tools to Help Build Your LLM Apps
  • Undersampling Techniques Using Python
  • Evolution in ETL: How Skipping Transformation Enhances Data Management
  • AI in Intimate Roles: Girlfriends and Therapists
  • Enhancing LLM Reasoning: Unveiling Chain of Code Prompting
  • 5 Super Cheat Sheets to Master Data Science

Subscribe To Our Newsletter (Get The Complete Collection of Data Science Cheat Sheets & Great Big NLP Primer ebook)

solving optimization problems in r

How to solve a constraint optimization problem in R (2023)

Hands-on tutorials, nonlinear constraint optimization in r using nloptr.

How to solve a constraint optimization problem in R (1)

Often in physical science research, we end up with a hard problem of optimizing a function (called objective) that needs to satisfy a range of constraints — linear or non-linear equalities and inequalities. The optimizers usually also have to adhere to the upper and lower bound. I recently worked on a similar problem in Quantum Information Science (QIS) where I attempted to optimize a non-linear function based on a few constraints dictated by rules of physics and mathematics. Interested readers may find my work on Constellation Optimization for Phase-Shift Keying Coherent States With Displacement Receiver to Maximize Mutual Information where I optimized mutual information for QuadriPhase-Shift Keying (QPSK) based on a set of constraints.

Constellation Optimization for Phase-Shift Keying Coherent States With Displacement Receiver to…

An important problem in quantum information theory is finding the best possible capacity of the optical communication….

While chasing the problem of non-linear optimization with a set of constraints, I found out that not all optimization routines are created equally. There are several libraries available in different languages such as python (scipy.optimize) , Matlab (fmincon) , C++ (robotim, nlopt) , and R (nloptr). While my list for optimization routine is not exhaustive, some of them are more reliable than others, some provide faster execution than others and some have better documentation. Based on several key factors, I find nloptr, implemented in the R language to be most suitable for nonlinear optimization. nloptr uses nlopt implemented in C++ as a backend. As a result, it provides the elegance of the R language and the speed of C++. The optimization procedure is performed quickly in a fraction of seconds even with a tolerance of the order of 10e-15.

A general nonlinear optimization problem usually have the form

How to solve a constraint optimization problem in R (2)

where f is an objective function, g defines a set of inequality constraints, h is a set of equality constraints. xL and xU are lower and upper bounds respectively. In the literature, several optimization algorithms have been presented. For example, MMA (Method of moving asymptotes)¹ supports arbitrary nonlinear inequality constraints, (COBYLA) Constrained Optimization BY Linear Approximation², (ORIG_DRIECT) DIRECT algorithm³. Optimization algorithms that also support nonlinear equality constraints include ISRES (Improved Stochastic Ranking Evolution Strategy)⁴, (AUGLAG) Augmented Lagrangian Algorithm⁵. A full list of such methods can be found on nlopt C++ reference page at . nloptr uses one of these methods to solve the given optimization problem.

“MMA (Method of moving asymptotes) supports arbitrary nonlinear inequality constraints, (COBYLA) Constrained Optimization BY Linear Approximation, (ORIG_DRIECT) DIRECT algorithm. Optimization algorithms that also support nonlinear equality constraints include ISRES (Improved Stochastic Ranking Evolution Strategy), (AUGLAG) Augmented Lagrangian Algorithm.” See Also Search Engine Optimization, Social Media Marketing, Web Design in the San Angelo, TX Area - Startup Texas What Does Authentication Error Occurred Mean and How to Fix it AWS Monitoring Tools and Best Practices: Monitor What Matters How to Use H1 Tags in 2021 (With Examples) - Granwehr

In the rest of the article, I provide several examples of solving a constraint optimization problem using R. I personally use R Studio that combines R compiler and editor. R Studio also provides knitr tool which is great for writing documentation or articles with inline code which can also generate a latex source code and a pdf file. Most of the example presented here has been modified from test suites used to validate functions in nloptr R package.

Installation of nloptr in R is fairly straightforward.

In the first example, we will minimize the Rosenbrock Banana function

How to solve a constraint optimization problem in R (3)

whose gradient is given by

How to solve a constraint optimization problem in R (4)

However, not all the algorithms in nlopt require explicit gradient as we will see in further examples. Let’s define the objective function and its gradient first:

We will also need initial values of optimizers:

Before we run the minimization procedure, we need to specify which algorithm we will use. That can be done as follows:

Here, we will use the L-BFGS algorithm. Now we are ready to run the optimization procedure.

We can see the result by typing

The function is optimized at (1,1) which is the ground truth. Check yourself by running the code in R Studio.

The problem to minimize is

How to solve a constraint optimization problem in R (5)

with a1= 2, b1 = 0, a2 = −1, and b2 = 1. We re-arrange the constraints to have the form g(x) ≤ 0:

How to solve a constraint optimization problem in R (6)

First, define the objective function

and constraints are

Define parameters

Now solve using NLOPT_LN_COBYLA without gradient information

We want to solve the following constraint optimization problem

How to solve a constraint optimization problem in R (7)

subject to constraints

How to solve a constraint optimization problem in R (8)

For this example, the optimal solution is achieved at (1.00000000, 4.74299963, 3.82114998, 1.37940829).

We will also need to define options for optimizations

We use NL_OPT_LD_MMA for local optimization and NL_OPT_GN_ISRES for overall optimization. You can set the tolerance to really low to get the best result. The number of iterations is set using maxeval. Setting tolerance to really low or the number of iterations to very high may result in the best approximation at the cost of increased computation time. Finally, we optimize

In my case, the result came out to be (1 4.768461 3.78758 1.384204) which is fairly close to the ground truth.

Our objective function in this case is

How to solve a constraint optimization problem in R (9)

with bounds on variables as

How to solve a constraint optimization problem in R (11)

For this problem, the optimal solution is reached at (1, 1). Let’s write the code now.

Finally, define options for nloptr as follows:

and then perform the optimization

With the specified tolerance and the number of iteration, I was able to achieve the optimal solution of (1, 1).

While I didn’t present the examples with multiple equality constraints, they are very similar to Example 4. However, be sure to select the optimization algorithm as NLOPT_GN_ISRES.

  • K. Svanberg, The method of moving asymptotes — a new method for structural optimization, International Journal for Numerical Methods in Engineering, 1987, 24, 359–373.
  • Powell MJD (1994) Advances in Optimization and Numerical Analysis, Kluwer Academic, Dordrecht, A direct search optimization method that models the objective and constraint functions by linear interpolation, pp 51–67.
  • Thomas P. Runarsson and Xin Yao, “Stochastic ranking for constrained evolutionary optimization,” IEEE Trans. Evolutionary Computation, vol. 4 (no. 3), pp. 284–294 (2000).

If this article benefits you, please use the following citations for referencing my work:

How do you solve a constrained optimization problem? ›

Constraint optimization can be solved by branch-and-bound algorithms . These are backtracking algorithms storing the cost of the best solution found during execution and using it to avoid part of the search.

Constrained optimization problems are problems for which a function is to be minimized or maximized subject to constraints . Here is called the objective function and is a Boolean-valued formula.

To define a constraint, you first compute the value of interest using the decision variables. Then you place an appropriate limit (<=, = or >=) on this computed value . The following examples illustrate a variety of types of constraints that commonly occur in optimization problems.

  • Step 1 - Identify the decision variables. ...
  • Step 2 - Write the objective function. ...
  • Step 3 - Identify Set of Constraints. ...
  • Step 4 - Choose the method for solving the linear programming problem. ...
  • Step 5 - Construct the graph. ...
  • Step 6 - Identify the feasible region.

The Sequential Quadratic Programming (SQP) method is used to solve the constrained optimization problem. This method defines the objective function and the constraints as nonlinear functions of the design parameters.

Constrained Optimization Method In the simplest case, this means solving problems in which one seeks to minimize or maximize a real function by systematically choosing the values of real or integer variables from within an allowed set .

Every optimization problem has three components: an objective function, decision variables, and constraints . When one talks about formulating an optimization problem, it means translating a “real-world” problem into the mathematical equations and variables which comprise these three components.

optimization problems. Unconstrained simply means that the choice variable can take on any value—there are no restrictions. Constrained means that the choice variable can only take on certain values within a larger range.

The value function of an optimization problem gives the value attained by the objective function at a solution, while only depending on the parameters of the problem .

The method of Lagrange multipliers is used to solve constrained minimization problems of the following form: minimize Φ(x) subject to the constraint C(x) = 0 . It can be derived as follows: The constraint equation defines a surface. The solution, say x 0 , must lie on this surface.

How does constraint programming work? ›

In constraint programming, a problem is viewed as a series of limitations on what could possibly be a valid solution . This paradigm can be applied to effectively solve a group of problems that can be translated to variables and constraints or represented as a mathematic equation.

The Constraint Equation is an equation representing any constraints that you are given in the problem . Note: There may not always be a constraint in the problem. This may imply that the objective equation is already in one variable.

The simplex method is one of the most popular methods to solve linear programming problems. It is an iterative process to get the feasible optimal solution. In this method, the value of the basic variable keeps transforming to obtain the maximum value for the objective function.

  • Well, you must read the text well and identify three things :
  • 1) The linear function that has to be maximized/minimized.
  • 2) The variables, those occur in the linear function of 1)
  • 3) The constraints are also a linear function of the variables,
  • and that function has to be ≥ or ≤ a number.

Because of The Divisibility Assumption . The Divisibility Assumption requires that each decision variable is allowed to assume fractional values. For example, the Divisibility Assumption implies that it is acceptable to produce 1.5 or 1.63 of a product or service.

In a constraint optimization problem, the objective function is factored into a set of soft constraints. A soft constraint has a scope that is a set of variables. The soft constraint is a function from the domains of the variables in its scope into a real number, a cost .

Find the Constraints - YouTube

The Lagrange multiplier technique is how we take advantage of the observation made in the last video, that the solution to a constrained optimization problem occurs when the contour lines of the function being maximized are tangent to the constraint curve .

A constraint function can be transformed into a different form that is equivalent to the original function ; that is, the constraint boundary and the feasible set for the problem do not change but the form of the function changes.

Geometric programming is a technique whereby objective and inequality constraints expressed as posynomials and equality constraints as monomials can be transformed into a convex program.

What is constrained optimization in project management? ›

A grouping of methods which use mathematical algorithms to assist in selecting projects . Constrained optimization methods include: linear programming, non-linear programming, integer programming and multi-objective programming.

  • Linear Programming. Interior point methods for semi-infinite programming calculations. ...
  • Nonlinear Programming. Numerical experience with limited-memory quasi-Newton and truncated Newton methods. ...
  • Combinatorial Optimization. ...
  • Network Optimization. ...
  • Multi-Criteria Optimization. ...
  • Optimal Control. ...
  • Large Scale Optimization.
  • Linear and Quadratic Programming Problems.
  • Quadratic Constraints and Conic Optimization Problems.
  • Integer and Constraint Programming Problems.
  • Smooth Nonlinear Optimization Problems.
  • Nonsmooth Optimization Problems.

There are two distinct types of optimization algorithms widely used today. (a) Deterministic Algorithms. They use specific rules for moving one solution to other. These algorithms are in use to suite some times and have been successfully applied for many engineering design problems.

A single variable optimization problem is the mathematical programming problem in which only one variable in involved . And, the value x is equal to x star is to be found in the interval a to b which minimize the function f (x).

Within this concept, it can further be distinguished between unconstrained and constrained motion design. They only differ in the fact that additional constraints are applied onto the motion .

Multivariable optimization: basic concepts. and properties. • Absolute maximum/absolute minimum (also called global max/min): Specify a region R contained in the domain of the function f. If the value at (a, b) is bigger than or equal to the value at any other point in R, then f(a, b) is called the global maximum .

Econ - Solving a Lagrangian Part 1 - YouTube

The VALUE function in Excel gives the value of a text representing a number. For example, if we have a text as $5, this is a number format in a text . Therefore, using the VALUE formula on this data will give us 5. So, we can see how this function gives us the numerical value represented by a text in Excel.

  • Determine the objective function f(x,y) and the constraint function g(x,y). ...
  • Set up a system of equations using the following template: ⇀∇f(x0,y0)=λ⇀∇g(x0,y0)g(x0,y0)=0.
  • Solve for x0 and y0.

In solving a constrained optimization problem, such as the OPF, there are two general classes of constraints, equality and inequality. Equality constraints are constraints that always have to be enforced . That is, they are always "binding".

  • Time Value of Money.
  • Present Value.
  • Future Value.
  • Present Value & Future Value Relationship.
  • initiation.
  • monitoring and control.

How to Use Lagrange Multipliers with Two Constraints Calculus 3

Lagrange multipliers are used in multivariable calculus to find maxima and minima of a function subject to constraints (like "find the highest elevation along the given path" or "minimize the cost of materials for a box enclosing a given volume").

How do you form a Lagrangian function? ›

The Lagrangian function is then defined as L(x1,x2,λ) = f(x1,x2) − λ[g(x1,x2) − c] . The Lagrangian equals the objective function f(x1,x2) minus the La- grange mulitiplicator λ multiplied by the constraint (rewritten such that the right-hand side equals zero). It is a function of three variables, x1, x2 and λ.

  • A NOT NULL constraint is a rule that prevents null values from being entered into one or more columns within a table.
  • A unique constraint (also referred to as a unique key constraint) is a rule that forbids duplicate values in one or more columns within a table.

These solutions are defined by a set of mathematical con- straints—mathematical inequalities or equalities. Constrained optimization models have three major components: decision variables, objective function , and constraints.

7 Reasons Why Your Emails Go To Spam (With Solutions)

17 Best Free & Premium Grammarly Alternatives

Therapy Medical Physics Position in Des Moines, IA for MercyOne Des Moines Cancer Center

Mayo Clinic Board of Trustees approves plans to transform healthcare, improve experience for staff and patients, redesign Rochester campus - Mayo Clinic News Network

Divinity: Original Sin 2: 15 Pro Tips For Making A Necromancer Build

The 25 best Christmas films – ranked!

Author : Domingo Moore

Last Updated : 19/01/2024

Views : 6025

Rating : 4.2 / 5 (73 voted)

Reviews : 80% of readers found this page helpful

Name : Domingo Moore

Birthday : 1997-05-20

Address : 6485 Kohler Route, Antonioton, VT 77375-0299

Phone : +3213869077934

Job : Sales Analyst

Hobby : Kayaking, Roller skating, Cabaret, Rugby, Homebrewing, Creative writing, amateur radio

Introduction : My name is Domingo Moore, I am a attractive, gorgeous, funny, jolly, spotless, nice, fantastic person who loves writing and wants to share my knowledge and understanding with you.

Without advertising income, we can't keep making this site awesome for you.

Solve an Optimization Problem


Solve a given optimization problem. This function uses the given solver (or searches for an appropriate solver) to solve the supplied optimization problem.

a list containing the solution and a message from the solver.

solutionthe vector of optimal coefficients

objvalthe value of the objective function at the optimum

statusa list giving the status code and message form the solver. The status code is 0 on success (no error occurred) 1 otherwise.

messagea list giving the original message provided by the solver.

Stefan Theussl

Theussl S, Schwendinger F, Hornik K (2020). 'ROI: An Extensible R Optimization Infrastructure.' Journal of Statistical Software_, *94*(15), 1-64. doi: 10.18637/jss.v094.i15 (URL:

Purdue University Graduate School


Matrix decompositions play a pivotal role in matrix computation and applications. While general dense matrix-vector multiplications and linear equation solvers are prohibitively expensive, matrix decompositions offer fast alternatives for matrices meeting specific properties. This dissertation delves into my contributions to two fast matrix multiplication algorithms and one fast linear equation solver algorithm tailored for certain matrices and applications, all based on efficient matrix decompositions. Fast dimensionality reduction methods in spectral clustering, based on efficient eigen-decompositions, are also explored.

The first matrix decomposition introduced is the "kernel-independent" interpolative decomposition butterfly factorization (IDBF), acting as a data-sparse approximation for matrices adhering to a complementary low-rank property. Constructible in $O(N\log N)$ operations for an $N \times N$ matrix via hierarchical interpolative decompositions (IDs), the IDBF results in a product of $O(\log N)$ sparse matrices, each with $O(N)$ non-zero entries. This factorization facilitates rapid matrix-vector multiplication in $O(N \log N)$ operations, making it a versatile framework applicable to various scenarios like special function transformation, Fourier integral operators, and high-frequency wave computation.

The second matrix decomposition accelerates matrix-vector multiplication for computing multi-dimensional Jacobi polynomial transforms. Leveraging the observation that solutions to Jacobi's differential equation can be represented through non-oscillatory phase and amplitude functions, the corresponding matrix is expressed as the Hadamard product of a numerically low-rank matrix and a multi-dimensional discrete Fourier transform (DFT) matrix. This approach utilizes $r^d$ fast Fourier transforms (FFTs), where $r = O(\log n / \log \log n)$ and $d$ is the dimension, resulting in an almost optimal algorithm for computing the multidimensional Jacobi polynomial transform.

An efficient numerical method is developed based on a matrix decomposition, Hierarchical Interpolative Factorization, for solving modified Poisson-Boltzmann (MPB) equations. Addressing the computational bottleneck of evaluating Green's function in the MPB solver, the proposed method achieves linear scaling by combining selected inversion and hierarchical interpolative factorization. This innovation significantly reduces the computational cost associated with solving MPB equations, particularly in the evaluation of Green's function.

Finally, eigen-decomposition methods, including the block Chebyshev-Davidson method and Orthogonalization-Free methods, are proposed for dimensionality reduction in spectral clustering. By leveraging well-known spectrum bounds of a Laplacian matrix, the Chebyshev-Davidson methods allow dimensionality reduction without the need for spectrum bounds estimation. And instead of the vanilla Chebyshev-Davidson method, it is better to use the block Chebyshev-Davidson method with an inner-outer restart technique to reduce total CPU time and a progressive polynomial filter to take advantage of suitable initial vectors when available, for example, in the streaming graph scenario. Theoretically, the Orthogonalization-Free method constructs a unitary isomorphic space to the eigenspace or a space weighting the eigenspace, solving optimization problems through Gradient Descent with Momentum Acceleration based on Conjugate Gradient and Line Search for optimal step sizes. Numerical results indicate that the eigenspace and the weighted eigenspace are equivalent in clustering performance, and scalable parallel versions of the block Chebyshev-Davidson method and OFM are developed to enhance efficiency in parallel computing.

Degree Type

  • Doctor of Philosophy
  • Mathematics

Campus location

  • West Lafayette

Advisor/Supervisor/Committee Chair

Advisor/supervisor/committee co-chair, additional committee member 2, additional committee member 3, usage metrics.

  • Numerical solution of differential and integral equations
  • Numerical and computational mathematics not elsewhere classified

CC BY 4.0

Thank you for visiting You are using a browser version with limited support for CSS. To obtain the best experience, we recommend you use a more up to date browser (or turn off compatibility mode in Internet Explorer). In the meantime, to ensure continued support, we are displaying the site without styles and JavaScript.

  • View all journals
  • Explore content
  • About the journal
  • Publish with us
  • Sign up for alerts
  • Published: 14 December 2023

Mathematical discoveries from program search with large language models

  • Bernardino Romera-Paredes   ORCID: 1   na1 ,
  • Mohammadamin Barekatain   ORCID: 1   na1 ,
  • Alexander Novikov 1   na1 ,
  • Matej Balog   ORCID: 1   na1 ,
  • M. Pawan Kumar 1   na1 ,
  • Emilien Dupont 1   na1 ,
  • Francisco J. R. Ruiz   ORCID: 1   na1 ,
  • Jordan S. Ellenberg 2   na1 ,
  • Pengming Wang   ORCID: 1 ,
  • Omar Fawzi 3 ,
  • Pushmeet Kohli   ORCID: 1 &
  • Alhussein Fawzi   ORCID: 1   na1  

Nature ( 2023 ) Cite this article

46k Accesses

831 Altmetric

Metrics details

We are providing an unedited version of this manuscript to give early access to its findings. Before final publication, the manuscript will undergo further editing. Please note there may be errors present which affect the content, and all legal disclaimers apply.

  • Computer science
  • Pure mathematics

Large Language Models (LLMs) have demonstrated tremendous capabilities in solving complex tasks, from quantitative reasoning to understanding natural language. However, LLMs sometimes suffer from confabulations (or hallucinations) which can result in them making plausible but incorrect statements [1,2]. This hinders the use of current large models in scientific discovery. Here we introduce FunSearch (short for search ing in the fun ction space), an evolutionary procedure based on pairing a pre-trained LLM with a systematic evaluator. We demonstrate the effectiveness of this approach to surpass the best known results in important problems, pushing the boundary of existing LLM-based approaches [3]. Applying FunSearch to a central problem in extremal combinatorics — the cap set problem — we discover new constructions of large cap sets going beyond the best known ones, both in finite dimensional and asymptotic cases. This represents the first discoveries made for established open problems using LLMs. We showcase the generality of FunSearch by applying it to an algorithmic problem, online bin packing, finding new heuristics that improve upon widely used baselines. In contrast to most computer search approaches, FunSearch searches for programs that describe how to solve a problem, rather than what the solution is. Beyond being an effective and scalable strategy, discovered programs tend to be more interpretable than raw solutions, enabling feedback loops between domain experts and FunSearch , and the deployment of such programs in real-world applications.

You have full access to this article via your institution.

Author information

These authors contributed equally: Bernardino Romera-Paredes, Mohammadamin Barekatain, Alexander Novikov, Matej Balog, M. Pawan Kumar, Emilien Dupont, Francisco J. R. Ruiz, Alhussein Fawzi

Authors and Affiliations

Google DeepMind, London, UK

Bernardino Romera-Paredes, Mohammadamin Barekatain, Alexander Novikov, Matej Balog, M. Pawan Kumar, Emilien Dupont, Francisco J. R. Ruiz, Pengming Wang, Pushmeet Kohli & Alhussein Fawzi

University of Wisconsin-Madison, Madison, Wisconsin, USA

Jordan S. Ellenberg

Université de Lyon (Inria, ENS Lyon, UCBL, LIP), Lyon, France

You can also search for this author in PubMed   Google Scholar

Corresponding author

Correspondence to Alhussein Fawzi .

Supplementary information

Supplementary information.

Additional details about the method and additional results.

Supplementary Data

This zipped code file contains (a) The evolutionary algorithm, code manipulation routines, and a single-threaded implementation of the FunSearch pipeline; and (b) output functions of interest produced by FunSearch.

Rights and permissions

Reprints and Permissions

About this article

Cite this article.

Romera-Paredes, B., Barekatain, M., Novikov, A. et al. Mathematical discoveries from program search with large language models. Nature (2023).

Download citation

Received : 12 August 2023

Accepted : 30 November 2023

Published : 14 December 2023


Share this article

Anyone you share the following link with will be able to read this content:

Sorry, a shareable link is not currently available for this article.

Provided by the Springer Nature SharedIt content-sharing initiative

By submitting a comment you agree to abide by our Terms and Community Guidelines . If you find something abusive or that does not comply with our terms or guidelines please flag it as inappropriate.

Quick links

  • Explore articles by subject
  • Guide to authors
  • Editorial policies

Sign up for the Nature Briefing newsletter — what matters in science, free to your inbox daily.

solving optimization problems in r

Suggestions or feedback?

MIT News | Massachusetts Institute of Technology

  • Machine learning
  • Social justice
  • Black holes
  • Classes and programs


  • Aeronautics and Astronautics
  • Brain and Cognitive Sciences
  • Architecture
  • Political Science
  • Mechanical Engineering

Centers, Labs, & Programs

  • Abdul Latif Jameel Poverty Action Lab (J-PAL)
  • Picower Institute for Learning and Memory
  • Lincoln Laboratory
  • School of Architecture + Planning
  • School of Engineering
  • School of Humanities, Arts, and Social Sciences
  • Sloan School of Management
  • School of Science
  • MIT Schwarzman College of Computing

AI accelerates problem-solving in complex scenarios

Press contact :.

A stylized Earth has undulating, glowing teal pathways leading everywhere.

Previous image Next image

While Santa Claus may have a magical sleigh and nine plucky reindeer to help him deliver presents, for companies like FedEx, the optimization problem of efficiently routing holiday packages is so complicated that they often employ specialized software to find a solution.

This software, called a mixed-integer linear programming (MILP) solver, splits a massive optimization problem into smaller pieces and uses generic algorithms to try and find the best solution. However, the solver could take hours — or even days — to arrive at a solution.

The process is so onerous that a company often must stop the software partway through, accepting a solution that is not ideal but the best that could be generated in a set amount of time.

Researchers from MIT and ETH Zurich used machine learning to speed things up.

They identified a key intermediate step in MILP solvers that has so many potential solutions it takes an enormous amount of time to unravel, which slows the entire process. The researchers employed a filtering technique to simplify this step, then used machine learning to find the optimal solution for a specific type of problem.

Their data-driven approach enables a company to use its own data to tailor a general-purpose MILP solver to the problem at hand.

This new technique sped up MILP solvers between 30 and 70 percent, without any drop in accuracy. One could use this method to obtain an optimal solution more quickly or, for especially complex problems, a better solution in a tractable amount of time.

This approach could be used wherever MILP solvers are employed, such as by ride-hailing services, electric grid operators, vaccination distributors, or any entity faced with a thorny resource-allocation problem.

“Sometimes, in a field like optimization, it is very common for folks to think of solutions as either purely machine learning or purely classical. I am a firm believer that we want to get the best of both worlds, and this is a really strong instantiation of that hybrid approach,” says senior author Cathy Wu, the Gilbert W. Winslow Career Development Assistant Professor in Civil and Environmental Engineering (CEE), and a member of a member of the Laboratory for Information and Decision Systems (LIDS) and the Institute for Data, Systems, and Society (IDSS).

Wu wrote the paper with co-lead authors Sirui Li, an IDSS graduate student, and Wenbin Ouyang, a CEE graduate student; as well as Max Paulus, a graduate student at ETH Zurich. The research will be presented at the Conference on Neural Information Processing Systems.

Tough to solve

MILP problems have an exponential number of potential solutions. For instance, say a traveling salesperson wants to find the shortest path to visit several cities and then return to their city of origin. If there are many cities which could be visited in any order, the number of potential solutions might be greater than the number of atoms in the universe.  

“These problems are called NP-hard, which means it is very unlikely there is an efficient algorithm to solve them. When the problem is big enough, we can only hope to achieve some suboptimal performance,” Wu explains.

An MILP solver employs an array of techniques and practical tricks that can achieve reasonable solutions in a tractable amount of time.

A typical solver uses a divide-and-conquer approach, first splitting the space of potential solutions into smaller pieces with a technique called branching. Then, the solver employs a technique called cutting to tighten up these smaller pieces so they can be searched faster.

Cutting uses a set of rules that tighten the search space without removing any feasible solutions. These rules are generated by a few dozen algorithms, known as separators, that have been created for different kinds of MILP problems. 

Wu and her team found that the process of identifying the ideal combination of separator algorithms to use is, in itself, a problem with an exponential number of solutions.

“Separator management is a core part of every solver, but this is an underappreciated aspect of the problem space. One of the contributions of this work is identifying the problem of separator management as a machine learning task to begin with,” she says.

Shrinking the solution space

She and her collaborators devised a filtering mechanism that reduces this separator search space from more than 130,000 potential combinations to around 20 options. This filtering mechanism draws on the principle of diminishing marginal returns, which says that the most benefit would come from a small set of algorithms, and adding additional algorithms won’t bring much extra improvement.

Then they use a machine-learning model to pick the best combination of algorithms from among the 20 remaining options.

This model is trained with a dataset specific to the user’s optimization problem, so it learns to choose algorithms that best suit the user’s particular task. Since a company like FedEx has solved routing problems many times before, using real data gleaned from past experience should lead to better solutions than starting from scratch each time.

The model’s iterative learning process, known as contextual bandits, a form of reinforcement learning, involves picking a potential solution, getting feedback on how good it was, and then trying again to find a better solution.

This data-driven approach accelerated MILP solvers between 30 and 70 percent without any drop in accuracy. Moreover, the speedup was similar when they applied it to a simpler, open-source solver and a more powerful, commercial solver.

In the future, Wu and her collaborators want to apply this approach to even more complex MILP problems, where gathering labeled data to train the model could be especially challenging. Perhaps they can train the model on a smaller dataset and then tweak it to tackle a much larger optimization problem, she says. The researchers are also interested in interpreting the learned model to better understand the effectiveness of different separator algorithms.

This research is supported, in part, by Mathworks, the National Science Foundation (NSF), the MIT Amazon Science Hub, and MIT’s Research Support Committee.

Share this news article on:

Related links.

  • Project website
  • Laboratory for Information and Decision Systems
  • Institute for Data, Systems, and Society
  • Department of Civil and Environmental Engineering

Related Topics

  • Computer science and technology
  • Artificial intelligence
  • Laboratory for Information and Decision Systems (LIDS)
  • Civil and environmental engineering
  • National Science Foundation (NSF)

Related Articles

Illustration of a blue car next to a larger-than-life smartphone showing a city map. Both are seen with a city in the background.

Machine learning speeds up vehicle routing

Headshot photo of Cathy Wu, who is standing in front of a bookcase.

Q&A: Cathy Wu on developing algorithms to safely integrate robots into our world

“What this study shows is that rather than shut down nuclear plants, you can operate them in a way that makes room for renewables,” says MIT Energy Initiative researcher Jesse Jenkins. “It shows that flexible nuclear plants can play much better with variable renewables than many people think, which might lead to reevaluations of the role of these two resources together.”

Keeping the balance: How flexible nuclear operation can help add more wind and solar to the grid

Previous item Next item

More MIT News

Two rows of four images show mouse brain tissue stained in various colors to denote the presence of certain molecules. There is much more colorful staining in the top row than in the bottom.

Nanoparticle-delivered RNA reduces neuroinflammation in lab tests

Read full story →

Diogo da Silva Branco Magalhães poses with plants in the background

“MIT can give you ‘superpowers’”

3 by 6 grid of photos. Rows depict tennis rackets, measuring tape/rulers, and hammers. Along the bottom are time measurements from 17 milliseconds to 10 seconds, and the objects are increasingly harder to recognize from left to right.

Image recognition accuracy: An unseen challenge confounding today’s AI

A bearded man outside in an open-collar fleece pullover regards the camera with a faint smile

Philip Erickson named director of MIT Haystack Observatory

3 renderings of molecules are placed on the peaks of stylized bell curves. The 3 molecules look similar, but the left structure has a section made of glowing white pieces, alluding to a reaction.

Computational model captures the elusive transition states of chemical reactions

Approximately 40 people pose on a stage, under a huge screen displaying two portraits

AI meets climate: MIT Energy and Climate Hack 2023

  • More news on MIT News homepage →

Massachusetts Institute of Technology 77 Massachusetts Avenue, Cambridge, MA, USA

  • Map (opens in new window)
  • Events (opens in new window)
  • People (opens in new window)
  • Careers (opens in new window)
  • Accessibility
  • Social Media Hub
  • MIT on Facebook
  • MIT on YouTube
  • MIT on Instagram


  1. optimization

    solving optimization problems in r

  2. Solving Optimization Problems in 5 Steps EXPLAINED with Examples

    solving optimization problems in r

  3. Solving quadratic optimization problems with complex constraints in R

    solving optimization problems in r

  4. How to solve a constraint optimization problem in R

    solving optimization problems in r

  5. 6 Optimization

    solving optimization problems in r

  6. Solved (5) Consider the optimization problem in R2:

    solving optimization problems in r


  1. Day 2. Regular session

  2. 5.11: solving optimization problems

  3. 5.11 Solving Optimization Problems

  4. Deep Reinforcement Learning in Supply Chain Optimizations

  5. 5 11 Solving Optimization Problems



  1. How to solve a constraint optimization problem in R

    Jan 8, 2021 3 Image by the author using the function f = (Z⁴-1)³ where Z is a complex number Introduction Often in physical science research, we end up with a hard problem of optimizing a function (called objective) that needs to satisfy a range of constraints — linear or non-linear equalities and inequalities.

  2. 14.5 Using R to solve Linear Optimization

    The most difficult part about using R to solve a linear optimization problem is to translate the optimization problem into code. Let's reproduce the table with all the necessary information for the example of Farmer Jean: Here's how you translate it into code.

  3. CRAN Task View: Optimization and Mathematical Programming

    The R Optimization Infrastructure () package provides a framework for handling optimization problems in R. It uses an object-oriented approach to define and solve various optimization tasks from different problem classes (e.g., linear, quadratic, non-linear programming problems).

  4. PDF Modeling and Solving Linear Programming with R

    solvers in R. chapter 3 includes ten optimization problems solvable by linear pro-gramming. Each of the problems is presented with the following struc-ture: after presenting the problem, a solution through linear program-ming is offered. Then we show how to solve the problem in R. There are several ways to parse a problem into a R solver.

  5. R: Solve Linear Programming / Optimization Problems

    Solve Linear Programming / Optimization Problems Description Minimizes (or maximizes) c'x c′x, subject to A x <= b Ax <= b and x >= 0 x >= 0 . Note that the inequality signs <= of the individual linear constraints in A x <= b Ax <= b can be changed with argument const.dir . Usage

  6. CRAN Task View: Optimization and Mathematical Programming

    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: Multivariate, SocialSciences, Robustamong others. The focus of this task view is on

  7. Linear optimization using R

    Linear optimization using R, in this tutorial we are going to discuss the linear optimization problems in R. Optimization is everything nowadays. We all have finite resources and time and we want to make the maximum profit out of that.

  8. Linear programming in R

    Linear programming is a technique to solve optimization problems whose constraints and outcome are represented by linear relationships. Simply put, linear programming allows to solve problems of the following kind: Maximize/minimize $\hat C^T \hat X$ Under the constraint $\hat A \hat X \leq \hat B$ And the constraint $\hat X \geq 0$

  9. Mixed-integer programming

    Mixed-integer programming. Combinatorial optimization problems can be found in many places: finding the optimal seating plan for you and your coworkers, designing a conference schedule or setting up facilities in an emergency situation. Many of these real world optimization problems can be naturally formulated as a special class of problems ...

  10. PDF linprog: Linear Programming / Optimization

    dualStatus numeric. Return code from solving the dual problem (only if argument solve.dual is TRUE). maximum logical. Indicates whether the objective function was maximized or minimized. Tab final 'Tableau' of the Simplex algorith. lpSolve logical. Has the package 'lpSolve' been used to solve the LP problem. solve.dual logical ...

  11. R: Solve a Constrained Optimization Problem

    Solve a Constrained Optimization Problem Description Solve a constrained optimization problem with a linear, quadratic, or rational objective function, and linear, quadratic, rational, and boundary constraints. Usage solvecop (op, solver="default", make.definite=FALSE, X=NULL, quiet=FALSE, ...) Arguments Details

  12. Numerical Optimization in R: Beyond optim

    recent and useful options available for solving optimization problems, extending beyond optim. We encourage the reader to take a look at the CRAN (Comprehensive R Archive Network) task view on optimization (Theussl2014) for a comprehensive list of available packages for solving optimization problems in R. Acknowledgments

  13. Optimization in R

    A typical solution is to turn the constraint optimization problem into an unconstrained optimization problem using Lagrange multipliers. Define a new function F as follows ... F (x1, x2, …,...

  14. ROI_solve : Solve an Optimization Problem

    an optimization problem of class "OP". solver. a character vector specifying the solver to use. If missing, then the default solver returned by ROI_options is used. control. a list with additional control parameters for the solver. This is solver specific so please consult the corresponding documentation.

  15. Solving a simple linear programming problem using lpSolve in R

    In this post I show how to conduct simple linear optimization in R. You can also find other posts written by me that look at other linear optimization tasks, suchs as the transportation problem (can be solved with lp.transport), the assignment problem (can be solved with lp.assign) and integer linear programming (also linear mixed integer problems can be solved in R).

  16. How to solve simple optimization problem in R

    How to solve simple optimization problem in R Ask Question Asked 2 years, 5 months ago Modified 2 years, 5 months ago Viewed 189 times Part of R Language Collective 0 I have three equations and I would like to solve for a parameter that minimizes the differences between them.

  17. R: Constrained Optimization Problem

    Details Define a constrained optimization problem with a linear, quadratic, or rational objective function, and linear, quadratic, rational, and boundary constraints. The optimization problem can be solved with function solvecop . Value An object of class COP, which may contain the following components Author (s) Robin Wellmann See Also

  18. Solving a Linear Optimization Problem Using R Studio

    #LinearProgramming #LinearOptimization #RProgrammingA mathematical optimization model consists of an objective function and a set of constraints in the form ...

  19. Multi-Objective Optimization Model Solved using R

    Step 2 — Construct a Target vector. The target vector is the target values set to be achieved for the objectives. Here the number of elements is equal to the number of objectives. Step 3 — Construct the Achievement Data Frame which defines the achievement goals.

  20. Optimization Using R

    The optim () function in R can be used for 1- dimensional or n-dimensional problems. The general format for the optim () function is - optim (objective, constraints, bounds = NULL, types= NULL, maximum = FALSE) We start off with an example, let's define the objective function what we are looking to solve -

  21. How to solve a constraint optimization problem in R (2023)

    In the rest of the article, I provide several examples of solving a constraint optimization problem using R. I personally use R Studio that combines R compiler and editor. R Studio also provides knitr tool which is great for writing documentation or articles with inline code which can also generate a latex source code and a pdf file.

  22. R: Solve an Optimization Problem

    an optimization problem of class "OP". solver. a character vector specifying the solver to use. If missing, then the default solver returned by ROI_options is used. control. a list with additional control parameters for the solver. This is solver specific so please consult the corresponding documentation.

  23. Solving an unconstrained optimization problem in R

    In order to find the extreme point, I must be calculating the first-order derivative, set this function equal to zero and solve this equation. I know how to solve such a problem by hand but I was wondering what is the appropriate way to implement it in R. Here is a toy example:

  24. Fast Algorithms for Matrix Computation and Applications

    Theoretically, the Orthogonalization-Free method constructs a unitary isomorphic space to the eigenspace or a space weighting the eigenspace, solving optimization problems through Gradient Descent with Momentum Acceleration based on Conjugate Gradient and Line Search for optimal step sizes.

  25. Mathematical discoveries from program search with large ...

    In contrast to most computer search approaches, FunSearch searches for programs that describe how to solve a problem, rather than what the solution is. Beyond being an effective and scalable ...

  26. AI accelerates problem-solving in complex scenarios

    Researchers from MIT and ETZ Zurich have developed a new, data-driven machine-learning technique that speeds up software programs used to solve complex optimization problems that can have millions of potential solutions. Their approach could be applied to many complex logistical challenges, such as package routing, vaccine distribution, and power grid management.