使用R中的apply替换复杂的for循环

时间:2013-12-10 20:28:35

标签: r loops apply linear-programming

我正在尝试使用R中的apply函数系列替换运行一百万次的for循环(如果可能)。有人告诉我,这将大大加快这个过程,所以我想我会联系专家社区。这是问题所在:

@HansWerner指出了一个线性规划解决方案,解决了我之前遇到的问题,我正在努力寻找合适的人来完成这项工作。

Data

# 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()的结果分配给它但是没有用。请注意,我不想保存每个解决方案,但希望将其与已保存的解决方案进行比较,然后决定是否保存。

所以很明显我不知道并希望得到帮助。

萨米特

0 个答案:

没有答案