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