This function will optimize the linear function a%*%x
subject
to the constraints A1%*%x <= b1
, A2%*%x >= b2
,
A3%*%x = b3
and x >= 0
. Either maximization or
minimization is possible but the default is minimization.
simplex(a, A1 = NULL, b1 = NULL, A2 = NULL, b2 = NULL, A3 = NULL,
b3 = NULL, maxi = FALSE, n.iter = n + 2 * m, eps = 1e-10)
An object of class "simplex"
: see simplex.object
.
A vector of length n
which gives the coefficients of the
objective function.
An m1
by n
matrix of coefficients for the \(\leq\) type of
constraints.
A vector of length m1
giving the right hand side of the \(\leq\)
constraints. This argument is required if A1
is given and
ignored otherwise. All values in b1
must be non-negative.
An m2
by n
matrix of coefficients for the \(\geq\) type of
constraints.
A vector of length m2
giving the right hand side of the \(\geq\)
constraints. This argument is required if A2
is given and
ignored otherwise. All values in b2
must be non-negative.
Note that the constraints x >= 0
are included automatically
and so should not be repeated here.
An m3
by n
matrix of coefficients for the equality
constraints.
A vector of length m3
giving the right hand side of equality
constraints. This argument is required if A3
is given and
ignored otherwise. All values in b3
must be non-negative.
A logical flag which specifies minimization if FALSE
(default) and maximization otherwise. If maxi
is TRUE
then the maximization problem is recast as a minimization problem by
changing the objective function coefficients to their negatives.
The maximum number of iterations to be conducted in each phase of
the simplex method. The default is n+2*(m1+m2+m3)
.
The floating point tolerance to be used in tests of equality.
The method employed by this function is the two phase tableau simplex method. If there are \(\geq\) or equality constraints an initial feasible solution is not easy to find. To find a feasible solution an artificial variable is introduced into each \(\geq\) or equality constraint and an auxiliary objective function is defined as the sum of these artificial variables. If a feasible solution to the set of constraints exists then the auxiliary objective will be minimized when all of the artificial variables are 0. These are then discarded and the original problem solved starting at the solution to the auxiliary problem. If the only constraints are of the \(\leq\) form, the origin is a feasible solution and so the first stage can be omitted.
Gill, P.E., Murray, W. and Wright, M.H. (1991) Numerical Linear Algebra and Optimization Vol. 1. Addison-Wesley.
Press, W.H., Teukolsky, S.A., Vetterling, W.T. and Flannery, B.P. (1992) Numerical Recipes: The Art of Scientific Computing (Second Edition). Cambridge University Press.
# This example is taken from Exercise 7.5 of Gill, Murray and Wright (1991).
enj <- c(200, 6000, 3000, -200)
fat <- c(800, 6000, 1000, 400)
vitx <- c(50, 3, 150, 100)
vity <- c(10, 10, 75, 100)
vitz <- c(150, 35, 75, 5)
simplex(a = enj, A1 = fat, b1 = 13800, A2 = rbind(vitx, vity, vitz),
b2 = c(600, 300, 550), maxi = TRUE)
Run the code above in your browser using DataLab