Java で遺伝的アルゴリズムを作成しました。これは、複数のアプリケーションに追加できるライブラリの形式です。開発中に、機能テストとなる (jUnit) テストをいくつか作成しましたが、アルゴリズムが非決定論的であるため、それらにはアサートがありません。そのため、これらは自動テストには適していません。また、後で実行したときに、ソリューションを確認するために時間を費やさなければなりません。
ソリューションは車両ルートであり、XLS 形式で出力でき、実際のテストは必要なときに行われるため、その瞬間に何を探すべきかがわかります。それらには距離値と時間値があり、すべての例とルート自体に妥当な値があり、特定のジグザグがあってはなりませんが、ジグザグが必要な場合もあります。
値がその妥当な範囲内にあると断言できますが、これらは明確ではなく、悪い解決策を残していないと確信できません。人々が何をしているのか、またはこの問題についてどう思うかを知ることは素晴らしいことです.
編集: 目標を明確にするには:
- 単体テストはかなり解決されています。さまざまな関数のロジック コードから乱数生成コードを分離することができ、テスト コードから非乱数を渡すロジック関数をテストします。
- Cucumber または Selenium テストのように、偽のデータを使用せずにいくつかの機能テストを実行したいと考えています。実数出力を生成する実数入力。(Cucumber や Selenium を具体的に使いたいと言っているのではなく、私が求めているのは単体テストではなく、アルゴリズムの動作は本物でなければならず、決して偽造されてはならないということだけです)
ライブラリはさまざまなプロジェクトで使用され、すべてのプロジェクトの入力データは同じモデルに従いますが、さまざまな方法で偏っています。あるプロジェクト データでは、同じポイントが何度も繰り返される場合がありますが、別のプロジェクトではそうではありません。制限容量に非常に速く到達する車両がある場合もあれば、この制限にほとんど到達しない場合もあります。
目標は、挿入されたすべてのプロジェクトからサンプル データを取得して、アルゴリズムの変更中にアルゴリズムの動作をすばやくフィードバックすることです (突然変異またはクロスオーバー オペレーターの変更または追加、新しいパラメーター化の追加など)。したがって、その動作は決して偽造されてはなりません。
これらすべてを考慮して、私が尋ねる問題は、動作全体を効果的に主張する方法を見つけることです。他の人がこの問題にどのように対処したか、またはそれについて何を言うことができるかを尋ねたかった.