我想知道是否有关于种群大小的普遍规则。我在一本书中读到,染色体长度的2倍是一个不错的起点。那么,如果我有一个包含5个变量的方程,我应该设置10个种群,这样的假设是否正确?
我还想知道以下内容是否正确:
较大种群规模。
优点:更大的多样性,因此更有可能发现带来良好适应度的特征。
缺点:需要更长时间处理。
vs
较小种群规模。
优点:单位时间内经历的世代数更多。
缺点:为了弥补较小的种群,突变必须更加突出??
编辑
补充一些信息,假设我有一个包含5个未知参数的方程。对于每个参数,我有10到50个不同的值想要尝试分配给这些变量。例如
变量1 = 20个不同值变量2 = 15个不同值…
我认为对于这种搜索空间相当大的问题,遗传算法是一个不错的方法,即上述情况的最坏情况将有312,500,000种排列组合(除非我搞错了?)n!/(n-k)!其中n = 50且k = 1 => 50 * 50 * 50 * 50 * 50
不幸的是,参数的数量/要检查的值范围可能会有很大变化,所以我在寻找某种关于如何设置种群大小的经验法则。
感谢您的帮助+如果您需要更多信息/更喜欢在聊天室讨论,请随时告诉我。
回答:
我不确定您在哪里读到染色体长度的2倍是一个好的起点,但我猜测这是一本专注于较大问题的书。
如果您只有五个变量,遗传算法可能不是找到解决方案的正确选择。染色体长度为五,您可能会发现自己很快就达到了一个非确定性(这会在后续运行中改变)的局部最小值,并在这个空间周围缓慢迭代,直到找到真正的局部最小值。
然而,如果您坚持要使用遗传算法,我建议您放弃这个经验法则来解决这个问题,真正考虑将初始种群作为随机解决方案与最终解决方案的距离的度量。
许多经验法则依赖于染色体长度的原因是因为这是一个不错的代理,如果我有一百个变量,那么随机生成的DNA序列与只有一个变量的情况相比,将离理想状态更远。
此外,如果您担心计算强度,我要说这不应该是个问题,因为您处理的是如此小的解决方案集。我认为对于这样的小集合,一个更好的经验法则是这样的:
(ln(chromosome_length*(solution_space/granularity)/mutation_rate))^2
可能还需要添加一个常数来适应特定问题。
这当然不是一个很好的经验法则(没有经验法则是完美的),但这是我的逻辑:
- 染色体长度只是解决方案空间大小的代理,因此考虑解决方案空间的大小将必然提高这个代理的准确性
- 较小的突变率需要较大的种群规模来补偿您更容易陷入局部最小值的事实
- 任何经验法则都应该以对数方式缩放,因为遗传算法类似于对解决方案空间的树形搜索。
- 平方项主要是尝试的结果,但看起来对数缩放有点激进,尽管总体形状看起来是正确的。
然而,我认为更好的选择是从一个合理的数字(100)开始,并尝试向上和向下调整,直到找到一个似乎在准确性和执行速度之间达到平衡的种群大小。