Linear programming
Consider the linear programming problem below both by R and hand.
- Draw the feasible solution space.
- Solve for the optimal solution with the simplex method.
- 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=