我正在尝试使用R中的apply函数系列替换运行一百万次的for循环(如果可能)。有人告诉我,这将大大加快这个过程,所以我想我会联系专家社区。这是问题所在:
# Import data in D
str(D)
# Prepare constraint matrix
A <- matrix(0, nrow = 5, ncol = 299)
A[1, c(1:27, 279:299)] <- 1 # Plumbers
A[2, 28:97] <- 1 # Electricians
A[3, 98:190] <- 1 # Const Workers
A[4, 191:278] <- 1 # Cleanup
A[5, ] <- D$Cost # cost <= 100000
# Prepare input for LP solver
objective.in <- D$Value
const.mat <- A
const.dir <- c(">=", ">=", ">=", ">=", "<=")
const.rhs <- c(1, 2, 2, 2, 100000)
# Now solve the problem
require(lpSolve)
sol <- lp(direction = "max", objective.in, # maximize objective function
const.mat, const.dir, const.rhs, # constraints
all.bin = TRUE) # use binary variables only
# View the solution
sol
## 100000
inds <- which(sol$solution == 1)
D[inds, ]
## Success: the objective function is 589
sum(D$Cost[inds])
我正在尝试使用lpsolver并将其置于for循环中
for(i in 1:million)
{
# Change objective.in
sol <- lp(direction = "max", objective.in, # maximize objective function
const.mat, const.dir, const.rhs, # constraints
all.bin = TRUE) # use binary variables only
# Do some comparisons and MAYBE save the solution
}
这个for循环需要很长时间才能运行(读取小时数)所以我想知道是否可以用apply函数系列替换这个for循环。我尝试了 mapply (再次在for循环中),创建了一个全局“sol”并将objective.in发送到它并使用&lt;&lt; - 将lp()的结果分配给它但是没有用。请注意,我不想保存每个解决方案,但希望将其与已保存的解决方案进行比较,然后决定是否保存。
所以很明显我不知道并希望得到帮助。
萨米特