我有一个带线性约束的简单LP。有许多决策变量,大约2400万。我一直在使用R中的lpSolve来播放小样本,但这个解算器不能很好地扩展。有没有办法获得LP的近似解决方案?
编辑:
问题是调度问题。有一百万人需要安排到24小时之一,因此有2400万个决策变量。奖励$ R_ {ij} $用于安排人$ i $到小时$ j $。限制是每个人需要安排到一个小时,但每个小时只有有限数量的预约空位$ c $
答案 0 :(得分:3)
使用大量变量和约束来处理LP / IP的一种好方法是寻找以某种逻辑方式对决策变量进行分组的方法。由于您只给出了问题的草图,这里有一个解决方案。
方法1:将人员分成小批次
而不是1M人,将它们视为每个10K人的100个单位。所以现在你只有2400(24 x 100)个变量。这将使你成为那里的一部分,并注意到这不是最佳解决方案,而是一个很好的近似。您当然可以生产1000批1000人,并获得更细粒度的解决方案。你明白了。
方法2:根据成本分组为同类群组
看看你的R_ij。大概你没有百万不同的成本。通常只有几个独特的成本值。我们的想法是将具有相同成本结构的许多人归为一个“群组”。现在你解决了一个小得多的问题 - 哪个队列进入哪个小时。
再一次,一旦你明白了,你可以让它变得非常容易处理。
更新根据OP的评论: 就其本质而言,制作这些组是近似技术。无法保证获得最佳解决方案。然而,仔细分组的整个想法(通过查看具有相同或非常相似的成本结构的群组)是为了使解决方案尽可能接近最优,并且计算量大大减少。
希望能帮助你朝着正确的方向前进。
答案 1 :(得分:2)
假设你有很多重复的人,你现在使用了太多变量。
假设您只有1000种不同的人,其中一些人发生了2000次,而其他人发生了500次。
然后,您只需优化每小时分配的人员比例。 (请注意,您必须通过添加2000或500作为常量来稍微调整目标函数和约束)
好消息是,这应该只给你一个“少数”变量的最佳解决方案,但根据你的问题,你可能需要对结果进行舍入,以便将整个人作为结果。