Linear programming

Consider the linear programming problem below both by R and hand.

  1. Draw the feasible solution space.
  2. Solve for the optimal solution with the simplex method.
  3. Solve for the optimal solution using R.

Maximize

                    Z = 12 X1 + 15X2      

Subject to

                   4X1 +  3X2  ≤  12
                   
                   2X1  + 5X2  ≤  10
                   
                   X1  ≥ 0   
                   
                   X2 ≥  0 
                   
library(lpSolve)

# Define the objective function coefficients
objective.coef <- c(12, 15)

# Define the constraints
const.mat <- matrix(c(4, 2, 3, 5), nrow = 2, byrow = TRUE)
const.rhs <- c(12, 10)
const.dir <- c("<=", "<=")

# Solve the problem
lp.solution <- lp(direction = "max", objective.in = objective.coef, 
                  const.mat = const.mat, const.dir = const.dir, const.rhs = const.rhs, 
                  all.int = FALSE)

# Check if the solution is found
if (lp.solution$status == 0) {
    # Output the optimal values of X1 and X2
    optimal.values <- lp.solution$solution
    cat("Optimal values:\n")
    cat("X1 =", optimal.values[1], "\n")
    cat("X2 =", optimal.values[2], "\n")
    
    # Output the maximum value of Z
    max.Z <- sum(optimal.values * objective.coef)
    cat("Maximum value of Z =", max.Z, "\n")
} else {
    cat("Solution not found or infeasible problem.")
}
Optimal values:
X1 = 2.857143 
X2 = 0.2857143 
Maximum value of Z = 38.57143 
LS0tCnRpdGxlOiAiTkZTQ0kgMzEwIENvbXB1dGF0aW9uIGluIEluZm9ybWF0aW9uIFNjaWVuY2VIb21ld29yayA1IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCiMjIyAgTGluZWFyIHByb2dyYW1taW5nIAoKQ29uc2lkZXIgdGhlIGxpbmVhciBwcm9ncmFtbWluZyBwcm9ibGVtIGJlbG93IGJvdGggYnkgUiBhbmQgaGFuZC4KCgooYSkgRHJhdyB0aGUgZmVhc2libGUgc29sdXRpb24gc3BhY2UuIAooYikgU29sdmUgZm9yIHRoZSBvcHRpbWFsIHNvbHV0aW9uIHdpdGggdGhlIHNpbXBsZXggbWV0aG9kLiAKKGMpIFNvbHZlIGZvciB0aGUgb3B0aW1hbCBzb2x1dGlvbiB1c2luZyBSLgoKTWF4aW1pemUgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBaID0gMTIgWDEgKyAxNVgyICAgICAgClN1YmplY3QgdG8gICAgCgogICAgICAgICAgICAgICAgICAgICAgIDRYMSArICAzWDIgIOKJpCAgMTIKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAyWDEgICsgNVgyICDiiaQgIDEwCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgWDEgIOKJpSAwICAgCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgWDIg4omlICAwIAogICAgICAgICAgICAgICAgICAgICAgIApgYGB7cn0KbGlicmFyeShscFNvbHZlKQoKIyBEZWZpbmUgdGhlIG9iamVjdGl2ZSBmdW5jdGlvbiBjb2VmZmljaWVudHMKb2JqZWN0aXZlLmNvZWYgPC0gYygxMiwgMTUpCgojIERlZmluZSB0aGUgY29uc3RyYWludHMKY29uc3QubWF0IDwtIG1hdHJpeChjKDQsIDIsIDMsIDUpLCBucm93ID0gMiwgYnlyb3cgPSBUUlVFKQpjb25zdC5yaHMgPC0gYygxMiwgMTApCmNvbnN0LmRpciA8LSBjKCI8PSIsICI8PSIpCgojIFNvbHZlIHRoZSBwcm9ibGVtCmxwLnNvbHV0aW9uIDwtIGxwKGRpcmVjdGlvbiA9ICJtYXgiLCBvYmplY3RpdmUuaW4gPSBvYmplY3RpdmUuY29lZiwgCiAgICAgICAgICAgICAgICAgIGNvbnN0Lm1hdCA9IGNvbnN0Lm1hdCwgY29uc3QuZGlyID0gY29uc3QuZGlyLCBjb25zdC5yaHMgPSBjb25zdC5yaHMsIAogICAgICAgICAgICAgICAgICBhbGwuaW50ID0gRkFMU0UpCgojIENoZWNrIGlmIHRoZSBzb2x1dGlvbiBpcyBmb3VuZAppZiAobHAuc29sdXRpb24kc3RhdHVzID09IDApIHsKICAgICMgT3V0cHV0IHRoZSBvcHRpbWFsIHZhbHVlcyBvZiBYMSBhbmQgWDIKICAgIG9wdGltYWwudmFsdWVzIDwtIGxwLnNvbHV0aW9uJHNvbHV0aW9uCiAgICBjYXQoIk9wdGltYWwgdmFsdWVzOlxuIikKICAgIGNhdCgiWDEgPSIsIG9wdGltYWwudmFsdWVzWzFdLCAiXG4iKQogICAgY2F0KCJYMiA9Iiwgb3B0aW1hbC52YWx1ZXNbMl0sICJcbiIpCiAgICAKICAgICMgT3V0cHV0IHRoZSBtYXhpbXVtIHZhbHVlIG9mIFoKICAgIG1heC5aIDwtIHN1bShvcHRpbWFsLnZhbHVlcyAqIG9iamVjdGl2ZS5jb2VmKQogICAgY2F0KCJNYXhpbXVtIHZhbHVlIG9mIFogPSIsIG1heC5aLCAiXG4iKQp9IGVsc2UgewogICAgY2F0KCJTb2x1dGlvbiBub3QgZm91bmQgb3IgaW5mZWFzaWJsZSBwcm9ibGVtLiIpCn0KCmBgYAo=