1library( linprog ) 2 3## Example 1 4## Steinhauser, Langbehn and Peters (1992) 5cvec <- c(1800, 600, 600) # gross margins 6names(cvec) <- c("Cows","Bulls","Pigs") 7bvec <- c(40, 90, 2500) # endowment 8names(bvec) <- c("Land","Stable","Labor") 9Amat <- rbind( c( 0.7, 0.35, 0 ), 10 c( 1.5, 1, 3 ), 11 c( 50, 12.5, 20 ) ) 12result1a <- solveLP( cvec, bvec, Amat, TRUE, verbose = 1 ) 13print( result1a ) 14# print summary results 15summary( result1a ) 16# print all elements of the returned object 17print.default( result1a ) 18# also estimate the dual problem 19result1aD <- solveLP( cvec, bvec, Amat, TRUE, verbose = 1, solve.dual = TRUE ) 20result1aD$con 21all.equal( result1a[-12], result1aD[-c(10,13)] ) 22 23# estimation with verbose = TRUE 24result1b <- solveLP( cvec, bvec, Amat, TRUE, verbose = 4 ) 25all.equal( result1a, result1b ) 26# also estimate the dual problem 27result1bD <- solveLP( cvec, bvec, Amat, TRUE, verbose = 4, solve.dual = TRUE ) 28all.equal( result1aD, result1bD ) 29 30# estimation with lpSolve 31result1c <- solveLP( cvec, bvec, Amat, TRUE, lpSolve = TRUE, verbose = 4 ) 32print( result1c ) 33# print summary results 34summary( result1c ) 35# print all elements of the returned object 36print.default( result1c ) 37# also estimate the dual problem 38result1cD <- solveLP( cvec, bvec, Amat, TRUE, lpSolve = TRUE, solve.dual = TRUE ) 39result1cD$con 40all.equal( result1c[-8], result1cD[-c(6,9)] ) 41 42# using argument const.dir 43const.dir <- c( ">=", ">=", ">=" ) 44result1d <- solveLP( cvec, -bvec, -Amat, maximum = TRUE, verbose = 1, 45 const.dir = const.dir ) 46print( result1d ) 47all.equal( result1a[-8], result1d[-8] ) 48# also estimate the dual problem 49result1dD <- solveLP( cvec, -bvec, -Amat, TRUE, verbose = 1, 50 const.dir = const.dir, solve.dual = TRUE ) 51result1dD$con 52all.equal( result1aD[-8], result1dD[-8] ) 53 54# using argument const.dir and lpSolve 55result1e <-solveLP( cvec, -bvec, -Amat, maximum = TRUE, verbose = 1, 56 const.dir = const.dir, lpSolve = TRUE ) 57print( result1e ) 58all.equal( result1c[-5], result1e[-5] ) 59# also estimate the dual problem 60result1eD <- solveLP( cvec, -bvec, -Amat, TRUE, verbose = 1, 61 const.dir = const.dir, lpSolve = TRUE, solve.dual = TRUE ) 62result1eD$con 63all.equal( result1cD[-5], result1eD[-5] ) 64 65 66## Example 2 67## example 1.1.3 of Witte, Deppe and Born (1975) 68cvec <- c(2.5, 2 ) # prices of feed 69names(cvec) <- c("Feed1","Feed2") 70bvec <- c( -10, -1.5, 12) 71names(bvec) <- c("Protein","Fat","Fibre") 72Amat <- rbind( c(-1.6,-2.4 ), 73 c(-0.5,-0.2 ), 74 c( 2.0, 2.0 ) ) 75result2a <- solveLP( cvec, bvec, Amat, verbose = 1 ) 76print( result2a ) 77# print summary results 78summary( result2a ) 79# print all elements of the returned object 80print.default( result2a ) 81# also estimate the dual problem 82result2aD <- solveLP( cvec, bvec, Amat, verbose = 1, solve.dual = TRUE ) 83result2aD$con 84all.equal( result2a[-12], result2aD[-c(10,13)] ) 85 86# estimation with verbose = TRUE 87result2b <- solveLP( cvec, bvec, Amat, verbose = 4 ) 88all.equal( result1a, result1b ) 89# also estimate the dual problem 90result2bD <- solveLP( cvec, bvec, Amat, verbose = 4, solve.dual = TRUE ) 91all.equal( result2aD, result2bD ) 92 93# estimation with lpSolve 94result2c <- solveLP( cvec, bvec, Amat, lpSolve = TRUE, verbose = 4 ) 95print( result2c ) 96# print summary results 97summary( result2c ) 98# print all elements of the returned object 99print.default( result2c ) 100# also estimate the dual problem 101result2cD <- solveLP( cvec, bvec, Amat, lpSolve = TRUE, verbose = 4, 102 solve.dual = TRUE ) 103result2cD$con 104all.equal( result2c[-8], result2cD[-c(6,9)] ) 105 106# using argument const.dir 107const.dir <- c( ">=", ">=", "<=" ) 108result2d <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1, 109 const.dir = const.dir ) 110print( result2d ) 111all.equal( result2a[-8], result2d[-8] ) 112# also estimate the dual problem 113result2dD <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1, 114 const.dir = const.dir, solve.dual = TRUE ) 115result2dD$con 116all.equal( result2aD[-8], result2dD[-8] ) 117 118# using argument const.dir and lpSolve 119result2e <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1, 120 const.dir = const.dir, lpSolve = TRUE ) 121print( result2e ) 122all.equal( result2c[-5], result2e[-5] ) 123# also estimate the dual problem 124result2eD <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1, 125 const.dir = const.dir, lpSolve = TRUE, solve.dual = TRUE ) 126result2eD$con 127all.equal( result2cD[-5], result2eD[-5] ) 128 129 130