이 코드에서는 astar 함수 내의 값비싼 휴리스틱 계산으로 인해 성능 저하가 발생합니다. 성능을 향상하려면 다음을 고려하십시오.
분석에서 알 수 있듯이 스택 샘플링과 같은 프로파일링 도구는 성능 병목 현상을 빠르게 식별할 수 있습니다. 스택 추적을 조사하면 과도한 시간을 소비하는 명령문을 찾아낼 수 있습니다.
휴리스틱 함수인 휴리스틱은 전체 구성 배열을 불필요하게 반복하여 상당한 오버헤드를 발생시킵니다. 보다 효율적인 접근 방식은 배열을 순회하는 동안 fCamel과 bCamel의 합계를 유지하는 것입니다.
def heuristic(formation): fCamels, bCamels = 0, 0 for i in formation: if i == fCamel: fCamels += 1 elif i == bCamel: bCamels += fCamels * bCamels # Update to fCamel * bCamel differences else: pass return bCamels
astar 함수 내에서 openlist는 우선순위 대기열입니다. f 값을 기준으로 노드를 정렬합니다. openlist.put 호출은 f 값이 이미 계산되어 노드 객체에 저장되어 있기 때문에 불필요한 오버헤드를 발생시킵니다.
보다 효율적인 접근 방식은 노드 클래스에 대한 __lt__ 연산자를 재정의하여 f 값을 직접 비교하는 것입니다. 이렇게 하면 openlist.put에 f 매개변수가 필요하지 않습니다.
def __lt__(self, other): return self.f < other.f
또한 A* 알고리즘에서 요구하는 대로 열린 목록이 f 값의 오름차순으로 유지되는지 확인하세요. 대기열 모듈의 기본 구현은 이 동작을 보장하지 않습니다.
위 내용은 경험적 기능과 우선순위 대기열 관리를 개선하여 A* 알고리즘 성능을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!