大线性程序的逼近

时间:2013-04-24 04:46:25

标签: optimization linear-programming

我有一个带线性约束的简单LP。有许多决策变量,大约2400万。我一直在使用R中的lpSolve来播放小样本,但这个解算器不能很好地扩展。有没有办法获得LP的近似解决方案?

编辑:

问题是调度问题。有一百万人需要安排到24小时之一,因此有2400万个决策变量。奖励$ R_ {ij} $用于安排人$ i $到小时$ j $。限制是每个人需要安排到一个小时,但每个小时只有有限数量的预约空位$ c $

2 个答案:

答案 0 :(得分:3)

使用大量变量和约束来处理LP / IP的一种好方法是寻找以某种逻辑方式对决策变量进行分组的方法。由于您只给出了问题的草图,这里有一个解决方案。

方法1:将人员分成小批次

而不是1M人,将它们视为每个10K人的100个单位。所以现在你只有2400(24 x 100)个变量。这将使你成为那里的一部分,并注意到这不是最佳解决方案,而是一个很好的近似。您当然可以生产1000批1000人,并获得更细粒度的解决方案。你明白了。

方法2:根据成本分组为同类群组

看看你的R_ij。大概你没有百万不同的成本。通常只有几个独特的成本值。我们的想法是将具有相同成本结构的许多人归为一个“群组”。现在你解决了一个小得多的问题 - 哪个队列进入哪个小时。

再一次,一旦你明白了,你可以让它变得非常容易处理。

更新根据OP的评论: 就其本质而言,制作这些组是近似技术。无法保证获得最佳解决方案。然而,仔细分组的整个想法(通过查看具有相同或非常相似的成本结构的群组)是为了使解决方案尽可能接近最优,并且计算量大大减少。

  • 我还应该补充一点,当缩放(分组只是缩小问题大小的一种方法)时,其他常量也应该缩放。也就是说,c_j也应该是相同的单位(10K)。
  • 如果人员A,B,C不能适应时隙j,那么该模型将在最低成本时段中挤入尽可能多的那些,并将其他人移到其他成本略高的插槽中,但他们可以适应。

希望能帮助你朝着正确的方向前进。

答案 1 :(得分:2)

假设你有很多重复的人,你现在使用了太多变量。

假设您只有1000种不同的人,其中一些人发生了2000次,而其他人发生了500次。

然后,您只需优化每小时分配的人员比例。 (请注意,您必须通过添加2000或500作为常量来稍微调整目标函数和约束)

好消息是,这应该只给你一个“少数”变量的最佳解决方案,但根据你的问题,你可能需要对结果进行舍入,以便将整个人作为结果。