実行ごとに異なる結果を生成するいくつかの異なる最適化アルゴリズムがあります。たとえば、最適化の目標は、関数の最小値を見つけることです。ここで、0 はグローバル最小値です。最適化を実行すると、次のようなデータが返されます。
[0.1, 0.1321, 0.0921, 0.012, 0.4]
これは大域的最小値に非常に近いため、これで問題ありません。私たちの最初のアプローチは、しきい値を選択するだけで、高すぎる結果が発生した場合に単体テストを失敗させることでした。残念ながら、これはまったく機能しません。結果はガウス分布のように見えるため、可能性は低いですが、アルゴリズムがまだ問題なく、運が悪かっただけでも、テストが失敗することがあります。
では、どうすればこれを適切にテストできますか? ここではかなりの統計が必要だと思います。また、テストが依然として高速であることも重要です。テストを数 100 回実行して平均を取るだけでは遅すぎます。
ここにいくつかのさらなる説明があります:
たとえば、円を一連の点に合わせるアルゴリズムがあります。非常に高速ですが、常に同じ結果が得られるとは限りません。ほとんどの場合、それで十分であることを保証する単体テストを作成したいと思います。
残念ながら、アルゴリズムが以前とまったく同じ結果を生成するかどうかをテストしたくないため、乱数ジェネレーターに固定シードを選択することはできませんが、「90% の確実性で 0.1 またはより良い"。