メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

plannerAStar

グラフベース A* パス プランナー

R2023a 以降

    説明

    plannerAStar オブジェクトは、グラフ オブジェクトから A* パス プランナーを作成します。この A* アルゴリズムでは、ノードの探索を効率的に誘導するために、ヒューリスティック関数を使用してグラフ内の最短パスを求めます。

    作成

    説明

    planner = plannerAStar(graph) は、navGraph オブジェクト graph から plannerAStar オブジェクトを作成します。graph 入力は、Graph プロパティの値を設定します。

    planner = plannerAStar(___,Name=Value) は、前述の構文の入力引数に加え、1 つ以上の名前と値の引数を使用してプロパティを設定します。HeuristicCostFcn および TieBreaker の各プロパティを名前と値の引数として指定できます。

    プロパティ

    すべて展開する

    プランニング環境のグラフ オブジェクト。navGraph オブジェクトとして指定します。digraph オブジェクトを使用する場合は、先に navGraph オブジェクトに変換する必要があります。プランナーは navGraph オブジェクトのリンク (またはエッジ) の重みを使用してパスのコストを計算します。

    グラフ内の状態からゴールまでのヒューリスティック コスト。事前定義されたコスト関数ハンドル @nav.algs.distanceManhattan@nav.algs.distanceEuclidean@nav.algs.distanceEuclideanSquared、またはカスタムのコスト関数ハンドルとして指定します。

    コスト関数は NS 列の 2 つの行列 state1state2 を受け入れなければなりません。ここで、N は状態の数、S は状態ベクトルの長さです。関数はヒューリスティック コストの N 要素の列ベクトル H を返さなければなりません。N が両方の入力で同じ場合、状態間のペアごとのコストが H に格納されます。それ以外の場合は、一方の行列が単一行でなければならず、その状態ともう一方の行列の各状態との間のコストが H に格納されます。最高のパフォーマンスを得るには、カスタム コスト関数をベクトル化します。

    例: HeuristicCostFcn=@nav.algs.distanceEuclidean

    例: HeuristicCostFcn=@(state1,state2)nav.algs.distanceManhattan(state1,state2,weight)

    例: HeuristicCostFcn=@(state1,state2)sqrt(sum((state1-state2).^2,2))

    データ型: function_handle

    タイブレーカー モードの切り替え。logical 0 (false) または 1 (true) のいずれかとして指定します。TieBreaker プロパティを有効にすると、同じ長さのパスが複数ある場合に、A* パス プランナーはヒューリスティック コストの値を調整していずれかを選択します。

    例: TieBreaker=true

    データ型: logical

    オブジェクト関数

    planFind shortest path between two states in graph
    copyCreate deep copy of A* path planner object

    すべて折りたたむ

    クイーンズランドの道路ネットワークを読み込みます。

    load("queenslandRoutes","places","routes")

    navGraph オブジェクトの状態、リンク、重みを指定します。

    states = places.utm;               % UTM coordinates of cities
    names = places.name;               % Names of cities
    links = [routes.start routes.end]; % Adjacent cities
    weights = routes.time;             % Travel time between adjacent cities

    navGraph オブジェクトを作成します。

    graphObj = navGraph(states,links,Weight=weights, ...
                        Name=names);

    グラフベース A* パス プランナーを作成します。

    planner = plannerAStar(graphObj);

    plannerAStar オブジェクトのディープ コピーを作成します。

    planner2 = copy(planner)
    planner2 = 
      plannerAStar with properties:
    
        HeuristicCostFcn: @nav.algs.distanceManhattan
              TieBreaker: 0
                   Graph: [1×1 navGraph]
    
    

    ヒューリスティック関数でゴールに到達するまでの推定時間を返すように指定します。

    planner.HeuristicCostFcn = @(state1,state2) ...
        sum(abs(state1-state2),2)/100;

    開始とゴールの都市を定義します。

    start = "Hughenden";
    goal = "Brisbane";

    グラフベース A* アルゴリズムを使用して最短パスを求めます。

    [pathOutput,solutionInfo] = plan(planner,start,goal);

    結果を可視化します。

    h = show(graphObj);
    set(h,XData=graphObj.States.StateVector(:,1), ...
          YData=graphObj.States.StateVector(:,2))
    pathStateIDs = solutionInfo.PathStateIDs;
    highlight(h,pathStateIDs,EdgeColor="#EDB120",LineWidth=4)
    highlight(h,pathStateIDs(1),NodeColor="#77AC30",MarkerSize=5)
    highlight(h,pathStateIDs(end),NodeColor="#D95319",MarkerSize=5)

    Figure contains an axes object. The axes object contains an object of type graphplot.

    拡張機能

    すべて展開する

    バージョン履歴

    R2023a で導入

    参考

    オブジェクト

    関数