我想使用进化/遗传算法解决问题。它与艺术有关 - 观看算法的人应尝试一条染色体(=可能的解决方案),并应根据其口味进行评估。
使用这种设置,评估过程(可以说)相当昂贵 - 每个染色体需要花费大量时间进行测试。为了确保在可行的时间内取得进展(这意味着经常改变世代),我必须接受一个小的人口规模(也有缺点)。另一种选择是拥有更大的人口规模,但只有几代人。
我想到了一个不同的解决方案,我想称之为“动态人口”。它会像这样工作:
x
,要设置算法,x
染色体是随机创建的,编号从1到x
,表示他们的age
。age = 1
被分配给这个新的染色体。所有其他染色体长一步(age = age + 1
)。从群体中移除具有age > x
的染色体。 (在交叉机制产生两条染色体作为后代的情况下,选择一个孩子获得age = 1
另一个获得age = 2
和其他染色体age = age + 2
)(这个过程当然可以很容易地被用来使用精英主义。)
使用这样的机制,每次评估时,每个(新的)染色体和(在我的情况下更重要的)染色体都会有(可能的)进展。
但我也可以想到一些缺点......
是否存在使用“动态填充”的实现不符合进化算法的逻辑原因?
答案 0 :(得分:1)
大多数进化方法都没有“逻辑上的理由”。一般来说 - 创建一些“自定义”,“个人”实施的进化方法不是一个好主意。有许多已开发的方法,经过测试,评估,批评和纠正。假设,“哦,我将这样做”的形式的一个想法将比那些经过深思熟虑的科学家方法更加天真。更重要的是 - 这种方法并不是真正的“真正的”机器学习方法 - 这些方法只是“模糊”(不是数学意义上的)启发式方法,以避免完全随机猜测。因此 - 对于他们几乎所有而言,其背后并没有真正的数学。至少有三种主要方式:
我不是进化算法领域的专家,但我已经看到了与此处概述的非常相似的模型和算法,因此您很可能找到评估此类方法的论文和一些有价值的讨论部分。
答案 1 :(得分:1)
我认为没有理由使用您的方法,因为您的世代会重叠。您放弃了GA对解空间的不同区域进行采样的能力,并且您或多或少地回退到某种基于轨迹的算法。我也不确定选择是如何起作用的,你如何选择父母只生产一个孩子。
关于您关于用户互动的想法,我前段时间看过一篇论文:http://hal.inria.fr/docs/00/81/86/41/PDF/vizgec2013.pdf
希望这有帮助。
答案 2 :(得分:1)
而不是使用具有未知属性的临时解决方案,我建议首先尝试一些相关的知名技术,例如:
你已经提到了精英主义。截断选择与精英主义原则有某种联系。你可能特别感兴趣的是稳态选择(又名稳态遗传算法),它消除了一代人的概念。
作为对各种相关优化方法(包括上述方法)的一个很好的概述,我可以推荐Sean Luke的书"Essentials of Metaheuristics"(可以免费获得;但你也可以买它来感谢作者)