我正在学习遗传算法,当我被赋予设计遗传算法的任务时,该算法学习规则,预测一个人在给定数据集的情况下是否投票。
我已经连续两天阅读有关GA和GP的书籍和互联网。所以我现在理解GA的概念,关于人口管理,遗传算子,适应度函数以及与不同类型的交叉掩模的交叉。但是我仍然无法为给定的数据集创建自己的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都不是属性。 感谢任何帮助人员!
答案 0 :(得分:1)
首先,最重要的是,您必须首先确定您要使用数据集解决的问题。您通常使用遗传算法来解决非确定性问题:需要很长时间才能解决的问题,但其答案很容易验证。
所以第一个问题是:你的数据集代表什么?
第二个问题:你想解决什么,遗传算法是解决问题的合适方法?
无论如何,通过以下步骤创建遗传算法:
p(c)
和变异概率p(m)
因此,您必须为您的解决方案找到一个符号(例如位数组或字符串),以便您轻松交换部分染色体。然后你必须确定交叉和变异操作。 如果您正在处理有序染色体,那么根据应用的交叉策略,您可能必须在之后修复染色体。有序染色体是序列或基因重要的染色体。如果你在一个代表旅行商必须访问的城市的两个解决方案上预先形成一个标准交叉,那么你可能最终得到一个染色体,在那里他访问了一些城市两次或更多,而一些城市根本没有!
对于如何翻译遗传算法中的每个问题没有明确的描述,因为它对每个问题都有所不同。上述步骤不会改变,但您可能需要引入几种不同的交叉和变异操作,以防止过早收敛。
答案 1 :(得分:0)
好吧,我不完全理解数据集的描述,所以我的答案基于以下假设: 我们有一组属性,比如n个不同的属性。每个属性都有一组不同的可能符号(=非数字)值,比如m(i)不同的可能性。每个人都有相同的属性,但其中一些可能会丢失或无。
如果这些假设是正确的,并且属性集和可能的值不是太高,那么其中一个可能有效:
如果这两个集合非常小,您可以将n维数组作为个体/基因型。每个维度的大小为m(i),该结构的每个值都是是/否答案。这将是固定大小(位)向量的推广(=更多维度)。如何创建random / mutate / crossover应该很容易。健身将是多久进行一次良好的预测。
如果它们更大,那么你将需要更复杂的东西。一种可能性是列出规则。每个规则可以是长度为n + a yes / no flag的向量。在向量的每个位置,您将获得相关属性的可能值。你也可以有一个快乐的小丑属性接受一切。 解释规则(p:person,r:rule):如果p1 = r1且p2 = r2且... pn = rn则结果是规则的标志。 在找到匹配的规则之前,您必须先评估规则。您还需要一个默认值。 在这种情况下,遗传算子有点棘手,但我认为如果搜索可变长度编码,你会发现一些东西。 我使用了类似的编码(针对不同的问题)并且工作正常。
说实话,我不能100%确定遗传算法是否是这个问题的最佳选择,特别是如果这些值不是符号,而是数字。它似乎是一个模式匹配问题,为此有更好的解决方案。我会寻找一些替代方案,例如数字案例中的神经网络。