给定浮点值的三元组
和一个值,将值分配给每个三元组以使以下条件成立的好算法是什么?
- 。
- 。
- 尽可能接近,其中,即最小化.
我了解上述问题可以通过 LP 求解器解决,但我正在寻找一种算法,它可能不会返回最佳分配,但它是确定性的,返回接近最佳解决方案,在时间内运行,并返回稳定的解决方案从某种意义上说,如果问题定义的两个实例“彼此接近”,那么解决方案往往彼此接近。
似乎应该有一种贪婪的方法来充分执行,其中第一步是将最小值分配给然后按比例分配“松弛”,但我不确定如何在执行此操作时处理最大值。
给定浮点值的三元组
和一个值,将值分配给每个三元组以使以下条件成立的好算法是什么?
我了解上述问题可以通过 LP 求解器解决,但我正在寻找一种算法,它可能不会返回最佳分配,但它是确定性的,返回接近最佳解决方案,在时间内运行,并返回稳定的解决方案从某种意义上说,如果问题定义的两个实例“彼此接近”,那么解决方案往往彼此接近。
似乎应该有一种贪婪的方法来充分执行,其中第一步是将最小值分配给然后按比例分配“松弛”,但我不确定如何在执行此操作时处理最大值。
(这个答案是Michal Forišek的工作......我将在这里解释)
首先通过规范化约束和权重来重新表述问题:
请注意,问题只有在 。然后找到如下最优解:
将每个设置为等于。如果这是一个有效的解决方案,我们就完成了。
对于每个,如果,增加到。
对于每个,如果递减到。
当时,找到最小的使得可以增加并增加它直到你得到或。
当时,做同样的事情但递减。
以上将是最佳的,但 Michal 指出,通过最小化平方和而不是绝对值,可以直观地获得更好的结果,这可以通过修改上面的 4. 和 5. 来实现。