プロジェクトはメンテナンスを受けていません。最新バージョンについては、linqにアクセスしてください。
ヒューリスティックスイートは、一般的なプログラミングにおける一連のヒューリスティックアルゴリズムの実験的な実装です。このプロジェクトは、パズルをアルゴリズムで解決できる限り、あらゆるパズルに適用できるインフラストラクチャを提供することを目的としています。
実装されたアルゴリズム:
この実装は完全にオブジェクト指向であり、ICOMParer(T)やIequalityComparer(T)などの組み込み.NETフレームワーク比較メカニズムの利点があり、.NET標準および.NETエコシステム全体との優れた互換性を作成します。ソースコードは、UnityやXamarinなどの他のプラットフォームに簡単に持ち込むことができます。
アルゴリズムをパズルに適用するには、次の実装が必要です。
ステップ定義パズルのステップを定義するタイプは、ISTEP(TKEY)インターフェイスを実装するために必要です。 Keyプロパティは2つの目的を果たします。
ステップ比較ステップは、 Keyプロパティに基づいて互いに比較され、どれが優れたスコアがあるかを判断します。比較は、次の方法のいずれかで行うことができます。
Keyである明示的に与えられたh(n)関数。現在のステップの次のステップ情報から利用可能なステップは、 INextStepFactory(TKey, TStep)インターフェイスを実装するか、 NextStepFactoryデリゲートを提供することで提供できます。
その後、アルゴリズムは、パラメーターとしてgoalステップを使用しfrom FindSolutionメソッドを呼び出すことで実行できます。ソリューションが存在する場合、各ステップはEnumerateメソッドを呼び出すことで取得できます。列挙が開始される前に、手順Reverseことができます。
このプロジェクトは、異なるステップ比較シナリオに対してHeuristicComparerとDiscreteHeuristicComparerを提供します。
Keyプロパティを互いに直接比較できる場合、デフォルトでは、 DiscreteHeuristicComparerより速いステップ比較に使用されます。HeuristicComparerを使用して、従来の推定f(n)= g(n) + h(n)を実行します。HeuristicFunctionPreference Enumerationにより、ユーザーは推定f(n)= g(n) + h(n)のバランスを変更できます。 2つのステップが同じスコアを評価すると、列挙は最初にg(n)またはh(n)の関数を決定します。バランスの変更は、ヒューリスティックアルゴリズムの動作に影響を与える可能性があります。
パスファインディング(algorithmforce.example.pathfinding)
この例は、ヒューリスティックアルゴリズムを使用して解決する最も一般的で伝統的なパズルを示しています。
8-パズル(algorithmforce.example.eightpuzzle)
この例は、ヒューリスティックアルゴリズムで8パズルを解く方法を示しています。パズルの初期および目標の手順を以下に示します。
コインフリッピングパズル(algorithmforce.example.coinsflipping)
この例は、ゲームAIがパズルをひっくり返すコインをどのように解決するかを示しています。パズルでは、隣接するコインのペアだけが同時にひっくり返ることができます。頭である10個のコインがすべて目標です。パズルはBrillion.orgに触発されています。
将来、その他の例が追加されます。
現在、このプロジェクトは.NETコアと.NETフレームワーク4.5以上を対象としています。