在保持相对权重的同时,将值分配给受基本边界约束的 n 个变量的“足够好”的方法是什么?

计算科学 优化 算法 线性规划
2021-11-28 07:56:16

给定浮点值的三元组n

(min1,max1,w1),,(minn,maxn,wn)

和一个值V,将值vi分配给每个三元组以使以下条件成立的好算法是什么?

  1. minivimaxi
  2. i=1nvi=V
  3. viV尽可能接近wiW,其中W=i=1nwi,即最小化i=1n|viVwiW|.

我了解上述问题可以通过 LP 求解器解决,但我正在寻找一种算法,它可能不会返回最佳分配,但它是确定性的,返回接近最佳解决方案,在O(n)时间内运行,并返回稳定的解决方案从某种意义上说,如果问题定义的两个实例“彼此接近”,那么解决方案往往彼此接近。

似乎应该有一种贪婪的方法来充分执行,其中第一步是将最小值分配给然后按比例分配“松弛”,但我不确定如何在执行此操作时处理最大值。vi

1个回答

(这个答案是Michal Forišek的工作......我将在这里解释)

首先通过规范化约束和权重来重新表述问题:

  • vi=1
  • i:minivimaxi
  • 最小化|viwi|

请注意,问题只有在 然后找到如下最优解:mini1maxi

  1. 将每个设置为等于如果这是一个有效的解决方案,我们就完成了。viwi

  2. 对于每个,如果增加到ivi<minivimini

  3. 对于每个,如果递减ivi>maxivimaxi

  4. 时,找到最小的使得可以增加并增加它直到你得到vi<1xvxvi=1vx=maxx

  5. 时,做同样的事情但递减。vi>1

以上将是最佳的,但 Michal 指出,通过最小化平方和而不是绝对值,可以直观地获得更好的结果,这可以通过修改上面的 4. 和 5. 来实现。