我应该如何测试遗传算法

Jam*_*oks 53 language-agnostic unit-testing non-deterministic genetic-algorithm

我做了很少的遗传算法; 他们工作(他们很快找到合理的解决方案).但我现在发现了TDD.有没有办法以TDD方式编写遗传算法(严重依赖于随机数)?

为了更一般地提出问题,如何测试非确定性方法/函数.这是我想到的:

  1. 使用特定的种子.如果我首先在代码中犯了一个错误,但在重构时有助于发现错误,那将无济于事.

  2. 使用已知的数字列表.与上面类似,但我可以手动遵循代码(这将非常繁琐).

  3. 使用常数.至少我知道会发生什么.当RandomFloat(0,1)总是返回1时,确保骰子总是读取6是很好的.

  4. 尝试尽可能多地从GA中移出非确定性代码.这看起来很愚蠢,因为这是它的目的的核心.

关于测试的非常好的书籍的链接也将受到赞赏.

Aid*_*ell 14

在我看来,测试其一致逻辑的唯一方法是应用一致的输入,...或者将每个迭代视为单个自动机,其状态在该迭代之前和之后进行测试,将整个非确定性系统转换为基于确定性的可测试组件迭代值.

对于迭代中的变化/繁殖/属性继承,在每次迭代的边界上测试这些值,并根据成功迭代 - 子测试的已知输入/输出测试所有迭代的全局输出...

因为算法是迭代的,所以你可以在测试中使用归纳来确保它适用于1次迭代,n + 1次迭代以证明它将为给定的输入范围/域产生正确的结果(无论数据确定性如何)以及对可能值的约束在输入中.

编辑我发现了这种测试非确定性系统的策略,可能会提供一些见解.一旦TDD /开发过程证明逻辑是合理的,对实时结果进行统计分析可能会有所帮助.