Liu Evans, Gareth
2011-Oct-10 11:53 UTC
[R] Linear programming problem, RGPLK - "no feasible solution".
In my post at https://stat.ethz.ch/pipermail/r-help/2011-October/292019.html I included an undefined term "ej". The problem code should be as follows. It seems like a simple linear programming problem, but for some reason my code is not finding the solution. obj <- c(rep(0,3),1) col1 <-c(1,0,0,1,0,0,1,-2.330078923,0) col2 <-c(0,1,0,0,1,0,1,-2.057855981,0) col3 <-c(0,0,1,0,0,1,1,-1.885177032,0) col4 <-c(-1,-1,-1,1,1,1,0,0,1) mat <- cbind(col1, col2, col3, col4) dir <- c(rep("<=", 3), rep(">=", 3), rep("==", 2), ">=") rhs <- c(rep(0, 7), 1, 0) sol <- Rglpk_solve_LP(obj, mat, dir, rhs, types = NULL, max = FALSE, bounds = c(-100,100), verbose = TRUE) The R output says there is no feasible solution, but e.g. (-2.3756786, 0.3297676, 2.0459110, 2.3756786) is feasible. The output is "GLPK Simplex Optimizer, v4.42 9 rows, 4 columns, 19 non-zeros 0: obj = 0.000000000e+000 infeas = 1.000e+000 (2) PROBLEM HAS NO FEASIBLE SOLUTION" One other thing, a possible bug - if I run this code with "dir" shorter than it should be, R crashes. My version of R is 2.131.56322.0, and I'm running it on Windows 7. Regards, Gareth
Hans W Borchers
2011-Oct-10 21:17 UTC
[R] Linear programming problem, RGPLK - "no feasible solution".
Liu Evans, Gareth <Gareth.Liu-Evans <at> liverpool.ac.uk> writes:> In my post at https://stat.ethz.ch/pipermail/r-help/2011-October/292019.html > I included an undefined term "ej". The problem code should be as follows. > It seems like a simple linear programming problem, but for some reason my > code is not finding the solution. > > obj <- c(rep(0,3),1) > > col1 <-c(1,0,0,1,0,0,1,-2.330078923,0) > col2 <-c(0,1,0,0,1,0,1,-2.057855981,0) > col3 <-c(0,0,1,0,0,1,1,-1.885177032,0) > col4 <-c(-1,-1,-1,1,1,1,0,0,1) > > mat <- cbind(col1, col2, col3, col4) > > dir <- c(rep("<=", 3), rep(">=", 3), rep("==", 2), ">=") > > rhs <- c(rep(0, 7), 1, 0) > > sol <- Rglpk_solve_LP(obj, mat, dir, rhs, types = NULL, max = FALSE, > bounds = c(-100,100), verbose = TRUE) > > The R output says there is no feasible solution, but e.g. > (-2.3756786, 0.3297676, 2.0459110, 2.3756786) is feasible. > > The output is > > "GLPK Simplex Optimizer, v4.42 > 9 rows, 4 columns, 19 non-zeros > 0: obj = 0.000000000e+000 infeas = 1.000e+000 (2) > PROBLEM HAS NO FEASIBLE SOLUTION"Please have a closer look at the help page "?Rglpk_solve_LP". The way to define the bounds is a bit clumsy, but then it works: sol <- Rglpk_solve_LP(obj, mat, dir, rhs, types = NULL, max = FALSE, bounds = list(lower=list(ind=1:4, val=rep(-100,4)), upper=list(ind=1:4, val=rep(100,4))), verbose=TRUE) GLPK Simplex Optimizer, v4.42 9 rows, 4 columns, 19 non-zeros 0: obj = -1.000000000e+02 infeas = 1.626e+03 (2) * 10: obj = 1.000000000e+02 infeas = 0.000e+00 (0) * 13: obj = 2.247686558e+00 infeas = 0.000e+00 (0) OPTIMAL SOLUTION FOUND > sol $optimum [1] 2.247687 $solution [1] -2.247687e+00 -6.446292e-31 2.247687e+00 2.247687e+00> One other thing, a possible bug - if I run this code with "dir" shorter than > it should be, R crashes. My version of R is 2.131.56322.0, and I'm running > it on Windows 7.If you can reproduce that R crashes -- which it shall never do -- inform the maintainer of this package. On Mac it doesn't crash, it goes into an infinite loop with "Execution aborted.Error detected in file glplib03.c at line 83". Regards, Hans Werner> Regards, > Gareth