指定资源分配算法?

Specifying Resource Allocation algorithm?

谁能帮我解决或说明这是什么类型的问题:

我有一组资源和一些用户,每个用户都有一个特定的资源子集,可以从中选择一个资源进行分配。两个不同的用户不能分配给同一个 resource.I 需要以最大化分配的方式将资源分配给用户。例如:

R={r1,r2,r3,r4} %资源集

U={u1,u2,u3,u4} %用户集

u1 可以从以下资源中选择一个:{r1, r2, r3}

u2 可以从以下资源中选择一个:{r1, r2}

u3 可以从以下资源中选择一个:{r1, r4}

u4 可以从以下资源中选择一个:{r2}

在这种情况下我应该分配

r3->u1, r1->u2, r4->u3, r2->u4.

如果分配方式不同,u4 将没有资源可分配。

这只是为了说明问题,我需要为200个用户和100个资源解决这个问题。 我可以就使用哪种算法或如何解决这个问题征求你的意见吗?

我写了一个简单的汇编程序,可以将变量分配给寄存器。我发现最有效的方法是先进行最难的分配,然后再进行下一个最难的分配。

所以在你的例子中,你有一个想要分配的用户列表。由于每个用户都有不同的分配规则,您需要为每个可用资源创建一个计数。

然后进行如下操作:

  1. 使用特定规则,计算可用资源
  2. select拥有最少
  3. 的用户
  4. 在平局的情况下,随机 select 一个
  5. 为 selected 用户分配资源
  6. 重复

通过这种方式,您可以优先考虑那些最难分配的用户。但考虑到用户和资源,可能没有解决方案,因此您可能需要重试几次。如果在 N 次尝试后,没有找到解决方案中止。

我经常使用 LP/MIP 解算器解决这类分配问题。尺寸不是太大,所以几乎任何解算器都可以,而且有很多现成的。它可能看起来有点矫枉过正,但根据我的经验,它提供了一些有用的灵活性(例如修复一些分配,允许额外的临时约束)。

您的问题可以表述为:

我将问题解决为 RMIP,它只是一个 LP(对于此类问题,x 变量自动为整数)。

为了回答你的问题,让我试着解释一下方程式。

首先我们需要注意的是变量x(u,r)只取值0或1。这是一个属性的线性赋值问题。原因并不十分明显,但一本关于线性规划的好书可以告诉你更多。

第一个等式assign1说:我们最多可以为每个用户分配一个资源。例如。对于用户 u1,我们有:x(u1,r1)+x(u1,r2)+x(u1,r3) <= 1。该等式禁止将用户分配给两个或多个资源。我们允许未分配的用户,以防我们缺少资源(例如,如果我们有一个包含 2 个用户和 1 个资源的数据集)。由于无法将用户分配给所有资源,因此我们不会对所有 r 求和,而只会对允许的组合求和。

第二个等式assign2说:我们最多可以将每个资源分配给一个用户。例如。对于资源 r1,我们有:x(u1,r1)+x(u2,r1)+x(u3,r1) <= 1。该等式禁止将资源分配给两个或更多用户。我们也需要这个,否则可以将几个不同的用户分配给同一资源。我们允许未分配的资源以防我们缺少用户(例如,我们有 2 个资源而只有 1 个用户)。由于无法将资源分配给任何用户,因此我们不会对所有 u 求和,而只会对允许的组合求和。

最后 objective 统计了有多少有效分配。这是我们想要最大化的价值。诀窍还是对允许的组合求和以防止非法分配。

该模型与描述的 LP 模型略有不同 here. Much more information on the assignment problem can be found in this book

对于您的小数据集,这里是输入数据和结果: