File: linprog_tests.R

package info (click to toggle)
r-cran-linprog 0.9-4-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 204 kB
  • sloc: sh: 13; makefile: 2
file content (129 lines) | stat: -rw-r--r-- 4,429 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
library( linprog )

## Example 1
## Steinhauser, Langbehn and Peters (1992)
cvec <- c(1800, 600, 600)  # gross margins
names(cvec) <- c("Cows","Bulls","Pigs")
bvec <- c(40, 90, 2500)  # endowment
names(bvec) <- c("Land","Stable","Labor")
Amat <- rbind( c(  0.7,   0.35,   0 ),
               c(  1.5,   1,      3 ),
               c( 50,    12.5,   20 ) )
result1a <- solveLP( cvec, bvec, Amat, TRUE, verbose = 1 )
print( result1a )
# print summary results
summary( result1a )
# print all elements of the returned object
print.default( result1a )
# also estimate the dual problem
result1aD <- solveLP( cvec, bvec, Amat, TRUE, verbose = 1, solve.dual = TRUE )
result1aD$con
all.equal( result1a[-c(8,12)], result1aD[-c(8,10,13)] )

# estimation with verbose = TRUE
result1b <- solveLP( cvec, bvec, Amat, TRUE, verbose = 4 )
all.equal( result1a, result1b )
# also estimate the dual problem
result1bD <- solveLP( cvec, bvec, Amat, TRUE, verbose = 4, solve.dual = TRUE )
all.equal( result1aD, result1bD )

# estimation with lpSolve
result1c <- solveLP( cvec, bvec, Amat, TRUE, lpSolve = TRUE, verbose = 4 )
print( result1c )
# print summary results
summary( result1c )
# print all elements of the returned object
print.default( result1c )
# also estimate the dual problem
result1cD <- solveLP( cvec, bvec, Amat, TRUE, lpSolve = TRUE, solve.dual = TRUE )
result1cD$con
all.equal( result1c[-c(5,8)], result1cD[-c(5,6,9)] )

# using argument const.dir
const.dir <- c( ">=", ">=", ">=" )
result1d <- solveLP( cvec, -bvec, -Amat, maximum = TRUE, verbose = 1,
   const.dir = const.dir )
print( result1d )
all.equal( result1a[-8], result1d[-8] )
# also estimate the dual problem
result1dD <- solveLP( cvec, -bvec, -Amat, TRUE, verbose = 1,
   const.dir = const.dir, solve.dual = TRUE )
result1dD$con
all.equal( result1aD[-8], result1dD[-8] )

# using argument const.dir and lpSolve
result1e <-solveLP( cvec, -bvec, -Amat, maximum = TRUE, verbose = 1,
   const.dir = const.dir, lpSolve = TRUE )
print( result1e )
all.equal( result1c[-5], result1e[-5] )
# also estimate the dual problem
result1eD <- solveLP( cvec, -bvec, -Amat, TRUE, verbose = 1,
   const.dir = const.dir, lpSolve = TRUE, solve.dual = TRUE )
result1eD$con
all.equal( result1cD[-5], result1eD[-5] )


## Example 2
## example 1.1.3 of Witte, Deppe and Born (1975)
cvec <- c(2.5, 2 )  # prices of feed
names(cvec) <- c("Feed1","Feed2")
bvec <- c( -10, -1.5, 12)
names(bvec) <- c("Protein","Fat","Fibre")
Amat <- rbind( c(-1.6,-2.4 ),
               c(-0.5,-0.2 ),
               c( 2.0, 2.0 ) )
result2a <- solveLP( cvec, bvec, Amat, verbose = 1 )
print( result2a )
# print summary results
summary( result2a )
# print all elements of the returned object
print.default( result2a )
# also estimate the dual problem
result2aD <- solveLP( cvec, bvec, Amat, verbose = 1, solve.dual = TRUE )
result2aD$con
all.equal( result2a[-c(8,12)], result2aD[-c(8,10,13)] )

# estimation with verbose = TRUE
result2b <- solveLP( cvec, bvec, Amat, verbose = 4 )
all.equal( result1a, result1b )
# also estimate the dual problem
result2bD <- solveLP( cvec, bvec, Amat, verbose = 4, solve.dual = TRUE )
all.equal( result2aD, result2bD )

# estimation with lpSolve
result2c <- solveLP( cvec, bvec, Amat, lpSolve = TRUE, verbose = 4 )
print( result2c )
# print summary results
summary( result2c )
# print all elements of the returned object
print.default( result2c )
# also estimate the dual problem
result2cD <- solveLP( cvec, bvec, Amat, lpSolve = TRUE, verbose = 4,
   solve.dual = TRUE )
result2cD$con
all.equal( result2c[-c(5,8)], result2cD[-c(5,6,9)] )

# using argument const.dir
const.dir <- c( ">=", ">=", "<=" )
result2d <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1,
   const.dir = const.dir )
print( result2d )
all.equal( result2a[-8], result2d[-8] )
# also estimate the dual problem
result2dD <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1,
   const.dir = const.dir, solve.dual = TRUE )
result2dD$con
all.equal( result2aD[-8], result2dD[-8] )

# using argument const.dir and lpSolve
result2e <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1,
   const.dir = const.dir, lpSolve = TRUE )
print( result2e )
all.equal( result2c[-5], result2e[-5] )
# also estimate the dual problem
result2eD <- solveLP( cvec, abs( bvec ), abs( Amat ), verbose = 1,
   const.dir = const.dir, lpSolve = TRUE, solve.dual = TRUE )
result2eD$con
all.equal( result2cD[-5], result2eD[-5] )