1

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

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

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

  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 直到找到解决方案。

(这个过程当然可以很容易地被用来使用精英主义。)

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

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

这种使用“动态种群”的实现不适应进化算法是否存在合乎逻辑的原因?

4

3 回答 3

2

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

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

你已经提到了精英主义。截断选择在某种程度上与精英主义原理有关。您可能对完全消除一代概念的稳态选择(又名稳态遗传算法)特别感兴趣。

作为对各种相关优化方法(包括提到的优化方法)的一个很好的概述,我可以推荐Sean Luke 的《元启发式要点》一书(可免费获得;但您也可以购买以感谢作者)。

于 2018-05-19T09:42:34.097 回答
1

大多数进化方法都没有所谓的“逻辑原因”。一般来说——创建一些“定制”、“个人”的进化方法实现并不是一个好主意。有数十种已开发的方法,经过测试、评估、批评和纠正。假设“哦,我会这样做”形式的一个想法将比科学家们大量讨论的方法更好,这是相当幼稚的。更重要的是——这些方法并不是真正的“真正”机器学习方法——这些只是“模糊”(不是数学意义上的)启发式方法,以避免完全随机猜测。因此——对于几乎所有人来说,背后都没有真正的数学。至少有以下三种主要方式:

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

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

于 2013-10-18T17:23:42.677 回答
1

I don't see any reason to use your approach since your generations will overlap. You give up the ability of the GA to sample different regions of the solution space and you more or less fall back to some kind of trajectory-based algorithm. I am also not sure how selection will work and how do you choose the parents to produce only one child individual.

Regarding your idea about user interaction, I saw a paper some time ago: http://hal.inria.fr/docs/00/81/86/41/PDF/vizgec2013.pdf

Hope this helps.

于 2013-10-25T13:17:27.703 回答