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。它们是其他更长的东西,但我有点懒所以是的:P - 意味着没有更多的属性。请注意,none 是一个属性。感谢您的任何帮助!

4

2 回答 2

1

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

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

第二个问题:您要解决什么问题,遗传算法是否适合解决您的问题?

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

  1. 将问题变量域表示为固定长度的染色体,选择种群大小N,交叉概率p(c)和变异概率p(m)
  2. 定义适应度函数f(x)来衡量问题域中单个染色体的性能或适应度。适应度函数为选择在繁殖过程中交配的染色体奠定了基础
  3. 随机生成大小为 N 的初始染色体群体:x1 , x2 , ..., xn
  4. 计算每个染色体的适应度:f(x1) , f(x2) , ..., f(xn)
  5. 从当前种群中选择一对染色体进行交配。以与其适应度相关的概率选择父染色体。与不太适合的染色体相比,高度适合的染色体更有可能被选择进行交配。
  6. 通过应用遗传算子 - 交叉和变异来创建一对后代染色体
  7. 将创建的后代染色体放入新种群中
  8. 重复步骤 5,直到新染色体种群的大小等于初始种群的大小N
  9. 用新的(后代)种群替换初始(父)染色体种群
  10. 转到步骤 4 并重复该过程,直到满足终止标准。

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

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

于 2013-06-01T18:58:25.207 回答
0

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

如果这些假设是正确的并且属性集和可能的值不是太高,那么其中一个可能会起作用:

  • 如果这两组真的很小,你可以有一个 n 维数组作为个体/基因型。每个维度的大小都是 m(i),这个结构的每个值都是是/否的答案。这将是固定大小(位)向量的泛化(=更多维度)。如何创建随机/变异/交叉应该很容易。健身将是它做出良好预测的频率。

  • 如果它们更大,那么您将需要更复杂的东西。一种可能性是拥有规则列表。每个规则可以是一个长度为 n + 是/否标志的向量。在向量的每个位置,您都会有相关属性的可能值。你也可以有一个快乐的小丑属性来接受一切。规则解释 (p:person, r:rule) :如果 p1=r1 and p2=r2 and ... pn=rn 那么结果就是规则的标志。您必须评估规则,直到找到匹配的规则。您还需要一个默认值。在这种情况下,遗传运算符有点棘手,但我认为如果您搜索可变长度编码,您会发现一些东西。我使用了类似的编码(针对不同的问题)并且效果很好。

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

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

于 2013-05-15T19:15:49.313 回答