Description Usage Arguments Details Value Note Author(s) References See Also Examples
Calculate additive Data Envelopment Analysis (DEA) efficiency with five Generalized Efficiency Measures (GEM): unweighted additive model (Cooper et al., 2007), Range Adjusted Measure (Cooper et al., 1999; 2001), Bounded Adjusted Measure (Cooper et al., 2011), Measure of Inefficiency Proportions (Cooper et al., 1999), and the Lovell-Pastor Measure (Lovell and Pastor, 1995).
1 2 3 |
base |
A data frame with N rows and S+M columns, where N is the number of Decision-Making Units (DMUs), S is the number of outputs and M is the number of inputs. |
noutput |
The number of outputs produced by the DMUs. All DMUs must produce the same number of outputs. |
fixed |
A numeric vector containing column indices for fixed (non-controllable) outputs and/or inputs (if any) in the data. Defaults to NULL. |
rts |
Returns to scale specification. 1 for constant returns to scale and 2 (default) for variable returns to scale. |
bound |
A data frame with N rows and S+M columns containing user-defined bounds on the slacks of each DMU. If bounds are supplied by the user in cases where some outputs and/or inputs are fixed, values should be 0 for these fixed variables. Same for slacks that do not require bounds. Defaults to NULL. |
add.model |
Additive model to calculate efficiency. additive: unweighted additive model (Cooper et al., 2007); RAM: Range Adjusted Measure (Cooper et al., 1999; 2001); BAM: Bounded Adjusted Measure (Cooper et al., 2011); MIP: Measure of Inefficiency Proportions (Cooper et al., 1999); LovPast: the Lovell-Pastor Measure (Lovell and Pastor, 1995). |
whichDMUs |
Numeric vector specifying the line numbers of the DMUs for which efficiency should be calculated. Defaults to NULL, i.e. by default efficiency is calculated for all DMUs in the dataset. |
print.status |
Defaults to FALSE. If the solution of the linear program is NA for one or more DMUs, print.status can be set to TRUE to find out why. |
Generalized Efficiency Measures (GEMs) are additive DEA models that maximize the sum of input and output slacks for each DMU. This sum is an aggregate measure of all inefficiencies that a DMU may exhibit in its inputs and outputs and can thus be seen as a holistic measure of (Pareto-Koopmans) inefficiency (efficient DMUs have no inefficiencies, thus their sum of slacks is 0). GEMs differ in that they weigh slacks in the objective function in different manners: the unweighted additive model does not in fact weigh the slacks, i.e. all slacks are assigned a trivial weight of 1 (Cooper et al., 2007); RAM weighs input and output slacks by the ranges in inputs and outputs respectively (Cooper et al., 1999). BAM weighs input and output slacks by the lower-sided ranges in inputs and the upper-sided ranges in outputs respectively (Cooper et al., 2011). MIP weighs input and output slacks by the respective inputs used and outputs produced by each DMU (Cooper et al., 1999); the Lovell-Pastor Measure weighs input and output slacks by the standard deviations in inputs and outputs respectively (Lovell and Pastor, 1995).
Models RAM, BAM, MIP and the Lovell-Pastor measure are units invariant, that is, the value of the aggregate inefficiency score of a DMU is independent of the units in which the inputs and outputs are measured, as long as these units are the same for every DMU. When a variable returns to scale specification is assumed, the unweighted additive model, RAM, BAM and the Lovell-Pastor measure are translation invariant, that is, they can accommodate zero or negative values of inputs and outputs.
If print.status=FALSE, returns a data frame with N rows and 1+N+S+M columns. Column 1 reports the inefficiency score of each DMU. Columns 2 to N+1 contain the lambda values (intensity variables) indicating the DMU(s) that serve as reference for each DMU. Columns 1+N+1 to 1+N+S report the optimal output slacks for each DMU. Columns 1+N+S+1 to 1+N+S+M report the optimal input slacks for each DMU. When the linear program of a DMU is infeasible, the row of this DMU in the data frame will have NA values.
If print.status=TRUE, returns a list with two elements. The first element is the aforementioned data frame. The second element is a numeric vector indicating the solution status of the linear program (e.g. 0: solution found; 2: problem is infeasible; 5: problem needs scaling; etc. See https://CRAN.R-project.org/package=lpSolveAPI).
Models RAM and BAM return an inefficiency score that is bounded by 0 and 1. Subtracting this inefficiency score from 1 gives an efficiency score that is also bounded by 0 and 1, with 1 indicating that the DMU under evaluation is fully efficient (zero slacks). The other GEMs do not carry this property, unless the slacks are bounded appropriately. For instance, the user may demand that output slacks are bounded by the actual outputs produced by each DMU, resulting in a MIP measure of inefficiency that, when divided by S+M and subtracted from 1, can be converted to an efficiency measure that is bounded by 0 and 1. Note that with RAM and BAM the bounds must be smaller than, or equal to, the ranges (for RAM) or the sided ranges (for BAM) for the inefficiency scores to be bounded by 0 and 1.
Andreas Diomedes Soteriades, andreassot10@yahoo.com
Cooper W. W., Park K. S., Pastor J. T. (1999) RAM: a range adjusted measure of inefficiency for use with additive models, and relations to other models and measures in DEA. Journal of Productivity Analysis, 11, 5–42
Cooper W. W., Park K. S., Pastor J. T. (2001) The range adjusted measure (RAM) in DEA: a response to the comment by Steinmann and Zweifel. Journal of Productivity Analysis, 15, 145–152
Cooper W. W., Pastor J. T., Borras F., Aparicio J., Pastor D. (2011) BAM: a bounded adjusted measure of efficiency for use with bounded additive models. Journal of Productivity Analysis, 35, 85–94
Cooper W. W., Seiford L., Tone K. (2007) Data Envelopment Analysis: a comprehensive text with models, applications, references and DEA-Solver software. New York: Springer
Lovell, C. A. K., Pastor J. T. (1995) Units invariant and translation invariant DEA models. Operations Research Letters, 18, 147–151
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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | # Twelve DMUs, 2 inputs, 2 outputs
# (see Table 1.5 in Cooper et al., 2007):
base <- data.frame(
y1= c(100,150,160,180,94,230,220,152,190,250,260,250),
y2= c(90,50,55,72,66,90,88,80,100,100,147,120),
x1= c(20,19,25,27,22,55,33,31,30,50,53,38),
x2= c(151,131,160,168,158,255,235,206,244,268,306,284))
# Example 1: Get inefficiency scores,
# lambdas and slacks for all DMUs, with each GEM:
models <- c("additive", "RAM", "BAM", "MIP", "LovPast")
for(i in models) {
print(i)
results <- dea.gem(base, noutput= 2, add.model= i)
print(results)
}
# Example 2: Same as above, but consider output y2 and input x1 as fixed:
for(i in models) {
print(i)
results <- dea.gem(base, noutput= 2, add.model= i, fixed= c(2, 3))
print(results)
}
# Example 3: Impose upper bounds to slacks and get BAM inefficiency:
# upper-sided range for output:
Uo <- sweep(-base[c(1,2)], 2,
apply(base[c(1,2)], 2, max), '+')
# lower-sided range for input
Li <- sweep(base[c(3,4)], 2,
apply(base[c(3,4)], 2, min), '-')
# ensure bounds are <= the sided ranges:
bound <- cbind(Uo, Li)/2
# results with bounds:
dea.gem(base, noutput= 2, add.model= "BAM", bound= bound)$eff
# removing bounds allows for larger inefficiencies:
dea.gem(base, noutput= 2, add.model= "BAM", bound= NULL)$eff
# check solution status of linear programs when y2 and x1 are fixed
# and y1, x2 slacks are bounded:
fixed <- c(2,3)
bound[fixed] <- 0
for(i in models) {
print(i)
results <- dea.gem(base, noutput= 2, add.model= i,
bound= bound, fixed= c(2, 3), rts= 1, print.status= TRUE)[[2]]
print(results)
}
# Example 4: Get inefficiency scores for DMUs 11 and 12:
bound <- base
fixed <- c(2,3)
bound[fixed] <- 0
for(i in models) {
print(i)
results <- dea.gem(base, noutput= 2, add.model= i,
bound= base, fixed= c(2, 3), rts= 1, whichDMUs= c(11, 12))$eff
print(results)
}
# Example 5: a typical scaling problem in linear programing
# and how to deal with it:
# get data from package Benchmarking:
library(Benchmarking)
data(pigdata)
base <- pigdata[, 2:9][, c(7,8,1:6)]
results <- dea.gem(base, noutput= 2, rts= 1,
add.model= 'RAM', print.status= TRUE)
# inefficiency for DMU 37 is NA:
which(is.na(results[[1]]$eff))
# error status: 5, i.e. scaling problem:
results[[2]][37]
# scale data:
results <- dea.gem(base/1000, noutput= 2, rts= 1,
add.model= 'RAM', print.status= TRUE)
which(is.na(results[[1]]$eff)) # problem solved!
## The function is currently defined as
function (base, noutput, fixed = NULL, rts = 2, bound = NULL,
add.model = c("additive", "RAM", "BAM", "MIP", "LovPast"),
whichDMUs = NULL, print.status = FALSE)
{
s <- noutput
m <- ncol(base) - s
n <- nrow(base)
ifelse(!is.null(whichDMUs), nn <- length(whichDMUs), nn <- n)
if (is.null(whichDMUs)) {
whichDMUs <- 1:n
}
re <- data.frame(matrix(0, nrow = nn, ncol = 1 + n + s +
m))
names(re) <- c("eff", paste("lambda", 1:n, sep = ""), paste("slack.y",
1:s, sep = ""), paste("slack.x", 1:m, sep = ""))
lpmodel <- make.lp(nrow = 0, ncol = n + s + m)
slacks <- diag(s + m)
slacks[1:s, ] <- -slacks[1:s, ]
type <- rep("=", s + m)
if (!is.null(fixed)) {
slacks[, fixed] <- 0
type[fixed[fixed <= s]] <- ">="
type[fixed[fixed > s]] <- "<="
}
A <- cbind(t(base), slacks)
for (i in 1:(s + m)) {
add.constraint(lpmodel, xt = A[i, ], type = type[i],
rhs = 0)
}
if (add.model == "BAM") {
Uo <- t(apply(data.frame(base[, 1:s]), 2, max) - t(base[,
1:s]))
Li <- t(t(base[, (s + 1):(s + m)]) - apply(data.frame(base[,
(s + 1):(s + m)]), 2, min))
if (!is.null(bound) & rts == 1) {
index1 <- which(colSums(bound) == 0)
bound[, index1] <- data.frame(Uo, Li)[, index1]
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
if (is.null(bound) & rts == 1) {
bound <- data.frame(Uo, Li)
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
}
if (add.model == "RAM") {
Ro <- apply(data.frame(base[, 1:s]), 2, max) - apply(data.frame(base[,
1:s]), 2, min)
Ri <- apply(data.frame(base[, (s + 1):(s + m)]), 2, max) -
apply(data.frame(base[, (s + 1):(s + m)]), 2, min)
if (!is.null(bound) & rts == 1) {
index1 <- which(colSums(bound) == 0)
bound[, index1] <- t(as.data.frame(matrix(c(Ro, Ri),
nrow = s + m, ncol = nrow(base))))[, index1]
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
if (is.null(bound) & rts == 1) {
bound <- t(as.data.frame(matrix(c(Ro, Ri), nrow = s +
m, ncol = nrow(base))))
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
}
if (!is.null(bound)) {
index <- which(colSums(bound) != 0)
nrows <- length(index)
A.bound <- matrix(0, nrow = nrows, ncol = n + s + m)
k <- 0
for (i in index) {
k <- k + 1
A.bound[k, n + index[k]] <- 1
}
A <- rbind(A, A.bound)
for (i in 1:k) {
add.constraint(lpmodel, xt = A[s + m + i, ], type = "<=",
rhs = 0)
}
}
syx <- rep(-1, s + m)
syx[fixed] <- 0
if (add.model == "additive") {
set.objfn(lpmodel, c(rep(0, n), syx))
}
if (add.model == "RAM") {
Ro[Ro == 0] <- Inf
Ri[Ri == 0] <- Inf
Ranges <- (1/c(Ro, Ri))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx * Ranges)))
}
if (add.model == "LovPast") {
st.dev <- apply(base, 2, sd)
st.dev[st.dev == 0] <- Inf
set.objfn(lpmodel, c(rep(0, n), syx/st.dev))
}
k <- 0
if (print.status == TRUE) {
ifelse(!is.null(whichDMUs), solution.status <- rep(0,
nn), solution.status <- rep(0, n))
}
if (rts == 2 & is.null(bound)) {
add.constraint(lpmodel, xt = c(rep(1, n), rep(0, s +
m)), type = "=", rhs = 0)
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
set.rhs(lpmodel, b = as.numeric(c(base[i, ], 1)))
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 2 & !is.null(bound)) {
add.constraint(lpmodel, xt = c(rep(1, n), rep(0, s +
m)), type = "=", rhs = 0)
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
if (add.model %in% c("RAM", "BAM")) {
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index], 1)))
}
if (sum(add.model == c("RAM", "BAM")) == 0) {
bound[bound == 0] <- 10^10
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index], 1)))
}
solve(lpmodel)
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 1 & is.null(bound)) {
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
set.rhs(lpmodel, b = as.numeric(base[i, ]))
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 1 & !is.null(bound)) {
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
if (add.model %in% c("RAM", "BAM")) {
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index])))
}
if (sum(add.model == c("RAM", "BAM")) == 0) {
bound[bound == 0] <- 10^10
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index])))
}
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
ifelse(x != 0, re[k, ] <- rep(NA, ncol(re)), re[k,
] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n)))
}
}
if (!is.null(fixed)) {
re <- re[, -(1 + n + fixed)]
}
if (print.status == TRUE) {
reList <- list()
reList[[1]] <- re
reList[[2]] <- solution.status
names(reList[[2]]) <- whichDMUs
re <- reList
}
return(re)
}
|
Loading required package: lpSolveAPI
[1] "additive"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.00000 1.0000000 0.00000000 0 0.0000000 0 0 0
2 0.00000 0.0000000 1.00000000 0 0.0000000 0 0 0
3 25.25000 0.0000000 0.25000000 0 0.7500000 0 0 0
4 0.00000 0.0000000 0.00000000 0 1.0000000 0 0 0
5 65.99329 0.2080537 0.44295302 0 0.3489933 0 0 0
6 41.37500 0.0000000 0.00000000 0 0.3750000 0 0 0
7 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 1
8 61.04000 0.0000000 0.00000000 0 0.8933333 0 0 0
9 25.00247 0.2913580 0.05925926 0 0.1481481 0 0 0
10 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
11 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
12 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.y2 slack.x1
1 0 0 0 0.0000000 0.0000000 0.00000 0.000 0.000000
2 0 0 0 0.0000000 0.0000000 0.00000 0.000 0.000000
3 0 0 0 0.0000000 0.0000000 12.50000 11.500 0.000000
4 0 0 0 0.0000000 0.0000000 0.00000 0.000 0.000000
5 0 0 0 0.0000000 0.0000000 56.06711 0.000 0.000000
6 0 0 0 0.6250000 0.0000000 0.00000 28.875 11.750000
7 0 0 0 0.0000000 0.0000000 0.00000 0.000 0.000000
8 0 0 0 0.1066667 0.0000000 36.53333 0.000 1.226667
9 0 0 0 0.0000000 0.5012346 0.00000 0.000 0.000000
10 0 0 1 0.0000000 0.0000000 0.00000 0.000 0.000000
11 0 0 0 1.0000000 0.0000000 0.00000 0.000 0.000000
12 0 0 0 0.0000000 1.0000000 0.00000 0.000 0.000000
slack.x2
1 0.000000
2 0.000000
3 1.250000
4 0.000000
5 9.926174
6 0.750000
7 0.000000
8 23.280000
9 25.002469
10 0.000000
11 0.000000
12 0.000000
[1] "RAM"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7 lambda8
1 0.00000000 1.0000000 0.000 0 0 0 0 0 0
2 0.00000000 0.0000000 1.000 0 0 0 0 0 0
3 0.05319829 0.0000000 0.900 0 0 0 0 0 0
4 0.00000000 0.0000000 0.000 0 1 0 0 0 0
5 0.09941528 0.4000000 0.600 0 0 0 0 0 0
6 0.18796727 0.0000000 0.200 0 0 0 0 0 0
7 0.00000000 0.0000000 0.000 0 0 0 0 1 0
8 0.10309079 0.3813333 0.408 0 0 0 0 0 0
9 0.03578413 0.2933333 0.160 0 0 0 0 0 0
10 0.00000000 0.0000000 0.000 0 0 0 0 0 0
11 0.00000000 0.0000000 0.000 0 0 0 0 0 0
12 0.00000000 0.0000000 0.000 0 0 0 0 0 0
lambda9 lambda10 lambda11 lambda12 slack.y1 slack.y2 slack.x1 slack.x2
1 0 0 0 0.0000000 0 0 0.000 0.00000
2 0 0 0 0.0000000 0 0 0.000 0.00000
3 0 0 0 0.1000000 0 2 4.100 13.70000
4 0 0 0 0.0000000 0 0 0.000 0.00000
5 0 0 0 0.0000000 36 0 2.600 19.00000
6 0 0 0 0.8000000 0 16 20.800 1.60000
7 0 0 0 0.0000000 0 0 0.000 0.00000
8 0 0 0 0.2106667 0 0 7.616 35.14133
9 0 0 0 0.5466667 0 0 0.320 23.49333
10 0 1 0 0.0000000 0 0 0.000 0.00000
11 0 0 1 0.0000000 0 0 0.000 0.00000
12 0 0 0 1.0000000 0 0 0.000 0.00000
[1] "BAM"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.00000000 1.0000000 0.000000 0 0.00 0 0 0
2 0.00000000 0.0000000 1.000000 0 0.00 0 0 0
3 0.29437156 0.0000000 0.900000 0 0.00 0 0 0
4 0.00000000 0.0000000 0.000000 0 1.00 0 0 0
5 0.44680946 0.4000000 0.600000 0 0.00 0 0 0
6 0.23693348 0.0000000 0.000000 0 0.25 0 0 0
7 0.00000000 0.0000000 0.000000 0 0.00 0 0 1
8 0.27580444 0.3813333 0.408000 0 0.00 0 0 0
9 0.05955587 0.2608696 0.173913 0 0.00 0 0 0
10 0.00000000 0.0000000 0.000000 0 0.00 0 0 0
11 0.00000000 0.0000000 0.000000 0 0.00 0 0 0
12 0.00000000 0.0000000 0.000000 0 0.00 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.y2 slack.x1
1 0 0 0 0 0.0000000 0.000000 0 0.000
2 0 0 0 0 0.0000000 0.000000 0 0.000
3 0 0 0 0 0.1000000 0.000000 2 4.100
4 0 0 0 0 0.0000000 0.000000 0 0.000
5 0 0 0 0 0.0000000 36.000000 0 2.600
6 0 0 0 0 0.7500000 2.500000 18 19.750
7 0 0 0 0 0.0000000 0.000000 0 0.000
8 0 0 0 0 0.2106667 0.000000 0 7.616
9 0 0 0 0 0.5652174 3.478261 0 0.000
10 0 0 1 0 0.0000000 0.000000 0 0.000
11 0 0 0 1 0.0000000 0.000000 0 0.000
12 0 0 0 0 1.0000000 0.000000 0 0.000
slack.x2
1 0.00000
2 0.00000
3 13.70000
4 0.00000
5 19.00000
6 0.00000
7 0.00000
8 35.14133
9 21.30435
10 0.00000
11 0.00000
12 0.00000
[1] "MIP"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.0000000 1.00000000 0.0000000 0 0.0000000 0 0 0
2 0.0000000 0.00000000 1.0000000 0 0.0000000 0 0 0
3 0.3432282 0.20408163 0.1224490 0 0.6734694 0 0 0
4 0.0000000 0.00000000 0.0000000 0 1.0000000 0 0 0
5 0.6913129 0.13623188 0.7130435 0 0.0000000 0 0 0
6 0.5725737 0.03584672 0.0000000 0 0.2088999 0 0 0
7 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 1
8 0.4607848 0.58646617 0.0000000 0 0.0000000 0 0 0
9 0.1070882 0.32380952 0.1142857 0 0.0000000 0 0 0
10 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
11 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
12 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.y2 slack.x1
1 0 0 0 0 0.0000000 0.00000 0.000000 0.0000000
2 0 0 0 0 0.0000000 0.00000 0.000000 0.0000000
3 0 0 0 0 0.0000000 0.00000 17.979592 0.4081633
4 0 0 0 0 0.0000000 0.00000 0.000000 0.0000000
5 0 0 0 0 0.1507246 64.26087 0.000000 0.0000000
6 0 0 0 0 0.7552534 0.00000 18.897404 19.9431397
7 0 0 0 0 0.0000000 0.00000 0.000000 0.0000000
8 0 0 0 0 0.4135338 10.03008 22.406015 3.5563910
9 0 0 0 0 0.5619048 0.00000 2.285714 0.0000000
10 0 0 1 0 0.0000000 0.00000 0.000000 0.0000000
11 0 0 0 1 0.0000000 0.00000 0.000000 0.0000000
12 0 0 0 0 1.0000000 0.00000 0.000000 0.0000000
slack.x2
1 0.000000
2 0.000000
3 0.000000
4 0.000000
5 1.214493
6 0.000000
7 0.000000
8 0.000000
9 20.552381
10 0.000000
11 0.000000
12 0.000000
[1] "LovPast"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.0000000 1.00000000 0.0000000 0 0.0000000 0 0 0
2 0.0000000 0.00000000 1.0000000 0 0.0000000 0 0 0
3 0.6930082 0.20408163 0.1224490 0 0.6734694 0 0 0
4 0.0000000 0.00000000 0.0000000 0 1.0000000 0 0 0
5 1.2664501 0.94736842 0.0000000 0 0.0000000 0 0 0
6 2.2568855 0.03584672 0.0000000 0 0.2088999 0 0 0
7 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 1
8 1.2781636 0.58646617 0.0000000 0 0.0000000 0 0 0
9 0.4319250 0.32380952 0.1142857 0 0.0000000 0 0 0
10 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
11 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
12 0.0000000 0.00000000 0.0000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.y2 slack.x1
1 0 0 0 0 0.00000000 0.00000 0.000000 0.0000000
2 0 0 0 0 0.00000000 0.00000 0.000000 0.0000000
3 0 0 0 0 0.00000000 0.00000 17.979592 0.4081633
4 0 0 0 0 0.00000000 0.00000 0.000000 0.0000000
5 0 0 0 0 0.05263158 13.89474 25.578947 1.0526316
6 0 0 0 0 0.75525340 0.00000 18.897404 19.9431397
7 0 0 0 0 0.00000000 0.00000 0.000000 0.0000000
8 0 0 0 0 0.41353383 10.03008 22.406015 3.5563910
9 0 0 0 0 0.56190476 0.00000 2.285714 0.0000000
10 0 0 1 0 0.00000000 0.00000 0.000000 0.0000000
11 0 0 0 1 0.00000000 0.00000 0.000000 0.0000000
12 0 0 0 0 1.00000000 0.00000 0.000000 0.0000000
slack.x2
1 0.00000
2 0.00000
3 0.00000
4 0.00000
5 0.00000
6 0.00000
7 0.00000
8 0.00000
9 20.55238
10 0.00000
11 0.00000
12 0.00000
[1] "additive"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.00000 1.0000000 0.00000000 0 0.0000000 0 0 0
2 0.00000 0.0000000 1.00000000 0 0.0000000 0 0 0
3 16.66667 0.0000000 0.66666667 0 0.3333333 0 0 0
4 0.00000 0.0000000 0.00000000 0 1.0000000 0 0 0
5 65.99329 0.2080537 0.44295302 0 0.3489933 0 0 0
6 15.57143 0.0000000 0.00000000 0 0.2857143 0 0 0
7 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 1
8 59.81333 0.0000000 0.00000000 0 0.8933333 0 0 0
9 25.00247 0.2913580 0.05925926 0 0.1481481 0 0 0
10 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
11 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
12 0.00000 0.0000000 0.00000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.x2
1 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
2 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
3 0 0 0.0000000 0.0000000 0.0000000 0.00000 16.666667
4 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
5 0 0 0.0000000 0.0000000 0.0000000 56.06711 9.926174
6 0 0 0.7142857 0.0000000 0.0000000 0.00000 15.571429
7 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
8 0 0 0.0000000 0.1066667 0.0000000 36.53333 23.280000
9 0 0 0.0000000 0.0000000 0.5012346 0.00000 25.002469
10 0 0 1.0000000 0.0000000 0.0000000 0.00000 0.000000
11 0 0 0.0000000 1.0000000 0.0000000 0.00000 0.000000
12 0 0 0.0000000 0.0000000 1.0000000 0.00000 0.000000
[1] "RAM"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.00000000 1.0000000 0.00000000 0 0.0000000 0 0 0
2 0.00000000 0.0000000 1.00000000 0 0.0000000 0 0 0
3 0.04761905 0.0000000 0.66666667 0 0.3333333 0 0 0
4 0.00000000 0.0000000 0.00000000 0 1.0000000 0 0 0
5 0.19723735 0.2080537 0.44295302 0 0.3489933 0 0 0
6 0.04448980 0.0000000 0.00000000 0 0.2857143 0 0 0
7 0.00000000 0.0000000 0.00000000 0 0.0000000 0 0 1
8 0.17655445 0.0000000 0.00000000 0 0.8933333 0 0 0
9 0.07143563 0.2913580 0.05925926 0 0.1481481 0 0 0
10 0.00000000 0.0000000 0.00000000 0 0.0000000 0 0 0
11 0.00000000 0.0000000 0.00000000 0 0.0000000 0 0 0
12 0.00000000 0.0000000 0.00000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.x2
1 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
2 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
3 0 0 0.0000000 0.0000000 0.0000000 0.00000 16.666667
4 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
5 0 0 0.0000000 0.0000000 0.0000000 56.06711 9.926174
6 0 0 0.7142857 0.0000000 0.0000000 0.00000 15.571429
7 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
8 0 0 0.0000000 0.1066667 0.0000000 36.53333 23.280000
9 0 0 0.0000000 0.0000000 0.5012346 0.00000 25.002469
10 0 0 1.0000000 0.0000000 0.0000000 0.00000 0.000000
11 0 0 0.0000000 1.0000000 0.0000000 0.00000 0.000000
12 0 0 0.0000000 0.0000000 1.0000000 0.00000 0.000000
[1] "BAM"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.0000000 1.0000000 0.0000000 0 0.0000000 0 0 0
2 0.0000000 0.0000000 1.0000000 0 0.0000000 0 0 0
3 0.2873563 0.0000000 0.6666667 0 0.3333333 0 0 0
4 0.0000000 0.0000000 0.0000000 0 1.0000000 0 0 0
5 0.4602856 0.4000000 0.6000000 0 0.0000000 0 0 0
6 0.1816667 0.0000000 0.0000000 0 0.1300000 0 0 0
7 0.0000000 0.0000000 0.0000000 0 0.0000000 0 0 1
8 0.3243358 0.0000000 0.0000000 0 0.8933333 0 0 0
9 0.1191117 0.2608696 0.1739130 0 0.0000000 0 0 0
10 0.0000000 0.0000000 0.0000000 0 0.0000000 0 0 0
11 0.0000000 0.0000000 0.0000000 0 0.0000000 0 0 0
12 0.0000000 0.0000000 0.0000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.x2
1 0 0 0.00 0.0000000 0.0000000 0.000000 0.00000
2 0 0 0.00 0.0000000 0.0000000 0.000000 0.00000
3 0 0 0.00 0.0000000 0.0000000 0.000000 16.66667
4 0 0 0.00 0.0000000 0.0000000 0.000000 0.00000
5 0 0 0.00 0.0000000 0.0000000 36.000000 19.00000
6 0 0 0.87 0.0000000 0.0000000 10.900000 0.00000
7 0 0 0.00 0.0000000 0.0000000 0.000000 0.00000
8 0 0 0.00 0.1066667 0.0000000 36.533333 23.28000
9 0 0 0.00 0.0000000 0.5652174 3.478261 21.30435
10 0 0 1.00 0.0000000 0.0000000 0.000000 0.00000
11 0 0 0.00 1.0000000 0.0000000 0.000000 0.00000
12 0 0 0.00 0.0000000 1.0000000 0.000000 0.00000
[1] "MIP"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.00000000 1.0000000 0.0000000 0 0.0000000 0 0 0
2 0.00000000 0.0000000 1.0000000 0 0.0000000 0 0 0
3 0.10416667 0.0000000 0.6666667 0 0.3333333 0 0 0
4 0.00000000 0.0000000 0.0000000 0 1.0000000 0 0 0
5 0.69131293 0.1362319 0.7130435 0 0.0000000 0 0 0
6 0.06106443 0.0000000 0.0000000 0 0.2857143 0 0 0
7 0.00000000 0.0000000 0.0000000 0 0.0000000 0 0 1
8 0.35614326 0.0000000 0.0000000 0 0.7788945 0 0 0
9 0.10561954 0.2608696 0.1739130 0 0.0000000 0 0 0
10 0.00000000 0.0000000 0.0000000 0 0.0000000 0 0 0
11 0.00000000 0.0000000 0.0000000 0 0.0000000 0 0 0
12 0.00000000 0.0000000 0.0000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.x2
1 0 0 0.0000000 0 0.00000000 0.000000 0.000000
2 0 0 0.0000000 0 0.00000000 0.000000 0.000000
3 0 0 0.0000000 0 0.00000000 0.000000 16.666667
4 0 0 0.0000000 0 0.00000000 0.000000 0.000000
5 0 0 0.0000000 0 0.15072464 64.260870 1.214493
6 0 0 0.7142857 0 0.00000000 0.000000 15.571429
7 0 0 0.0000000 0 0.00000000 0.000000 0.000000
8 0 0 0.1306533 0 0.09045226 43.477387 14.442211
9 0 0 0.0000000 0 0.56521739 3.478261 21.304348
10 0 0 1.0000000 0 0.00000000 0.000000 0.000000
11 0 0 0.0000000 1 0.00000000 0.000000 0.000000
12 0 0 0.0000000 0 1.00000000 0.000000 0.000000
[1] "LovPast"
eff lambda1 lambda2 lambda3 lambda4 lambda5 lambda6 lambda7
1 0.0000000 1.0000000 0.00000000 0 0.0000000 0 0 0
2 0.0000000 0.0000000 1.00000000 0 0.0000000 0 0 0
3 0.2821153 0.0000000 0.66666667 0 0.3333333 0 0 0
4 0.0000000 0.0000000 0.00000000 0 1.0000000 0 0 0
5 1.1508330 0.2080537 0.44295302 0 0.3489933 0 0 0
6 0.2635763 0.0000000 0.00000000 0 0.2857143 0 0 0
7 0.0000000 0.0000000 0.00000000 0 0.0000000 0 0 1
8 1.0344599 0.0000000 0.00000000 0 0.8933333 0 0 0
9 0.4232147 0.2913580 0.05925926 0 0.1481481 0 0 0
10 0.0000000 0.0000000 0.00000000 0 0.0000000 0 0 0
11 0.0000000 0.0000000 0.00000000 0 0.0000000 0 0 0
12 0.0000000 0.0000000 0.00000000 0 0.0000000 0 0 0
lambda8 lambda9 lambda10 lambda11 lambda12 slack.y1 slack.x2
1 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
2 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
3 0 0 0.0000000 0.0000000 0.0000000 0.00000 16.666667
4 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
5 0 0 0.0000000 0.0000000 0.0000000 56.06711 9.926174
6 0 0 0.7142857 0.0000000 0.0000000 0.00000 15.571429
7 0 0 0.0000000 0.0000000 0.0000000 0.00000 0.000000
8 0 0 0.0000000 0.1066667 0.0000000 36.53333 23.280000
9 0 0 0.0000000 0.0000000 0.5012346 0.00000 25.002469
10 0 0 1.0000000 0.0000000 0.0000000 0.00000 0.000000
11 0 0 0.0000000 1.0000000 0.0000000 0.00000 0.000000
12 0 0 0.0000000 0.0000000 1.0000000 0.00000 0.000000
[1] 0.00000000 0.00000000 0.26310920 0.00000000 0.32067838 0.23171831
[7] 0.00000000 0.26145742 0.05955587 0.00000000 0.00000000 0.00000000
[1] 0.00000000 0.00000000 0.29437156 0.00000000 0.44680946 0.23693348
[7] 0.00000000 0.27580444 0.05955587 0.00000000 0.00000000 0.00000000
[1] "additive"
1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0
[1] "RAM"
1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0
[1] "BAM"
1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0
[1] "MIP"
1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0
[1] "LovPast"
1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 0 0 0 0 0 0 0 0
[1] "additive"
[1] 29.11017 34.00000
[1] "RAM"
[1] 0.08768123 0.10008824
[1] "BAM"
[1] 0.03925714 0.99967781
[1] "MIP"
[1] 0.1119622 0.1288236
[1] "LovPast"
[1] 0.5102789 0.5869677
Loading required package: ucminf
Loading required package: quadprog
[1] 37
37
5
integer(0)
function (base, noutput, fixed = NULL, rts = 2, bound = NULL,
add.model = c("additive", "RAM", "BAM", "MIP", "LovPast"),
whichDMUs = NULL, print.status = FALSE)
{
s <- noutput
m <- ncol(base) - s
n <- nrow(base)
ifelse(!is.null(whichDMUs), nn <- length(whichDMUs), nn <- n)
if (is.null(whichDMUs)) {
whichDMUs <- 1:n
}
re <- data.frame(matrix(0, nrow = nn, ncol = 1 + n + s +
m))
names(re) <- c("eff", paste("lambda", 1:n, sep = ""), paste("slack.y",
1:s, sep = ""), paste("slack.x", 1:m, sep = ""))
lpmodel <- make.lp(nrow = 0, ncol = n + s + m)
slacks <- diag(s + m)
slacks[1:s, ] <- -slacks[1:s, ]
type <- rep("=", s + m)
if (!is.null(fixed)) {
slacks[, fixed] <- 0
type[fixed[fixed <= s]] <- ">="
type[fixed[fixed > s]] <- "<="
}
A <- cbind(t(base), slacks)
for (i in 1:(s + m)) {
add.constraint(lpmodel, xt = A[i, ], type = type[i],
rhs = 0)
}
if (add.model == "BAM") {
Uo <- t(apply(data.frame(base[, 1:s]), 2, max) - t(base[,
1:s]))
Li <- t(t(base[, (s + 1):(s + m)]) - apply(data.frame(base[,
(s + 1):(s + m)]), 2, min))
if (!is.null(bound) & rts == 1) {
index1 <- which(colSums(bound) == 0)
bound[, index1] <- data.frame(Uo, Li)[, index1]
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
if (is.null(bound) & rts == 1) {
bound <- data.frame(Uo, Li)
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
}
if (add.model == "RAM") {
Ro <- apply(data.frame(base[, 1:s]), 2, max) - apply(data.frame(base[,
1:s]), 2, min)
Ri <- apply(data.frame(base[, (s + 1):(s + m)]), 2, max) -
apply(data.frame(base[, (s + 1):(s + m)]), 2, min)
if (!is.null(bound) & rts == 1) {
index1 <- which(colSums(bound) == 0)
bound[, index1] <- t(as.data.frame(matrix(c(Ro, Ri),
nrow = s + m, ncol = nrow(base))))[, index1]
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
if (is.null(bound) & rts == 1) {
bound <- t(as.data.frame(matrix(c(Ro, Ri), nrow = s +
m, ncol = nrow(base))))
if (!is.null(fixed)) {
bound[fixed] <- 0
}
}
}
if (!is.null(bound)) {
index <- which(colSums(bound) != 0)
nrows <- length(index)
A.bound <- matrix(0, nrow = nrows, ncol = n + s + m)
k <- 0
for (i in index) {
k <- k + 1
A.bound[k, n + index[k]] <- 1
}
A <- rbind(A, A.bound)
for (i in 1:k) {
add.constraint(lpmodel, xt = A[s + m + i, ], type = "<=",
rhs = 0)
}
}
syx <- rep(-1, s + m)
syx[fixed] <- 0
if (add.model == "additive") {
set.objfn(lpmodel, c(rep(0, n), syx))
}
if (add.model == "RAM") {
Ro[Ro == 0] <- Inf
Ri[Ri == 0] <- Inf
Ranges <- (1/c(Ro, Ri))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx * Ranges)))
}
if (add.model == "LovPast") {
st.dev <- apply(base, 2, sd)
st.dev[st.dev == 0] <- Inf
set.objfn(lpmodel, c(rep(0, n), syx/st.dev))
}
k <- 0
if (print.status == TRUE) {
ifelse(!is.null(whichDMUs), solution.status <- rep(0,
nn), solution.status <- rep(0, n))
}
if (rts == 2 & is.null(bound)) {
add.constraint(lpmodel, xt = c(rep(1, n), rep(0, s +
m)), type = "=", rhs = 0)
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
set.rhs(lpmodel, b = as.numeric(c(base[i, ], 1)))
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 2 & !is.null(bound)) {
add.constraint(lpmodel, xt = c(rep(1, n), rep(0, s +
m)), type = "=", rhs = 0)
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
if (add.model %in% c("RAM", "BAM")) {
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index], 1)))
}
if (sum(add.model == c("RAM", "BAM")) == 0) {
bound[bound == 0] <- 10^10
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index], 1)))
}
solve(lpmodel)
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 1 & is.null(bound)) {
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
set.rhs(lpmodel, b = as.numeric(base[i, ]))
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
re[k, ] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n))
if (x != 0) {
re[k, ] <- rep(NA, ncol(re))
}
}
}
if (rts == 1 & !is.null(bound)) {
for (i in whichDMUs) {
k <- k + 1
if (add.model == "MIP") {
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx/base[i,
])))
}
if (add.model == "BAM") {
Uo[i, ][Uo[i, ] == 0] <- Inf
Li[i, ][Li[i, ] == 0] <- Inf
Ranges <- (1/c(Uo[i, ], Li[i, ]))/abs(sum(syx))
set.objfn(lpmodel, c(rep(0, n), as.numeric(syx *
Ranges)))
}
if (add.model %in% c("RAM", "BAM")) {
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index])))
}
if (sum(add.model == c("RAM", "BAM")) == 0) {
bound[bound == 0] <- 10^10
set.rhs(lpmodel, b = as.numeric(c(base[i, ],
bound[i, index])))
}
x <- solve(lpmodel)
if (print.status == TRUE) {
solution.status[k] <- x
}
ifelse(x != 0, re[k, ] <- rep(NA, ncol(re)), re[k,
] <- c(-get.objective(lpmodel), tail(get.primal.solution(lpmodel),
s + m + n)))
}
}
if (!is.null(fixed)) {
re <- re[, -(1 + n + fixed)]
}
if (print.status == TRUE) {
reList <- list()
reList[[1]] <- re
reList[[2]] <- solution.status
names(reList[[2]]) <- whichDMUs
re <- reList
}
return(re)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.