在将算法应用于特定问题之前对其进行基准测试非常重要。否则,垃圾进去,垃圾出来。实施遗传算法(GA)与精英主义,我不知道如何测试它是否有效。
我考虑过打印出每一代的统计数据,例如均值,中位数和方差。但是,它们并不是真正强有力的指标。例如,最大适应度不能说什么,因为即使是精英主义的随机搜索,你也有不减少的最大适应度。平均值和中位数也没有说太多,因为它们偶尔会恶化,即使GA完全正确。
如果GA运作良好,有什么有效的测试方法?
答案 0 :(得分:2)
我决定算法是否正常工作的方法是绘制执行时的适应值图。像这样:
From my question on GA。 Y轴是最佳个体的健康水平(越少越好),X轴是时间或迭代次数。忽略红线 - 与问题无关
从图表中我可以确定我的算法是否卡在了车辙中并且没有进一步改进。
然而,我有一个了解已经很好的解决方案的优势,我可以将好的解决方案与GA执行的结果进行比较。这样我可以判断我的GA是否足够好。这并不总是可用,但您可以尝试自己解决问题的简单子集,并将结果与GA结果进行比较。
仅为了您的注意,我的论文的结论是GA可以为其他算法提供一个良好的起点,以找到更好的解决方案。并且GA不适合找到具有许多约束的复杂问题的最佳解决方案。
所以你可以非常努力地获得一个好的结果,但GA的性质不会给你。
答案 1 :(得分:2)
一个很好的方法是你有精英主义,这样你就可以确保你永远不会失去最好的个人。
然而,这并不意味着通过几代人你会看到进步。首先,您需要了解GA,最好的方法是使用参数(CROSSOVER RATE,MUTATION RATE,No。INDIVIDUAL,No. ITERATION,ELITISM VALUE)并查看结果。
正如trailmax所说,根据迭代次数可视化或打印出最佳个体。如果你发现最好的个人是"卡住",e.i。并没有真正显示进度,尝试更改参数,看看会发生什么。如果显示进度(好的,这太相对了!),您的算法可以工作。 :)
答案 2 :(得分:1)
Trailmax的答案还可以,但不完整。一般来说,GA的优化曲线与TrailMax提供的优化曲线非常相似,但要知道您的GA是否运行良好,我建议做两件事。
以迭代方式运行多个测试,改变您的种群大小,突变率和交叉率。每个问题都有不同的最佳设置,具体取决于破坏表示的容易程度,有多少本地最优等等。
如果你做得比随机搜索做得好,你的GA就会有所帮助。
GA的常见问题: 1.在许多约束的问题中,维修操作员或防止"破坏"解决方案可能是必要的。
如果你的突变率太高,你可能会破坏搜索。
如果你的突变率太低,你可能会错过重要的答案。
如果您的人口太少,您将无法找到很好的答案(过早收敛)。