2011-10-27 8 views
0

bgl astar_searchのデフォルトのastar_visitor動作を変更しようとしています。ブーストグラフライブラリastar検索ユーザーを変更する

私は公共輸送を表すグラフを持っています - 停止は頂点であり、線はエッジです(頂点間に平行なエッジがあります)。アルゴリズムが使用しようとしている接続(エッジ)がその時間に利用可能かどうかを確認する必要があります(私たちは午前12時に夜間回線を使用できません)。

astar_visitorは私が意思決定を行うことができるexamine_edge関数を使用していますが、bgl astarにこのエッジが悪いことを知らせるためには何を呼び出すべきですか?

エッジを削除しないほうがいいです。グラフを一度ロードしてから、多くの時間を検索したいからです。

ありがとうございます。

答えて

0

boost :: astar_heuristicをご覧ください。

あなたはあなたのヒューリスティッククラスは「悪い」エッジに関する追加データを保持するデータ構造へのアクセス権を持っている必要があります)(

を独自のヒューリスティックを定義し、astar_searchにそれを渡すことができます。あなたは、アルゴリズムが解決の一部としてそれらを考慮しないことを意味する "悪い"を "高価"に翻訳する必要があります。

http://www.boost.org/libs/graph/doc/AStarHeuristic.html

+0

はい、あなたは正しいですが、それは問題を解決していない(または私は解決策を理解していません)。エッジの重みを変更すると、astar_searchを実行した後に変更されます。前にも述べたように、同じ(元の)グラフを数回使用する必要があります。もちろん、私は変更に関する情報を保存することができますし、結局はそれらを "リセット"しますが、よりよい解決策があると思います。たぶん、ファンクタを使用すると、ある種の状態マシンがそのケースを解決します。 astar_visitorでは、次回無視するように設定し、そのオプションが設定されている場合はweight関数で+ endを返し、そのオプションをfalseに設定します。 – myky

+0

@mykyヒューリスティッククラスの内部では、データ構造に不正な「エッジ」を設定できます。 astar_search()はすべてのエッジに対してヒューリスティックなオブジェクトを呼び出し、不良エッジのエッジが見つかった場合にルックアップする機会があります。 –

+0

Eddy、ありがとうございました。私はヒューリスティックについて知っていましたが、未知の理由で私はホイールを再発明するのではなくヒューリスティックで+ infを返すことについて戦っていませんでした。 – myky

関連する問題