我正在使用ompr
包来解决整数程序。我想要包含一个基于另一个二进制变量的平均值的约束。
在下面的示例中,我有一些食物,我想找到至少5个项目,并尽量降低成本。我希望平均卡路里计数高于某个最低值。在下面的代码中,第一个约束是卡路里的 sum 高于min_avg_cal
。这可以改写,因此约束条件是所选食物的平均卡路里高于min_avg_cal
?
library(dplyr)
library(ROI)
library(ROI.plugin.glpk)
library(ompr)
library(ompr.roi)
n <- 20
cost <- runif(n, 0, 10)
calories <- runif(n, 100, 200)
min_avg_cal <- 140
model <- MIPModel() %>%
add_variable(x[i], i =1:n, type = "binary") %>%
set_objective(sum_expr(cost[i] * x[i], i = 1:n), "min") %>%
add_constraint(sum_expr(calories[i] * x[i], i = 1:n) >= min_avg_cal) %>%
add_constraint(sum_expr(x[i], i = 1:n) >= 5)
result <- solve_model(model, with_ROI(solver = "glpk", verbose = TRUE))
result$solution