StudyRepository
Published 2023. 5. 9. 20:51
A star pathfinder 인공지능
728x90

 

 

 

 

 

https://github.com/nexmin0805/A_star_Pathfinder

 

GitHub - nexmin0805/A_star_Pathfinder

Contribute to nexmin0805/A_star_Pathfinder development by creating an account on GitHub.

github.com

 

 

 

 

코드는 A* 경로 찾기 알고리즘을 시각화하는 프로그램입니다. Pygame 라이브러리를 사용하여 그래픽 사용자 인터페이스를 구현하였습니다. 프로그램은 사용자가 장애물을 생성하거나 랜덤하게 생성할 있고, 마우스를 드래그하여 시작점 도착점을 설정할 있게 해주며, 가지 휴리스틱 방식(맨하탄 거리, 유클리드 거리) 하나를 선택하여 A* 알고리즘을 실행할 있습니다.

 

 

 

1. screen.py: GUI 그리기 함수와 버튼 처리를 구현합니다.

2. block.py: 그리드의 셀에 대한 클래스 기능을 구현합니다.

3. search.py: A* 알고리즘을 구현하고, 시작 노드와 종료 노드 간의 최단 경로를 찾습니다.

4. main.py: 애플리케이션을 실행하고 사용자 인터페이스와 상호작용을 관리합니다.

 

 

1. screen.py

`screen.py` 파일은 GUI 그리기 함수와 버튼 처리를 구현합니다. 주요 기능은 다음과 같습니다.

 

- `draw(win, grid, rows, width, manhattan_checked, euclidean_checked)`: 윈도우 객체에 그리드, 버튼 체크박스를 그립니다.

- `draw_grid(win, rows, width)`: 그리드 라인을 그립니다.

- `draw_buttons(win, width, manhattan_checked, euclidean_checked)`: 사용자 인터페이스의 버튼과 체크박스를 그립니다.

- `get_clicked_pos(pos, rows, width)`: 클릭한 위치를 기반으로 그리드 내의 행과 열을 반환합니다.

- `handle_buttons(pos, width)`: 클릭한 위치를 기반으로 버튼 체크박스 이벤트를 처리합니다.

 

 

 

2. block.py

`block.py` 파일은 그리드의 셀에 대한 클래스 기능을 구현합니다. 주요 기능은 다음과 같습니다.

 

- `Cell` 클래스: 셀의 속성과 메서드를 정의합니다. 셀은 다양한 상태(열림, 닫힘, , 시작, 종료, 경로) 가질 있습니다.

- `make_grid(rows, width)`: 주어진 수에 대한 그리드를 생성하고 객체를 초기화합니다.

 

 

 

3. search.py

`search.py` 파일은 A* 알고리즘을 구현하며, 주요 기능은 다음과 같습니다.

 

- `h(p1, p2, heuristic)`: 간의 휴리스틱 (Manhattan 또는 Euclidean) 계산합니다.

- `reconstruct_path(came_from, current, draw)`: 마지막 노드에서 시작 노드까지 역추적하여 경로를 구성합니다.

- `a_star(draw, grid, start, end, heuristic_func)`: A* 알고리즘을 구현하고, 시작 노드와 종료 노드 간의 최단 경로를 찾습니다.

- `no_solution_path(came_from, lowest_f_node, draw)`: 경로가 발견되지 않은 경우, 가장 낮은 F 값을 가진 노드로 역추적하여 경로를 구성합니다.

 

 

4. main.py

`main.py` 파일은 애플리케이션을 실행하고 사용자 인터페이스와 상호작용을 관리합니다. 주요 기능은 다음과 같습니다.

 

- `make_buttons()`: 버튼 체크박스의 위치와 크기를 설정합니다.

- `main(win, width)`: 애플리케이션의 메인 루프를 실행합니다. 함수는 그리드를 초기화하고 이벤트 처리를 수행합니다. 사용자가 버튼을 클릭하면 해당 작업이 수행됩니다(: 경로 찾기 시작, 무작위 생성, 그리드 리셋 ). 또한 사용자가 선택한 휴리스틱(Manhattan 또는 Euclidean) 따라 A* 알고리즘이 실행됩니다.

- `if __name__ == "__main__":` 명령줄 인수를 처리, 프로그램을 실행. 그리드의 , 너비 장애물 비율을 설정 가능합니다.

 

 

 

 

 

 

 

 

1. 그리드 크기, 너비, 장애물 비율을 설정하고 프로그램을 실행.( Grid cells 행은 ‘r’, 원도우의 크기는 ‘w’, inc obstacle ratio ‘o’argparse 이용하여 command line에서 입력받을 있도록 했습니다.). (ex. python main.py -r=60)

 

 

 

2. • 장애물 - 사용자 배치: 다음으로 사용자 배치에서는, grid world상의 마우스 클릭된 grid cell focus cell이라 할때 해당 cell 비어있다면 장애물로 바뀝니다. 만약 해당 focus cell 장애물이었다면 toggle되어 다시 비어있는 cell 뀝니다.

 

 

3. 시작지점과 목표지점: 시작지점과 목표지점은 초기에 고정위치에 표시되도록 하고, 사용자 마우스 drag 통해 이동될 있도록 했습니다.

 

 

 

 

4. A* Search 수행: Start A* Search 버튼 클릭시 A* search 수행하여, 최단경로를 찾을 경우 해당 경로를 yellow line으로 표시합니. 또한, 콘솔화면에 해를 탐색할때까지의 explored nodes갯수를 출력합니다.

 

 

5. A* Search Heuristic 함수: 휴리스틱 함수로 현재 node 위치와 gold node위치간의 1) Manhattan 거리, 2) Euclidean 거리 가지중 하나를 화면 우측의 ratio button 통해 선택할 있도록 했습니다.

-Manhattan거리

-2. Euclidean 거리

6. A* Search 결과 - 해가 없을 : 만약 A* search 결과 해가 없다면, 솔화면에 path 발견되지 않았다는 메시지를 출력합니다.

 

 

 

 

 

 

프로젝트의 장점과 단점

 

장점:

  • 사용자가 직접 그리드를 그려 경로를 탐색할 있습니다.
  • 가지 휴리스틱 (Manhattan Euclidean) 비교할 있는 기능을 제공합니다.
  •  

단점:

  • 대규모 그리드 또는 복잡한 환경에서는 성능이 저하될 있습니다.
  • 현재 코드는 다양한 휴리스틱이나 알고리즘을 추가하는 제한적일 있습니다.

 

 

 

 

프로젝트를 향후 개선할 있는 방법

  1. 알고리즘의 성능을 향상시키기 위해 다양한 최적화 기법을 적용할 있습니다..
  2. 다양한 휴리스틱 알고리즘을 지원하도록 코드를 리팩토링 있습니다.
  3. 다양한 환경 장애물 구성을 불러올 있는 기능을 추가할 있습니다.
  4. 다양한 알고리즘, 예를 들어 Dijkstra, Greedy Best-First Search, BFS, DFS 등을 비교할 있도록 프로젝트를 확장할 있습니다.

 

 

 

728x90

'인공지능' 카테고리의 다른 글

1.인공지능 소개(인공지능)  (1) 2023.04.04
profile

StudyRepository

@Minseo26262

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!