해당 프로젝트는 학사 졸업과제입니다.
만약 택시에 동승이 가능하다면? 고객 수, 합승가능, 지도맵에 따라 가장 효율적인 택시의 수를 분석할 수 있습니다.
- 참여인원 : 3인 프로젝트(팀장 역할)
- 기간 : 2020년 02월 ~ 2020년 06월(4개월)
- 나의 역할
- ✍️ Pyqt5와 Qtdesigner_tool을 사용하여 Mainwindow와 Subwindow, Grid map User Interface 제작
- ✍️ BFS & DFS 알고리즘을 제작하여 고객 생성시 근처 차량 클래스의 값을 비교 및 검색, 최적의 결과 도출
- ✍️ map의 개수를 10개로 제한하고 편의를 위해 각각의 map정보를 txt로 받아와 변환, 가공하여 Map에 저장
- ✍️ Grid map에 state 별로 차량 및 고객, 도로 표시함수 제작
- Github : https://github.com/ghkdqhrbals/GraduateProject
- 과제 발표자료 : 주행시뮬레이터.pdf
1. 과제 진행
1. 목표
자동 배차 및 주행경로 탐색 알고리즘 시뮬레이터를 제작한다. 그리고 택시와 고객간 최적의 비율을 제시한다.
- 사용자가 배차를 요청하면 자동으로 주변의 차를 배차하고 목적지까지 주행하는 경로를 나타내는 알고리즘을 구상하고, 이를 테스트하는 시뮬레이터를 만든다
- 차량의 수, 고객의 수, 합승여부 등의 조건이 바뀔 때 어떤 알고리즘이 효율적인지 결과를 보여준다.
2. 설계 상세화 및 사용 기술
- PyQt5의 Qtdesign 툴을 사용하여 UI를 만든다.
- 최단 경로는 다익스트라 알고리즘을 이용해 탐색한다.
- 자동차와 사용자가 움직이는 동선을 맵에 표시한다.
- BFS를 사용하여 사용자 근처의 자동차를 구한다.
- 맵 클래스를 통해 현재 상태를 파악한다.
- car과 customer 클래스를 만들어 알고리즘에 필요한 정보들을 저장한다.
- 여러가지 조건을 설정할 수 있도록 하고 어떤 조건일 때 가장 효율적인지 판단할 수 있도록 결과를 표시한다.
- 다음과 같은 조건을 가진 알고리즘을 시뮬레이션 할 수 있다. ◦ 합승 불가능 (1 : 1 배치) ◦ 합승 가능 (1 : N 배치, 먼저 탑승한 인원 먼저 처리) ◦ 합승 시 최단 경로 수정 (1 : N 배치, 목적지가 가까운 순으로 처리)
- 지도 상 경로의 가중치는 1로 일반화한다.
- 10개의 맵을 text파일로 생성해 읽어올 수 있다.
- 10개의 콜 시나리오를 만들고, 이를 바탕으로 테스트를 수행한다.
- 차량 총 이동거리, 고객의 평균 대기시간, 이동시간을 알고리즘별로 종합하여 화면에 표시한다.
- 고객 생성 시 근처 차량이 없을 때, 고객의 콜을 취소한다.
3. 수정 사항
- 맵 생성 함수 수정 여러 알고리즘에서 변수를 바꾸며 시뮬레이션을 수행할 때 고정된 환경을 만들 수 있도록 기존에 무작위로 생성되던 맵을 txt 파일로 만든 뒤 읽어오는 방식으로 수정했다.
- 합승 알고리즘 추가 기존에는 합승 조건을 고려하지 않고 차량과 고객을 1 : 1 대응만을 처리하는 알고리즘만 존재했지만, 합승 조건을 고려하는 새로운 알고리즘이 추가됐다.
- 시뮬레이션 결과 표시 기존에는 시간경과 버튼을 통해 차량과 사람이 어떤 식으로 움직이는지 나타냈다. 알고리즘이 추가되면서 알고리즘 별로 시뮬레이션 결과를 비교할 수 있도록 고객의 대기 시간, 목적지까지 걸린 시간, 차량의 이동 거리 등을 결과에 표시하도록 수정했다.
- UI 수정 변경 전 UI는 변수 입력이 불가능하고 시간에 따른 변화를 관찰만 할 수 있었다. 변경 후 UI는 메인 윈도우와 서브 윈도우로 나뉘었다. 메인 윈도우는 여러가지 변수나 원하는 알고리즘을 입력할 수 있고, 시뮬레이션 과정 및 결과를 보여주는 서브 윈도우에는 한번에 시뮬레이션을 완료할 수 있도록 skip 버튼을 추가했다.
4. 사용 알고리즘
- 고객 발생 처리 함수
- 시간 경과 함수
- BFS 함수
- 고객 클래스 관리
- 콜 시나리오 생성
- 맵 생성
2. 분석 결과
차량 300대 고정 (차 검색 거리 5)
고객 수 | 50 | 100 | 200 | 300 | 400 | 500 |
---|---|---|---|---|---|---|
차량 이동 거리 | 788 | 1470 | 2998 | 4677 | 6474 | 7778 |
평균 대기 시간 | 1.88 | 2.18 | 2.34 | 2.71 | 3.00 | 3.13 |
평균 이동 시간 | 14.92 | 13.84 | 13.99 | 14.39 | 14.68 | 14.01 |
차량 300대 고정 (차 검색 거리 5)
고객 수 | 600 | 700 | 800 | 1000 |
---|---|---|---|---|
차량 이동 거리 | 9618 | 11189 | 12665 | 13913 |
평균 대기 시간 | 3.04 | 3.30 | 3.24 | 3.53 |
평균 이동 시간 | 14.66 | 14.48 | 14.30 | 13.91 |
고객 500명 고정 (차 검색 거리 5)
차량 수 | 50 | 100 | 200 | 300 | 400 | 500 | 1000 |
---|---|---|---|---|---|---|---|
차량 이동 거리 | 7971 | 8131 | 7855 | 7900 | 7710 | 7591 | 6748 |
평균 대기 시간 | 4.31 | 3.98 | 3.51 | 3.00 | 2.74 | 2.42 | 1.56 |
평균 이동 시간 | 14.19 | 14.19 | 13.88 | 14.42 | 14.21 | 14.21 | 14.33 |
비용 계산
- 비용계산식
- 합승일때 :
완료고객
((비합승시 이동거리
)(money
-sale
))-1L당 원
*합승시이동거리
- 비합승 :
완료고객
((비합승시 이동거리
)money
)-1L당 원
*이동거리
- 합승일때 :
- sale = 1원
- 2020년 6월 13일자 부산 기준 1L 당 주유가격 : 1303원 현대차 i30 복합 연비 기준 : 17km/1L
- 1km당 : 76.64원 소모로 계산
3. 최종 분석 결과
- 비합승 시, 차량 수가 고객의 10%일 때, 택시 한 대당 이익이 가장 크다.
- 합승 시, 차량 수가 총 고객의 5%일 때, 택시 한 대당 이익이 가장 크다.
- 차량 수가 총 고객의 2%일 때, 사람이 급증하는 시간에 비합승 대비 합승 효율 이 가장 크다.