Main Content

plannerAStar

그래프 기반 A* 경로 플래너

R2023a 이후

    설명

    plannerAStar 객체는 graph 객체로부터 A* 경로 플래너를 생성합니다. A* 알고리즘은 노드 탐색을 효율적으로 수행하기 위해 휴리스틱 함수를 사용하여 그래프에서 가장 짧은 경로를 찾습니다.

    생성

    설명

    예제

    planner = plannerAStar(graph)navGraph 객체 graph로부터 plannerAStar 객체를 생성합니다. graph 입력값은 Graph 속성의 값을 설정합니다.

    planner = plannerAStar(___,Name=Value)는 위에 열거된 구문의 입력 인수 외에 하나 이상의 이름-값 인수를 사용하여 속성을 설정합니다. HeuristicCostFcn 속성과 TieBreaker 속성을 이름-값 인수로 지정할 수 있습니다.

    속성

    모두 확장

    계획 환경의 Graph 객체로, navGraph 객체로 지정됩니다. digraph 객체를 사용하고 있다면 먼저 navGraph 객체로 변환해야 합니다. 플래너는 navGraph 객체의 링크(또는 간선) 가중치를 사용하여 경로 비용을 계산합니다.

    그래프에서의 상태와 목표 사이의 휴리스틱 비용으로, 미리 정의된 비용 함수 핸들 @nav.algs.distanceManhattan, @nav.algs.distanceEuclidean, @nav.algs.distanceEuclideanSquared, 사용자 지정 비용 함수 핸들 중 하나로 지정됩니다.

    비용 함수는 N×S 행렬인 state1state2를 받아야 합니다. 여기서 N은 상태 개수이고 S는 상태 벡터의 길이입니다. 함수는 휴리스틱 비용(H)으로 구성된 N개 요소의 열 벡터를 반환해야 합니다. 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

    우선 순위 결정 모드 켜기/끄기로, 논리형 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: [1x1 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)

    확장 기능

    버전 내역

    R2023a에 개발됨

    참고 항목

    객체

    함수