> Defining Evaluation For the Genetic Algorithm — Defining the Goal Situation. Picture by author.
我们确实需要定义如何评估提议的计划和目标计划之间的差异。 这将基于小时计划进行,将过多的员工小时总数与丢失的员工小时总数相加。 这将是一个成本函数,我们需要将其最小化。
> Defining Evaluation For the Genetic Algorithm — Defining the Cost Function. Picture by author.
我们可以增加人员过多或人手不足的权重,但在此示例中,我使它们相等。
步骤3 —如何为遗传算法编码交配(交叉)?遗传算法有两个关键步骤:交配(也包括交叉或*)和突变。
在交配步骤中,与自然选择一样,新一代是由父母群体的个体的后代形成的。
将此应用到我们的示例中,请考虑一下以后,我们将生成许多不太好的员工计划,并尝试将最好的计划结合在一起。 因此,我们需要定义一种将两个人(员工计划)彼此"混合"的方法。
在此示例中,我决定将其编码如下:
· 从人口中选择一个随机的妈妈
· 从人口中选择一个随机的父亲
· 创建一个与父级大小相同的子级,但随机填充零和一。
· 孩子的位置为一,我们从父亲那里获取数据,孩子的位置为零,我们从他母亲那里获取数据。
· 我们对每个孩子重复一次(孩子的数量等于人口数量)
> Defining Cross-Over For the Genetic Algorithm. Picture by author.
这是一种实现方法,还有许多其他方法可能。 为了使遗传算法起作用,在组合代码中具有随机性很重要。 当然,组合必须适合您在步骤1中选择的数据结构。
第4步-如何为遗传算法编码突变?遗传算法中的第二个重要步骤是变异。 它包括向新一代产品添加完全随机的更改。 这种随机变化允许为不再存在的总体添加新值。
例如,考虑一种情况,该算法进行了几次迭代,并且由于选择和组合过程中的随机性,已取消选择上午10点之前的所有开始时间。 没有突变,该算法将永远无法取回该值,而稍后可能会提供更好的解决方案。
(很少数量的)新值的随机插入有助于算法摆脱这种情况。
> Defining Mutation For the Genetic Algorithm. Picture by author.
在这里,它被编码为用0到10之间的随机值代替一个班次的持续时间或一个班次的开始时间的加法。如果我们指定n_mutations值,则可以重复该操作。
第5步-如何为遗传算法定义选择?选择过程非常简单:
· 首先,选择所有可行的解决方案:删除员工工作时间超过10小时的解决方案。