Using integer programming in R to optimize cargo loads

[This article was first published on Revolutions, 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 mathematical technique used to find the values of some variables (within the bounds of some defined constraints) to find the maximum value of a quantity. For example, consider this problem from the FishyOperations blog

A trading company is looking for a way to maximize profit per transportation of their goods. The company has a train available with 3 wagons. When stocking the wagons they can choose between 4 types of cargo, each with its own specifications. How much of each cargo type should be loaded on which wagon in order to maximize profit?

The quantity we want to optimize here is profit. The variables to consider are the cargo items selected to fill the wagons, each of which has its own volume and profit per tonne (and quantities aren't unlimited, either). The constraints are the weight and space capacities of the three wagons.

In actual fact, this is a mixed-integer linear programming problem: the cargo comes only in one-tonne lots, and can't be divided into fractional parts. Integer programming problems are notoriously difficult to solve, but the R package lpSolveAPI makes it easy with an R language interface to lp_solve, a powerful (and free!) mixed-integer program solver. (You can find a good overview to the lpSolveAPI package in this vignette.) Simply by defining the constraints in an R language script (for example, that the total cargo weight in wagon 1 can't exceed 5000 tonnes), the solve function finds the optimal solution to the model (expressed graphically below):

Cargo solution

The maximum profit of $107,500 comes from shipping 5 tonnes of Cargo 2 and Cargo 3 in wagon 1, 8 tonnes of Cargo 4 in wagon 2, and 12 tonnes of Cargo 4 in wagon 3 (and not shipping any of Cargo 1 at all).

For more details of how the lpSolveAPI package can be used to solve mixed-integer linear programming problems (including the R script implementing this example), see the full blog post linked below.

Fishy Operations: Linear programming in R: an lpSolveAPI example (via Vadim Y. Bichutskiy)

To leave a comment for the author, please follow the link and comment on their blog: Revolutions. 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.

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

Click here to close (This popup will not appear again)