グラフ検索の最適化問題を解決しています。有向グラフを介して、k個の最適な非循環最短経路を見つける必要があります。
正確で近似的なk-bestアルゴリズムが多数あることは知っていますが、最近の研究のほとんどは、非常に大きく、非常にまばらに接続されたグラフ(道路のルーティングや方向など)を対象としているようです。
私の問題の側面を区別する:
グラフは約160の頂点で構成されています。
グラフはほぼ完全に接続されています(双方向であるため、〜160 ^ 2〜= 25kエッジ)
kは非常に小さい(おそらく10未満)
最大パス長はおそらく制限され、同様に非常に小さくなります(例:3-5エッジ)
上記で「非周期的」と言いましたが、繰り返しますが、ソリューションにはサイクルを含めることはできません。これは1-best最短パスの問題ではありませんが、k-bestの問題になります-たとえば、道路のルーティングを検討すると-AからBへの2番目の最短パスは1-bestと同じで、どこかのブロックの周りの簡単な旅行。それは数学的に最適かもしれませんが、あまり有用な解決策ではありません。;-)
計算ごとに、エッジをその場で再重み付けする必要がある場合があります。エッジコストはいくつかの要因の加重合計で構成され、最終要件(取得する場合はいつでも)により、ユーザーはそれらの加重要因の独自の優先順位を指定して、エッジの重みを変更できます。これは比較的小さなグラフであるため(数百KBで表すことができるはずです)、メモリ内でグラフを複製し、再重み付けを適用してから、複製されたグラフで検索を実行するのが妥当です。しかし、その場で重みを計算しながら検索を実行するより効果的な方法があれば、興味があります。
Santos(K最短パスアルゴリズム)、Eppstein 1997(k最短パスの検索)などで説明されているアルゴリズムを探しています。Yenのアルゴリズムは、主に既存のJava 実装のために興味深いものです。私は研究論文を読むことを恐れていませんが、私の問題の詳細を捨てて、読書時間を節約するための指針を求めることは価値があると思いました。
また、Java実装へのポインターがある場合は、さらに良いでしょう。