线性规划 - 通过棘手的约束优化利润

时间:2018-03-13 16:51:15

标签: r optimization linear-programming glpk

我想解决一个线性优化问题,其中二元决策变量要在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))

我意识到我可以生成所有组合,然后选择满足要求的最大值,但我想要一个解决方案可以推广到更大的情况,其中组合太多了。

1 个答案:

答案 0 :(得分:3)

这可以建模为:

enter image description here

其中 n 是生产运行的最小长度。

这只需要T=12个约束。

可能的生产运行总数&gt; = n(n=5, T=12 42

当然,对于更长的规划视野,这种差异会相当显着(相当显着)。例如。对于T=24,n=5,我们有 24 约束与 4316 可能的解决方案。

最佳解决方案如下:

enter image description here

关于这样的约束有很多more to say