迭代分布的优化技术

数据挖掘 sql
2022-02-24 03:44:33

如果这不符合本网站的正确格式,我们深表歉意,因为这是一个有点笼统的问题。

我有一个位于 SQL 数据库之上的应用程序,并且需要处理一个非常类似于线性代数问题的过程,其中a(0-1B 之间的任何数字)需要在n 个实体(e ),基于在实体级别设置的一些参数(排名、权重、最小/最大要求)。

例子:

a = 100

entity    weight    min    max
----------------------------------------------
X         0.25      10     40
Y         0.75      40     60     
... 

在此示例中,25 ( a * X [weight]) 将转到实体X,而 75 将转到实体Y但是,75 超过了Y [max],因此剩余的 15 需要转到另一个实体(在本例中为X,因为它保持在X [max] 或以下)。

直观地说,这是在迭代过程中。在一个真实的例子中,会有更多的实体,因此需要更多的迭代。SQL 不是为迭代而设计的。我正在寻找一种以基于集合的方法更好地处理此问题的方法。

我正在寻找的是类似的东西:

  • 一种统计方法,我可以使用它来最小化我需要进行的迭代次数,或者甚至更好,一种可以将其提炼成公式的方法?

  • 或者,也许有一种方法可以以静态方式存储一些数据,以最大限度地减少动态计算所需的步骤?

  • 创建一个查找表,根据其他实体(它们以 10 个或更少为一组),可以为每个实体存储一个最小/最大范围的结果。

1个回答

它看起来像一个资源分配问题。我想不出任何可以在这里有所帮助的统计方法,但也许有。

我认为可以通过首先计算过剩和“短缺”的数量来简化这个过程。我不知道是否有正式的方法,但我会尝试以下方法:

  • 分发a基于权重。然后计算每个实体:
    • 其超额:X 有 0,Y 有 15 (75-60)
    • 它的缺失量:X 有 0,Y 有 0。
    • 其额外金额的能力。X 有 15 (40-25),Y 有 0。
    • 它提供一些金额的能力。X 有 15 (25-10),Y 有 20 (60-40)
  • 计算超出金额的总和Sexcess, 缺失金额的总和Smissing, 和容量小号pls,Sminus. Let S=SexcessSmissing:
    • If S>0
      • If S>Splus, then no solution
      • Otherwise (1) fill every entity which has amount missing to their minimum, (2) distribute amount S by filling any entity which has capacity for more.
    • If S<0
      • If |S|>Sminus, then no solution.
      • Otherwise (1) unload every entity which has amount in excess to their maximum, (2) take total amount |S| from any entity which capacity for giving away.

If I'm not mistaken this requires only two steps, each step going over all the entities.