用遗传算法分配来宾

时间:2019-03-06 04:55:17

标签: genetic-algorithm

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

每个主持人可以服务设定数量的来宾(主持人容量)。 每个家庭可以有不同数量的成员。

在将家庭分配给主机之前,需要应用一些规则:

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

还有更多...

每个规则的重要性都有不同的权重,即,如果第一个规则中断,那么就无法进行家庭到主机的分配,但是第三个和第四个规则可能会放宽。

这种问题类似于婚礼计划表的安排,但要复杂得多。我研究了几天,似乎遗传算法可能是个好方向。但是,我坚持如何建模,编码输入和实现算法。

我真的很感谢任何建议。提前致谢。

1 个答案:

答案 0 :(得分:0)

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

一个染色体的例子可以是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.

希望这会有所帮助。