【发布时间】:2015-08-08 19:51:25
【问题描述】:
我有一些基本的遗传算法知识,我编写了一个简单的应用程序来查找 X 最大化某个函数的值,但我现在正在努力解决的问题是染色体、个体、种群等应该如何看起来更复杂轮班计划等问题。假设我们有一些员工,一些班次,我们想将他们分配给彼此。遗传算法的关键部分如何使其适用于此类数据?
【问题讨论】:
标签: artificial-intelligence genetic-algorithm
我有一些基本的遗传算法知识,我编写了一个简单的应用程序来查找 X 最大化某个函数的值,但我现在正在努力解决的问题是染色体、个体、种群等应该如何看起来更复杂轮班计划等问题。假设我们有一些员工,一些班次,我们想将他们分配给彼此。遗传算法的关键部分如何使其适用于此类数据?
【问题讨论】:
标签: artificial-intelligence genetic-algorithm
让我做一些假设来展示如何为这个问题建立遗传算法模型的示例。
让每个染色体由 n 个二维元组组成。每个元组是一对班次和一个雇员 (s_i, e_i)。 n 个元组因此是所有员工到轮班的映射。因此,染色体看起来像这样:
{ {s_x1, e_y1}, {s_x2, e_y2}, ... {s_xn, e_yn} }
其中,xi, yi c {1,2, ..,n} 对于所有 i,
s_xi != s_xj for i != j,
e_yi != e_yj for i != j
根据n,我们可以拥有一组 D 个个体,每个个体都具有上述染色体配置。您可以从一开始就随机化 D 生物体的染色体配置开始(尽管可以有更好的方法来做到这一点)。
给定一代 D 个人选择任意两个个人,例如 d_i 和 d_j,进行 交叉。让我们在下一代获得 2 个孩子,比如 c_i 和 c_j。它应该看起来像这样(为简单起见,将 n 视为 4):
d_i = { {s_i1, e_i1}, {s_i2, e_i2}, s_i3, e_i3, {s_i4, e_i4} }
d_j = { {s_j1, e_j1}, {s_j2, e_j2}, s_j3, e_j3, {s_j4, e_j4} }
交叉复制,
c_i = { {s_i1, e_j3}, {s_i2, e_j2}, s_i3, e_j1, {s_i4, e_j4} }
c_j = { {s_j1, e_i3}, {s_j2, e_i2}, s_j3, e_i1, {s_j4, e_i4} }
对于更大的 n,你如何在计算上做到这一点,我会让你思考。
我也有一些关于如何将mutation应用于模型的想法,但我也会让你思考一下(此外,这只是一个让你入门的示例模型)。
假设您有一个称为员工满意度的成本适应度函数,它是个人内所有员工的幸福度(例如-10到10之间的整数)的总和人口。
现在,假设一个员工 (e_1) 如果给定一个班次 (s_1),他的幸福感是 -4,但如果给另一个班次 (s_4),他的幸福感是 10。
那么,总体中个体的适应度(员工满意度)可以简单地是(可以有更复杂的数学函数)所有n的幸福之和em> 员工。理想的最佳健身方案是所有员工有 10 个幸福和员工满意度与最差的健身(最少员工满意度)为n x -10。
【讨论】: