我想使用进化/遗传算法解决问题。它与艺术有关 - 观看算法的人应该尝试一条染色体(=可能的解决方案),并根据自己的品味对其进行评估。
使用这种设置,评估过程(可以说)相当昂贵——测试每条染色体需要花费大量时间。为了确保在可行的时间内取得进展(这意味着频繁的世代更替),我必须接受人口规模较小(这也有缺点)。另一种选择是拥有更大的人口规模,但只有几代人。
我想到了一个不同的解决方案,我称之为“动态人口”。它会像这样工作:
- 在种群大小为
x
的情况下,为了设置算法,会随机创建x
条染色体,并从 1 到x
进行编号,这表示它们的>年龄
。 - 评估初始种群染色体的适合度。
- 使用交叉和/或突变机制创建一条新染色体。
age = 1
被分配给这条新染色体。所有其他染色体都会变老一步(年龄 = 年龄 + 1
)。age > x
的染色体从群体中移除。 (在交叉机制产生两条染色体作为后代的情况下,选择一个 child 获得age = 1
,另一个 child 获得age = 2
,而对于其他染色体年龄 = 年龄 + 2
) - 重复 1 - 3,直到找到解决方案。
(这个过程当然可以很容易地被采用来使用精英主义。)
使用这样的机制,每个(新)染色体以及(在我的情况下更重要的)每次评估都会有(可能的)进展。
但是我也能想到一些缺点......
这种使用“动态群体”的实现不适合进化算法是否有逻辑原因?
最佳答案
与其采用具有未知属性的临时解决方案,我建议首先尝试一些相关的众所周知的技术,例如:
- 精英主义
- 截断选择
- 稳态遗传算法
你已经提到了精英主义。截断选择在某种程度上与精英主义原则有关。您可能对稳态选择(又名稳态遗传算法)特别感兴趣,它完全消除了一代的概念。
作为对各种相关优化方法(包括提到的)的一个很好的概述,我可以推荐这本书 "Essentials of Metaheuristics"作者:Sean Luke(免费提供;但您也可以购买它以感谢作者)。
关于machine-learning - "dynamic population"的进化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452780/