指定资源分配算法?

时间:2015-12-03 18:07:18

标签: matlab optimization resources mathematical-optimization allocation

有人可以帮我解决或说明这是什么类型的问题:

我有一组资源和许多用户,并且每个用户都有一个特定的资源子集,可以从分配中选择一个资源。无法将两个不同的用户分配到同一资源。我需要以最大化分配的方式为用户分配资源。例如:

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个资源解决这个问题。 我可以就您使用哪种算法或如何解决这个问题寻求建议吗?

2 个答案:

答案 0 :(得分:0)

我写了一个简单的汇编程序,它将变量分配给寄存器。我发现最先做最难的分配是最有效的,然后继续做下一个最难的分配。

因此,在您的情况下,您有一个想要分配的用户列表。由于每个用户都有不同的分配规则,因此您需要为每个可用资源创建一个计数。

然后按以下步骤进行:

  1. 使用特定规则,计算可用资源
  2. 选择具有最小
  3. 的用户
  4. 在关系的情况下,randomally选择一个
  5. 为所选用户分配资源
  6. 重复
  7. 通过这种方式,您将优先考虑那些最难分配的用户。但是考虑到用户和资源,可能没有解决方案,因此您可能需要多次重试。如果在N尝试之后,没有找到解决方案中止。

答案 1 :(得分:0)

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

您的问题可以表述为:

enter image description here

我将问题解决为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 进行总结,而只是对允许的组合进行总结。

最后,目标计算了有效分配的数量。这是我们想要最大化的价值。诀窍是再次总结允许的组合以防止非法分配。

该模型是所描述的LP模型here的略微变化。有关分配问题的更多信息可以在this book中找到。

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