-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpseudo.txt
More file actions
153 lines (110 loc) · 5.05 KB
/
pseudo.txt
File metadata and controls
153 lines (110 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<배차 알고리즘>
--------------------공통과정--------------------
1. 예약 정보 가져오기
2. 서비스 유형 판단 후 추가시간 X 판단
// 3. 이용 가능한 차량 목록 L1 가져오기
4. 유형별로 조건 확인하면서 배차
5. 배차 가능 -> 차 id 반환 / 배차 불가능 -> "no dispatch" 반환
-----------------------------------------------
case1. 편도(자택 -> 병원)
a1 = 자택 -> 병원 예상 소요시간 //20분
= tmap(자택 -> 병원) + 20 + X
-> GetEstimatedTime
b1 = 픽업 장소에 도착해야 되는 시간(must) //08:00:00
= 희망 병원 도착 시간 - 예상 소요 시간
-> GetPickupTime
차량 목록 L1을 가져와(L1 == (여유시작시간 < b1 && 여유시간 > a1))
L1 중에서 c1 계산
c1 = 차가 이전 예약을 마친 장소에서 픽업 장소까지의 예상 도착 시간 //08:00:00
= tmap(이전예약->현재 예약 픽업 장소)
-> GetPrevArrivalTime
b1과 c1(array) 비교 -> if(b1>c1) {L2에 삽입}
d1 = 다음 예약으로 출발해야 하는 시간 //08:00:00
= tmap(현재 예약 드롭 장소 -> 다음 예약 픽업 장소)
-> GetDispatchAvailableCar
if(희망병원도착시간<d1)
배차 가능 -> 차량 목록 L3에 삽입
else
배차 불가
차량 목록 L3 중, 자택과 가장 가까운 곳에 있는 최적 차량 선택 => dispatch
-> 이때 거리는 새로 구하지 않고 c1을 구할 때 계산
case2. 편도(병원 -> 자택)
a2 = 병원 -> 자택 예상 소요시간
= tmap(현재 예약자의 병원 -> 자택) + 20 + X
-> GetEstimatedTime
b2 = 병원에 도착해야 되는 시간(must)
= 희망 병원 출발 시간 => hos_dep_time
c2 = 차가 이전 예약을 마친 장소에서 병원까지의 예상 도착 시간
= tmap(이전예약 -> 현재 예약 병원)
-> GetPrevArrivalTime
b2과 c2(array) 비교 -> if(b2>c2) {L2에 삽입}
d2 = 다음 예약으로 출발해야 하는 시간
= tmap(현재 예약 드롭 장소 -> 다음 예약 픽업 장소)
-> GetDispatchAvailableCar
if(희망 병원 출발 시간 + a2 < d2)
배차 가능 -> 차량 목록 L3에 삽입
else
배차 불가
차량 목록 L3 중, 병원과 가장 가까운 곳에 있는 최적 차량 선택
case3. 왕복 1시간 이하
a3 = 자택 -> 병원 예상 소요시간
= tmap(자택->병원) + 20 + X
-> GetEstimatedTime
b3 = 픽업 장소에 도착해야 되는 시간(must)
= 희망 병원 도착 시간 - 예상 소요 시간
-> GetPickupTime
c3 = 차가 이전 예약을 마친 장소에서 픽업 장소까지의 예상 도착 시간
= tmap(이전예약->현재 예약 픽업 장소) + 20
-> GetPrevArrivalTime
if(b3>c3)
배차 가능 -> 차량 목록 L2에 삽입
d3 = 병원 -> 자택 예상 소요시간
= tmap(현재 예약자의 병원 -> 자택) + 20 + X
-> GetEstimatedTime
f3 = 다음 예약으로 출발해야 하는 시간
= tmap(현재 예약 드롭 장소 -> 다음 예약 픽업 장소)
-> GetDispatchAvailableCar
if(희망 병원 출발 시간 + d3 < f3)
배차 가능 -> 차량 목록 L3에 삽입
else
배차 불가
차량 목록 L3 중, 자택과 가장 가까운 곳에 있는 최적 차량 선택
case4. 왕복 + 동행 2시간 이상
a4 = 자택 -> 병원 예상 소요시간
= tmap(자택 -> 병원) + 20 + X
-> GetEstimatedTime
b4 = 픽업 장소에 도착해야 되는 시간(must)
= 희망 병원 도착 시간 - 예상 소요 시간
-> GetPickupTime
c4 = 차가 이전 예약을 마친 장소에서 픽업 장소까지의 예상 도착 시간
= tmap(이전예약->현재 예약 픽업 장소) + 20
-> GetPrevArrivalTime
b4과 c4(array) 비교 -> if(b4>c4) {L2에 삽입}
d4 = 다음 예약으로 출발해야 하는 시간
= tmap(현재 예약 병원 드롭 장소 -> 다음 예약 픽업 장소)
-> GetDispatchAvailableCar
if(희망 병원 도착 시간 < d4)
배차 가능 -> 차량 목록 L3에 삽입
else
배차 불가
차량 목록 L3 중, 자택과 가장 가까운 곳에 있는 최적 차량 선택 => dispatch1
-> 이때 거리는 새로 구하지 않고 c4을 구할 때 계산
e4 = 병원 -> 자택 예상 소요시간
= tmap(현재 예약자의 병원 -> 자택) + 20 + X
-> GetEstimatedTime
f4 = 병원에 도착해야 되는 시간(must)
= 희망 병원 출발 시간
=> hos_dep_time
g4 = 차가 이전 예약을 마친 장소에서 병원까지의 예상 도착 시간
= tmap(이전예약 -> 현재 예약 병원) + 20
-> GetPrevArrivalTime
f4과 g4(array) 비교 -> if(f4>g4) {L2에 삽입}
h4 = 다음 예약으로 출발해야 하는 시간
= tmap(현재 예약 드롭 장소 -> 다음 예약 픽업 장소)
-> GetDispatchAvailableCar
if(희망 병원 출발 시간 + e4 < h4)
배차 가능 -> 차량 목록 L3에 삽입
else
배차 불가
차량 목록 L3 중, 병원과 가장 가까운 곳에 있는 최적 차량 선택 => dispatch2
dispatch1, dispatch2에 값이 존재하면 배차가능!