使用 LpSolve 在 R 中设置线性规划优化?
Set up linear programming optimization in R using LpSolve?
我有这个优化问题,我试图根据 X 列的唯一值最大化 Z 列,但也在一个约束条件下,即从 X 中选择的每个唯一值加起来 Y 的列最多小于(在这个例子中)23.
例如,我有这个示例数据:
d=data.frame(x=c(1,1,1,2,2,2,3,3,3),y=c(9,7,5,9,7,5,9,7,5),z=c(25,20,5,20,10,5,10,5,3))
看起来像这样:
X Y Z
1 1 9 25
2 1 7 20
3 1 5 5
4 2 9 20
5 2 7 10
6 2 5 5
7 3 9 10
8 3 7 5
9 3 5 5
结果应该是这样的:
X Y Z
1 1 9 25
4 2 9 20
9 3 5 5
如何在lpSolve::lp函数中设置这个问题?
您正在尝试最大化 selected 选项的 z 值之和,但要遵守两种类型的约束:
- selected 选项的 y 值之和不超过 23
- 你 select 每个唯一的 x 值恰好一个值
您可以为每个选项创建一个二进制变量,然后用 lpSolve
:
求解
d=data.frame(x=c(1,1,1,2,2,2,3,3,3),y=c(9,7,5,9,7,5,9,7,5),z=c(25,20,5,20,10,5,10,5,3))
library(lpSolve)
all.x <- unique(d$x)
d[lp(direction = "max",
objective.in = d$z,
const.mat = rbind(outer(all.x, d$x, "=="), d$y),
const.dir = rep(c("==", "<="), c(length(all.x), 1)),
const.rhs = rep(c(1, 23), c(length(all.x), 1)),
all.bin = TRUE)$solution == 1,]
# x y z
# 1 1 9 25
# 4 2 9 20
# 9 3 5 3
我有这个优化问题,我试图根据 X 列的唯一值最大化 Z 列,但也在一个约束条件下,即从 X 中选择的每个唯一值加起来 Y 的列最多小于(在这个例子中)23.
例如,我有这个示例数据:
d=data.frame(x=c(1,1,1,2,2,2,3,3,3),y=c(9,7,5,9,7,5,9,7,5),z=c(25,20,5,20,10,5,10,5,3))
看起来像这样:
X Y Z
1 1 9 25
2 1 7 20
3 1 5 5
4 2 9 20
5 2 7 10
6 2 5 5
7 3 9 10
8 3 7 5
9 3 5 5
结果应该是这样的:
X Y Z
1 1 9 25
4 2 9 20
9 3 5 5
如何在lpSolve::lp函数中设置这个问题?
您正在尝试最大化 selected 选项的 z 值之和,但要遵守两种类型的约束:
- selected 选项的 y 值之和不超过 23
- 你 select 每个唯一的 x 值恰好一个值
您可以为每个选项创建一个二进制变量,然后用 lpSolve
:
d=data.frame(x=c(1,1,1,2,2,2,3,3,3),y=c(9,7,5,9,7,5,9,7,5),z=c(25,20,5,20,10,5,10,5,3))
library(lpSolve)
all.x <- unique(d$x)
d[lp(direction = "max",
objective.in = d$z,
const.mat = rbind(outer(all.x, d$x, "=="), d$y),
const.dir = rep(c("==", "<="), c(length(all.x), 1)),
const.rhs = rep(c(1, 23), c(length(all.x), 1)),
all.bin = TRUE)$solution == 1,]
# x y z
# 1 1 9 25
# 4 2 9 20
# 9 3 5 3