Tag: 非确定性

我应该如何testing一个遗传algorithm

我做了很less的遗传algorithm; 他们工作(他们迅速find合理的解决scheme)。 但是我现在已经发现了TDD 。 有没有办法用TDD的方式编写一个遗传algorithm (这个algorithm严重依赖于随机数)? 为了更一般地提出这个问题,你如何testing一个非确定性的方法/函数。 这是我想到的: 使用特定的种子。 如果我首先在代码中犯了一个错误,那么这将无法帮助,但是在重构时将有助于查找错误。 使用已知的数字列表。 与上面类似,但我可以通过手动跟踪代码(这将是非常乏味的)。 使用一个常数。 至less我知道该期待什么。 当RandomFloat(0,1)总是返回1时,确保骰子总是读取6是很好的。 尽量将尽可能多的非确定性代码移出GA。 这看起来很愚蠢,因为这是它的目的的核心。 链接到非常好的书籍testing也将不胜感激。

是否使用堆内存(malloc / new)创build一个非确定性的程序?

几个月前我开始用C开发空间应用程序的软件,也用C ++开发微控制器。 在这样的系统中有一个经验法则,那就是不应该创build堆对象 (所以不需要malloc / new),因为它使得程序不确定 。 当人们告诉我时,我无法validation这个声明的正确性。 那么这是一个正确的说法吗? 对我来说,困惑是,就我所知,决定论意味着运行一个程序两次将导致完全相同的执行path。 从我的理解,这是一个multithreading系统的问题,因为多次运行相同的程序可能会有不同的线程在不同的次序运行。