群体形成算法:作为个人或在预先形成的群体中

计算科学 算法
2021-12-02 19:31:28

我有 20-80 个用户和 5-10 个活动,其最小和最大免费座位数(2-4、3-5、2-6...)的范围各不相同。例如,对于 3-5 的范围,可以接受仅将三个用户分配给事件。用户可以为 1-3 个事件选择加权偏好 (1,2,3)。问题是以最佳方式将尽可能多的用户分配给事件。

我正在使用匈牙利算法,JavaScript 实现是使用munkres-js完成的。如果没有解决方案,可以删除事件和最终用户,直到有解决方案。这会产生令人满意的非最优解。

我目前的问题是如何让用户在优化之前形成不同大小(2-8)的预定义组?如果最大座位数小于团体人数,则团体无法选择活动。这可以在算法执行之前处理。该组可以以与单个用户相同的方式选择三个加权偏好。例如,在 40 个用户中,有 4、5 和 6 人的三个预定义组,其余 25 个用户将被单独分配。

我最初的想法是将所有用户分配到预定义的组,然后将组分配给事件,但我不知道如何使用不同的组大小和事件席位来做到这一点。

不会过多改变范围的非最优近似值和约束也可以。有约 30 秒的时间限制。

有任何想法吗?

// 编辑

建议的约束:

  • 将小组人数限制为两人。这是可行的,因为常见的场景是人们想和一个朋友一起参加一个活动。

// 编辑2

要求清单:

  • 目标

    • 目标是为事件分配尽可能多的用户。
    • 必须尊重用户偏好。
  • 活动

    • 活动有最小和最大座位数(例如:3-5)。
    • 如果活动没有收到最少的用户数,则必须取消该活动。
  • 个人用户

    • 用户可以为尽可能多的不同事件 (1-3) 选择最多三个 (1-3) 加权偏好 (1,2,3)。
    • 用户只能被分配到他们选择的事件。
    • 如果用户多于空闲席位,则必须公平地移除多余的用户。
    • 如果用户无法与其偏好匹配,则必须将其删除。这应该是最后的措施。
  • 团体

    • 用户可以组成不同大小的组 (2-8)。
    • 组可以像个人用户一样选择三个加权偏好。
    • 如果最大座位数小于团体人数,则团体无法选择活动。这可以在算法执行之前处理。
  • 其他

    • 算法必须能够在 30 秒内执行。
    • 非最佳近似值很好。
    • 如果它们不会过多地改变范围,则可以引入新的约束。
0个回答
没有发现任何回复~