具有“动态人口”的进化算法

时间:2013-10-18 14:58:00

标签: machine-learning genetic-algorithm evolutionary-algorithm

我想使用进化/遗传算法解决问题。它与艺术有关 - 观看算法的人应尝试一条染色体(=可能的解决方案),并应根据其口味进行评估。

使用这种设置,评估过程(可以说)相当昂贵 - 每个染色体需要花费大量时间进行测试。为了确保在可行的时间内取得进展(这意味着经常改变世代),我必须接受一个小的人口规模(也有缺点)。另一种选择是拥有更大的人口规模,但只有几代人。

我想到了一个不同的解决方案,我想称之为“动态人口”。它会像这样工作:

  1. 根据人口规模x,要设置算法,x染色体是随机创建的,编号从1到x,表示他们的age
  2. 评估初始种群染色体的适合度。
  3. 使用交叉和/或突变机制创建一条新的染色体。 age = 1被分配给这个新的染色体。所有其他染色体长一步(age = age + 1)。从群体中移除具有age > x的染色体。 (在交叉机制产生两条染色体作为后代的情况下,选择一个孩子获得age = 1另一个获得age = 2和其他染色体age = age + 2
  4. 重复1 - 3直到找到解决方案。
  5. (这个过程当然可以很容易地被用来使用精英主义。)

    使用这样的机制,每次评估时,每个(新的)染色体和(在我的情况下更重要的)染色体都会有(可能的)进展。

    但我也可以想到一些缺点......

    是否存在使用“动态填充”的实现不符合进化算法的逻辑原因?

3 个答案:

答案 0 :(得分:1)

大多数进化方法都没有“逻辑上的理由”。一般来说 - 创建一些“自定义”,“个人”实施的进化方法不是一个好主意。有许多已开发的方法,经过测试,评估,批评和纠正。假设,“哦,我将这样做”的形式的一个想法将比那些经过深思熟虑的科学家方法更加天真。更重要的是 - 这种方法并不是真正的“真正的”机器学习方法 - 这些方法只是“模糊”(不是数学意义上的)启发式方法,以避免完全随机猜测。因此 - 对于他们几乎所有而言,其背后并没有真正的数学。至少有三种主要方式:

  • 如果你想要一个“逻辑原因”,那么为你的问题选择一些现有的,数学上正确的模型,可能是一些高斯过程,基于多武装强盗的方法等。如果你的可能性有限实际测试和评估(这似乎是你需要用户输入的情况)这看起来是最好的选择 - 所以没有进化。
  • 如果你有空闲时间,并且你可以进行一些实验 - 那么选择一种似乎适合你需要的现有的进化方法 - 科学家们的希望已经面临类似的问题 - 只是谷歌的论文
  • 如果你有大量时间那么考虑一下你自己的策略,测试,评估,修改 - 这是一个非常复杂(而且代价高昂)的过程,不能保证任何结果(但是会给你一些关于你直觉的答案)

我不是进化算法领域的专家,但我已经看到了与此处概述的非常相似的模型和算法,因此您很可能找到评估此类方法的论文和一些有价值的讨论部分。

答案 1 :(得分:1)

我认为没有理由使用您的方法,因为您的世代会重叠。您放弃了GA对解空间的不同区域进行采样的能力,并且您或多或少地回退到某种基于轨迹的算法。我也不确定选择是如何起作用的,你如何选择父母只生产一个孩子。

关于您关于用户互动的想法,我前段时间看过一篇论文:http://hal.inria.fr/docs/00/81/86/41/PDF/vizgec2013.pdf

希望这有帮助。

答案 2 :(得分:1)

而不是使用具有未知属性的临时解决方案,我建议首先尝试一些相关的知名技术,例如:

  • 精英
  • 截断选择
  • 稳态遗传算法

你已经提到了精英主义。截断选择与精英主义原则有某种联系。你可能特别感兴趣的是稳态选择(又名稳态遗传算法),它消除了一代人的概念

作为对各种相关优化方法(包括上述方法)的一个很好的概述,我可以推荐Sean Luke的书"Essentials of Metaheuristics"(可以免费获得;但你也可以买它来感谢作者)