2013-05-15 92 views
0

我刚刚学习遗传算法时,我被赋予了一项任务,设计一个遗传算法,学习规则,预测如果一个人会投票是或否给出数据集。遗传算法的制作

我一直在阅读关于GA和GP的书籍和互联网连续两天。所以现在我理解了遗传算法关于种群管理,遗传算子,适应度函数和与不同类型的交叉口罩交叉的概念。但是我仍然无法为给定的数据集制作自己的GA。我只是没有得到如何开始或与什么,我有点绝望,因为我觉得我愚蠢的这一点。

因此,任何帮助,如提示,提示或伪代码,将不胜感激!

的给定的数据集如下(组):

G1 | G2 | G3 | G4

A1 | B1 | C1 |无

A2 | B2 | C2 | D2

A3 | B3 | C3 | D3

A4 | B4 | C4 | D4

A5 | - | - | D5

那么数据不是a,b,c's。他们是更长的东西,但我很懒惰,所以是:P - 意味着没有更多的属性。请注意,没有一个属性。 感谢任何帮助家伙!

+0

您必须更具体地了解您的数据代表什么,因为我不知道。我的第一个猜测是,G1-G4是一个人的财产,但是它缺少一个说明该人是否投票的领域。在一个侧面说明中,这并不是我称之为开始使用GAs的合适人选,这听起来有点高级。 – Dukeling

+0

我在人口中的每个基因组都像[决策树](http://en.wikipedia.org/wiki/Decision_tree)之前就已经看到了一种方法。这可能是一个起点。或者,这可能会使你**应该做的事情过分复杂化。 – Dukeling

回答

0

嗯,我不完全理解数据集的描述,所以我的回答是基于以下假设: 我们有一组属性,比如n个不同的属性。每个属性都有一组不同的可能符号(=非数字)值,比如m(i)个不同的可能性。每个人都有相同的属性,但其中一些可能缺失或无。

如果这些假设是正确的,一组属性和可能的​​值不太高,那么其中一个可能的工作:

  • 如果这两套都是非常小的,你可以有正维数组作为个体/基因型。每个维度的大小都是m(i),这个结构的每个值都是yes/no的答案。这将是固定大小(比特)向量的泛化(=更多维度)。如何创建随机/变异/交叉应该很容易。健身将会是多久才能做出好的预测。

  • 如果它们比较大,那么你需要更复杂的东西。一种可能性是有规则清单。每个规则可以是长度为n + a是/否标志的矢量。在矢量的每个位置上,您都可能有相关属性的可能值。你也可以有一个快乐的小丑属性接受一切。 解释规则(p:person,r:规则):如果p1 = r1且p2 = r2且... pn = rn,则结果是规则的标志。 您必须评估规则,直到找到匹配的规则。你还需要一个默认值。 在这种情况下遗传算子有点棘手,但我认为如果您搜索可变长度编码,您会发现一些东西。 我已经使用了类似的编码(对于不同的问题),它工作正常。

  • 为了使它更通用(但也更复杂),您可以将规则表示为树,其中内部节点是和/或不是和可能是其他逻辑运算符,叶子是谓词pi = ri。如果你喜欢这个解决方案,这将是一种遗传编程,谷歌。

说实话,我不是100%确定如果遗传算法是这个问题的最佳选择,特别是如果值不是符号,但数字。这似乎是一个模式匹配问题,为此有更好的解决方案。我会寻找一些替代品,例如数字情况下的神经网络。

+0

感谢您的提示。 @Sandor数据集和前面的文章中描述的一样大,我必须使用GA,因为它是一个需求。所有的价值观都是象征性的,如果我明白你是正确的。例如G1包含诸如黑色,白色,棕色等人的颜色。该任务基于我以前在另一种情况下使用的先前数据集。该数据集的投票是/否,并且即时猜测,因为在这个问题中没有提到它,所以决定是否使用该分类取决于我。仍然不太确定如何解决这个问题,希望得到更具体的东西。 – Celly

1

首先,首先,您必须首先确定您想要用数据集解决的问题。您通常使用遗传算法来处理非确定性问题:需要很长时间才能解决的问题,但是其答案很容易验证。

所以第一个问题是:你的数据集代表什么?

第二个问题:你想要解决什么问题,是遗传算法的一种拟合方法来解决你的问题?

无论如何,创建遗传算法是通过以下步骤来完成:

  1. 表示问题可变结构域作为固定长度的染色体中,选择群体Ñ,交叉概率的大小p(c)和突变概率p(m)
  2. 定义适应度函数f(x)来测量问题域中个体染色体的性能或适应度。适应度函数规定,将再现
  3. 期间相配合
  4. 随机产生的大小为N的染色体的初始群体,用于选择染色体的基础:X1X2,...,XN
  5. 计算健身每个单独的染色体:F(X1)F(X2),...,F(xn)映射
  6. 选择一对染色体的,用于从当前群体交配。亲本染色体的选择与它们的适应性有关。高度适合的染色体被选择用于交配的概率高于不适合的染色体。
  7. 通过将遗传算子创建一对后代的染色体 - 交叉和变异
  8. 放入新群体中的创建的后代的染色体
  9. 重复步骤5,直到新的染色体群体的大小变得等于的大小初始群体ñ
  10. 与新的(后代)人口
  11. 转到更换初始(亲本)染色体人口到步骤4,直到终止准则被满足重复该过程。

因此,您必须为您的解决方案(例如位数或字符串数​​组)找到一个符号,以便您轻松地交换部分染色体。然后你必须确定交叉和变异操作。 如果您正在处理有序染色体,那么取决于应用的交叉策略,您可能必须在之后修复染色体。有序染色体是一个染色体,其中的顺序或基因很重要。如果你在代表旅行推销员访问的两个解决方案上进行标准交叉,那么你最终可能会染上一个染色体,他会访问一些城市两次或更多,而有些则根本没有!

关于如何在遗传算法中翻译每个问题没有明确的描述,因为每个问题都不相同。上述步骤不会改变,但您可能需要引入几种不同的交叉和变异操作来防止过早收敛。