【问题标题】:Guest allocation with Genetic Algorithm使用遗传算法分配客人
【发布时间】:2019-03-06 20:20:07
【问题描述】:

在我们当前的项目中,我们需要在每个周末为主人分配数量的家庭来做午餐。

每个主机可以服务一定数量的客人(主机容量)。 每个家庭可以有不同数量的成员。

在将家庭分配给主机之前需要应用几个规则:

  1. 有些家庭不想一起吃午饭(这意味着如果其他家庭已经分配给主人,则无法将其分配给主人)。
  2. 一个家庭不能连续 2 周分配给同一个寄宿家庭。
  3. 13 岁以下的儿童不得超过主机容量的 50%。
  4. 成员年龄超过 50 岁的家庭应不超过主机容量的 50%。

还有更多...

每条规则可以具有不同的重要性权重,即,如果第一条规则被破坏,则无法进行家庭到主机的分配,但第三条和第四条可能会放宽。

这种问题类似于婚礼计划表的布置,但要复杂得多。我研究了几天,似乎遗传算法可能是一个好的方向。但是,我对如何建模、编码输入和实现算法感到困惑。

我非常感谢任何建议。提前致谢。

【问题讨论】:

    标签: genetic-algorithm


    【解决方案1】:

    与任何其他遗传算法问题一样,您需要生成有效/部分无效的染色体(可以评估的场景)。

    染色体的一个例子可以是,W1: [{H1: F2, F3, F7}; {H2: F4, F6}; {H3: F1, F5}], W2: [{H1: F4, F3, F7}; {H2: F2}; {H3: F1, F5, F6}], ... 表示第 1 周 (W1),宿主 1 (H1) 宿主家庭 2、3 和 7,依此类推。

    这可以通过随机分配或其他方法生成,称为Population Initialization

    现在需要一种方法来评估这条染色体。这可以根据问题中定义的点来完成。

    在此之后,可以考虑一些基本功能,例如交叉和变异。

    基本示例:

    1) for mutation, families can be shifted or switched from one host to another, 
    2) for crossover, some weekends can be chosen from one parent, and some from the second, duplicate families can be adjusted.
    

    希望这会有所帮助。

    【讨论】:

    • 抱歉没有说清楚。每周都会计算分配,所以我认为我们不需要计算染色体中的周。顺便说一句,这是一个很好的起点。感谢您的帮助。
    • 那么你将如何处理A family cannot be allocated to same host for 2 consecutive weeks。有无限周吗?
    • 是的,有不定式周。在第 2 周,我将根据第 1 周的分配添加一些额外的规则,例如如果 F1 之前已分配到 H1,则无法将其分配给 H1。
    • 好的,那么染色体可以是[{H1: F2, F3, F7}; {H2: F4, F6}; {H3: F1, F5}],你需要在每个周末完成之前迭代。
    • 此外,由于您有无限的周数,强化学习可能是一种更好的方法,您的代理可以随着周数的推移进行学习。遗传算法通常用于找到最终的优化解决方案,例如,当您有固定的时间范围(例如 8 周)并且您想预先计划托管时,希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 2016-08-23
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2023-03-04
    相关资源
    最近更新 更多