我想解决一个线性优化问题,其中二元决策变量要在R中解决(目前我使用的是Rglkp包)。但是我在设置约束时遇到了麻烦。
假设一家公司想要决定销售其产品的季度,以最大化其利润。但是,如果他们想要出售,他们必须至少连续三个季度出售。这是他们的利润可能是什么样子的一个例子。
profits <- tibble(year = 1,
quarter = 1:4,
profit = c(23, -4, 6, -2))
然后我可以设置一个Rglpk约束矩阵并解决如下。
cons.m <- matrix(c( 2, -1, -1, 0,
-2, 3, -2, -1,
-1, -2, 3, -1,
0, -1, -2, 2),
nrow = 4, byrow = T)
solution <- Rglpk_solve_LP(obj = profits$profit,
mat = cons.m,
dir = rep("<=", 4),
rhs = rep(0, 4),
types = rep("B", 4),
max = T)
solution$solution
[1] 1 1 1 0
哪个说我应该在前三个季度出售,而不是在第四季度出售。这显然是正确的解决方案。
我怎样才能将这个解决方案扩展到12个阶段,我必须连续卖出至少5个季度?
profits.new <- tibble(year = rep(1:3, each = 4),
quarter = 1:12,
profit = runif(12, -20, 20))
我意识到我可以生成所有组合,然后选择满足要求的最大值,但我想要一个解决方案可以推广到更大的情况,其中组合太多了。
答案 0 :(得分:3)
这可以建模为:
其中 n 是生产运行的最小长度。
这只需要T=12
个约束。
可能的生产运行总数&gt; = n(n=5, T=12
) 42 。
当然,对于更长的规划视野,这种差异会相当显着(相当显着)。例如。对于T=24,n=5
,我们有 24 约束与 4316 可能的解决方案。
最佳解决方案如下:
关于这样的约束有很多more to say。