Skip to content

Commit 440c35e

Browse files
committedJul 13, 2018
Goal 1 of Sprint
1 parent 059c9f5 commit 440c35e

File tree

1 file changed

+1429
-0
lines changed

1 file changed

+1429
-0
lines changed
 

‎Sprint-Challenge/Taxi RL.ipynb

+1,429
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,1429 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 6,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"import gym\n",
10+
"import numpy as np\n",
11+
"import random\n",
12+
"from collections import defaultdict"
13+
]
14+
},
15+
{
16+
"cell_type": "code",
17+
"execution_count": 2,
18+
"metadata": {
19+
"scrolled": true
20+
},
21+
"outputs": [
22+
{
23+
"name": "stdout",
24+
"output_type": "stream",
25+
"text": [
26+
"+---------+\n",
27+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
28+
"| : : : :\u001b[43m \u001b[0m|\n",
29+
"| : : : : |\n",
30+
"| | : | : |\n",
31+
"|\u001b[35mY\u001b[0m| : |B: |\n",
32+
"+---------+\n",
33+
"\n",
34+
"+---------+\n",
35+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
36+
"| : : : :\u001b[43m \u001b[0m|\n",
37+
"| : : : : |\n",
38+
"| | : | : |\n",
39+
"|\u001b[35mY\u001b[0m| : |B: |\n",
40+
"+---------+\n",
41+
" (Pickup)\n",
42+
"+---------+\n",
43+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
44+
"| : : : :\u001b[43m \u001b[0m|\n",
45+
"| : : : : |\n",
46+
"| | : | : |\n",
47+
"|\u001b[35mY\u001b[0m| : |B: |\n",
48+
"+---------+\n",
49+
" (Dropoff)\n",
50+
"+---------+\n",
51+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
52+
"| : : : : |\n",
53+
"| : : : :\u001b[43m \u001b[0m|\n",
54+
"| | : | : |\n",
55+
"|\u001b[35mY\u001b[0m| : |B: |\n",
56+
"+---------+\n",
57+
" (South)\n",
58+
"+---------+\n",
59+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
60+
"| : : : : |\n",
61+
"| : : :\u001b[43m \u001b[0m: |\n",
62+
"| | : | : |\n",
63+
"|\u001b[35mY\u001b[0m| : |B: |\n",
64+
"+---------+\n",
65+
" (West)\n",
66+
"+---------+\n",
67+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
68+
"| : : : : |\n",
69+
"| : :\u001b[43m \u001b[0m: : |\n",
70+
"| | : | : |\n",
71+
"|\u001b[35mY\u001b[0m| : |B: |\n",
72+
"+---------+\n",
73+
" (West)\n",
74+
"+---------+\n",
75+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
76+
"| : : : : |\n",
77+
"| :\u001b[43m \u001b[0m: : : |\n",
78+
"| | : | : |\n",
79+
"|\u001b[35mY\u001b[0m| : |B: |\n",
80+
"+---------+\n",
81+
" (West)\n",
82+
"+---------+\n",
83+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
84+
"| :\u001b[43m \u001b[0m: : : |\n",
85+
"| : : : : |\n",
86+
"| | : | : |\n",
87+
"|\u001b[35mY\u001b[0m| : |B: |\n",
88+
"+---------+\n",
89+
" (North)\n",
90+
"+---------+\n",
91+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
92+
"|\u001b[43m \u001b[0m: : : : |\n",
93+
"| : : : : |\n",
94+
"| | : | : |\n",
95+
"|\u001b[35mY\u001b[0m| : |B: |\n",
96+
"+---------+\n",
97+
" (West)\n",
98+
"+---------+\n",
99+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
100+
"|\u001b[43m \u001b[0m: : : : |\n",
101+
"| : : : : |\n",
102+
"| | : | : |\n",
103+
"|\u001b[35mY\u001b[0m| : |B: |\n",
104+
"+---------+\n",
105+
" (Dropoff)\n",
106+
"+---------+\n",
107+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
108+
"| :\u001b[43m \u001b[0m: : : |\n",
109+
"| : : : : |\n",
110+
"| | : | : |\n",
111+
"|\u001b[35mY\u001b[0m| : |B: |\n",
112+
"+---------+\n",
113+
" (East)\n",
114+
"+---------+\n",
115+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
116+
"| :\u001b[43m \u001b[0m: : : |\n",
117+
"| : : : : |\n",
118+
"| | : | : |\n",
119+
"|\u001b[35mY\u001b[0m| : |B: |\n",
120+
"+---------+\n",
121+
" (Pickup)\n",
122+
"+---------+\n",
123+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
124+
"| : : : : |\n",
125+
"| :\u001b[43m \u001b[0m: : : |\n",
126+
"| | : | : |\n",
127+
"|\u001b[35mY\u001b[0m| : |B: |\n",
128+
"+---------+\n",
129+
" (South)\n",
130+
"+---------+\n",
131+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
132+
"| : : : : |\n",
133+
"| : : : : |\n",
134+
"| |\u001b[43m \u001b[0m: | : |\n",
135+
"|\u001b[35mY\u001b[0m| : |B: |\n",
136+
"+---------+\n",
137+
" (South)\n",
138+
"+---------+\n",
139+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
140+
"| : : : : |\n",
141+
"| : : : : |\n",
142+
"| |\u001b[43m \u001b[0m: | : |\n",
143+
"|\u001b[35mY\u001b[0m| : |B: |\n",
144+
"+---------+\n",
145+
" (Pickup)\n",
146+
"+---------+\n",
147+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
148+
"| : : : : |\n",
149+
"| : : : : |\n",
150+
"| | :\u001b[43m \u001b[0m| : |\n",
151+
"|\u001b[35mY\u001b[0m| : |B: |\n",
152+
"+---------+\n",
153+
" (East)\n",
154+
"+---------+\n",
155+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
156+
"| : : : : |\n",
157+
"| : :\u001b[43m \u001b[0m: : |\n",
158+
"| | : | : |\n",
159+
"|\u001b[35mY\u001b[0m| : |B: |\n",
160+
"+---------+\n",
161+
" (North)\n",
162+
"+---------+\n",
163+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
164+
"| : : : : |\n",
165+
"| : : : : |\n",
166+
"| | :\u001b[43m \u001b[0m| : |\n",
167+
"|\u001b[35mY\u001b[0m| : |B: |\n",
168+
"+---------+\n",
169+
" (South)\n",
170+
"+---------+\n",
171+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
172+
"| : : : : |\n",
173+
"| : :\u001b[43m \u001b[0m: : |\n",
174+
"| | : | : |\n",
175+
"|\u001b[35mY\u001b[0m| : |B: |\n",
176+
"+---------+\n",
177+
" (North)\n",
178+
"+---------+\n",
179+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
180+
"| : : : : |\n",
181+
"| : :\u001b[43m \u001b[0m: : |\n",
182+
"| | : | : |\n",
183+
"|\u001b[35mY\u001b[0m| : |B: |\n",
184+
"+---------+\n",
185+
" (Dropoff)\n",
186+
"+---------+\n",
187+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
188+
"| : :\u001b[43m \u001b[0m: : |\n",
189+
"| : : : : |\n",
190+
"| | : | : |\n",
191+
"|\u001b[35mY\u001b[0m| : |B: |\n",
192+
"+---------+\n",
193+
" (North)\n",
194+
"+---------+\n",
195+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
196+
"| : :\u001b[43m \u001b[0m: : |\n",
197+
"| : : : : |\n",
198+
"| | : | : |\n",
199+
"|\u001b[35mY\u001b[0m| : |B: |\n",
200+
"+---------+\n",
201+
" (Dropoff)\n",
202+
"+---------+\n",
203+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
204+
"| : : : : |\n",
205+
"| : :\u001b[43m \u001b[0m: : |\n",
206+
"| | : | : |\n",
207+
"|\u001b[35mY\u001b[0m| : |B: |\n",
208+
"+---------+\n",
209+
" (South)\n",
210+
"+---------+\n",
211+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
212+
"| : :\u001b[43m \u001b[0m: : |\n",
213+
"| : : : : |\n",
214+
"| | : | : |\n",
215+
"|\u001b[35mY\u001b[0m| : |B: |\n",
216+
"+---------+\n",
217+
" (North)\n",
218+
"+---------+\n",
219+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
220+
"| : :\u001b[43m \u001b[0m: : |\n",
221+
"| : : : : |\n",
222+
"| | : | : |\n",
223+
"|\u001b[35mY\u001b[0m| : |B: |\n",
224+
"+---------+\n",
225+
" (Pickup)\n",
226+
"+---------+\n",
227+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
228+
"| :\u001b[43m \u001b[0m: : : |\n",
229+
"| : : : : |\n",
230+
"| | : | : |\n",
231+
"|\u001b[35mY\u001b[0m| : |B: |\n",
232+
"+---------+\n",
233+
" (West)\n",
234+
"+---------+\n",
235+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
236+
"| : : : : |\n",
237+
"| :\u001b[43m \u001b[0m: : : |\n",
238+
"| | : | : |\n",
239+
"|\u001b[35mY\u001b[0m| : |B: |\n",
240+
"+---------+\n",
241+
" (South)\n",
242+
"+---------+\n",
243+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
244+
"| : : : : |\n",
245+
"|\u001b[43m \u001b[0m: : : : |\n",
246+
"| | : | : |\n",
247+
"|\u001b[35mY\u001b[0m| : |B: |\n",
248+
"+---------+\n",
249+
" (West)\n",
250+
"+---------+\n",
251+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
252+
"| : : : : |\n",
253+
"|\u001b[43m \u001b[0m: : : : |\n",
254+
"| | : | : |\n",
255+
"|\u001b[35mY\u001b[0m| : |B: |\n",
256+
"+---------+\n",
257+
" (Dropoff)\n",
258+
"+---------+\n",
259+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
260+
"| : : : : |\n",
261+
"| : : : : |\n",
262+
"|\u001b[43m \u001b[0m| : | : |\n",
263+
"|\u001b[35mY\u001b[0m| : |B: |\n",
264+
"+---------+\n",
265+
" (South)\n",
266+
"+---------+\n",
267+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
268+
"| : : : : |\n",
269+
"| : : : : |\n",
270+
"|\u001b[43m \u001b[0m| : | : |\n",
271+
"|\u001b[35mY\u001b[0m| : |B: |\n",
272+
"+---------+\n",
273+
" (East)\n",
274+
"+---------+\n",
275+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
276+
"| : : : : |\n",
277+
"| : : : : |\n",
278+
"|\u001b[43m \u001b[0m| : | : |\n",
279+
"|\u001b[35mY\u001b[0m| : |B: |\n",
280+
"+---------+\n",
281+
" (West)\n",
282+
"+---------+\n",
283+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
284+
"| : : : : |\n",
285+
"| : : : : |\n",
286+
"| | : | : |\n",
287+
"|\u001b[35m\u001b[43mY\u001b[0m\u001b[0m| : |B: |\n",
288+
"+---------+\n",
289+
" (South)\n",
290+
"+---------+\n",
291+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
292+
"| : : : : |\n",
293+
"| : : : : |\n",
294+
"|\u001b[43m \u001b[0m| : | : |\n",
295+
"|\u001b[35mY\u001b[0m| : |B: |\n",
296+
"+---------+\n",
297+
" (North)\n",
298+
"+---------+\n",
299+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
300+
"| : : : : |\n",
301+
"| : : : : |\n",
302+
"|\u001b[43m \u001b[0m| : | : |\n",
303+
"|\u001b[35mY\u001b[0m| : |B: |\n",
304+
"+---------+\n",
305+
" (West)\n",
306+
"+---------+\n",
307+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
308+
"| : : : : |\n",
309+
"| : : : : |\n",
310+
"|\u001b[43m \u001b[0m| : | : |\n",
311+
"|\u001b[35mY\u001b[0m| : |B: |\n",
312+
"+---------+\n",
313+
" (Dropoff)\n",
314+
"+---------+\n",
315+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
316+
"| : : : : |\n",
317+
"| : : : : |\n",
318+
"|\u001b[43m \u001b[0m| : | : |\n",
319+
"|\u001b[35mY\u001b[0m| : |B: |\n",
320+
"+---------+\n",
321+
" (West)\n",
322+
"+---------+\n",
323+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
324+
"| : : : : |\n",
325+
"| : : : : |\n",
326+
"|\u001b[43m \u001b[0m| : | : |\n",
327+
"|\u001b[35mY\u001b[0m| : |B: |\n",
328+
"+---------+\n",
329+
" (West)\n",
330+
"+---------+\n",
331+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
332+
"| : : : : |\n",
333+
"| : : : : |\n",
334+
"| | : | : |\n",
335+
"|\u001b[35m\u001b[43mY\u001b[0m\u001b[0m| : |B: |\n",
336+
"+---------+\n",
337+
" (South)\n",
338+
"+---------+\n",
339+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
340+
"| : : : : |\n",
341+
"| : : : : |\n",
342+
"|\u001b[43m \u001b[0m| : | : |\n",
343+
"|\u001b[35mY\u001b[0m| : |B: |\n",
344+
"+---------+\n",
345+
" (North)\n",
346+
"+---------+\n",
347+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
348+
"| : : : : |\n",
349+
"|\u001b[43m \u001b[0m: : : : |\n",
350+
"| | : | : |\n",
351+
"|\u001b[35mY\u001b[0m| : |B: |\n",
352+
"+---------+\n",
353+
" (North)\n",
354+
"+---------+\n",
355+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
356+
"|\u001b[43m \u001b[0m: : : : |\n",
357+
"| : : : : |\n",
358+
"| | : | : |\n",
359+
"|\u001b[35mY\u001b[0m| : |B: |\n",
360+
"+---------+\n",
361+
" (North)\n",
362+
"+---------+\n",
363+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
364+
"| : : : : |\n",
365+
"|\u001b[43m \u001b[0m: : : : |\n",
366+
"| | : | : |\n",
367+
"|\u001b[35mY\u001b[0m| : |B: |\n",
368+
"+---------+\n",
369+
" (South)\n",
370+
"+---------+\n",
371+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
372+
"| : : : : |\n",
373+
"| :\u001b[43m \u001b[0m: : : |\n",
374+
"| | : | : |\n",
375+
"|\u001b[35mY\u001b[0m| : |B: |\n",
376+
"+---------+\n",
377+
" (East)\n",
378+
"+---------+\n",
379+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
380+
"| : : : : |\n",
381+
"| :\u001b[43m \u001b[0m: : : |\n",
382+
"| | : | : |\n",
383+
"|\u001b[35mY\u001b[0m| : |B: |\n",
384+
"+---------+\n",
385+
" (Pickup)\n",
386+
"+---------+\n",
387+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
388+
"| : : : : |\n",
389+
"|\u001b[43m \u001b[0m: : : : |\n",
390+
"| | : | : |\n",
391+
"|\u001b[35mY\u001b[0m| : |B: |\n",
392+
"+---------+\n",
393+
" (West)\n",
394+
"+---------+\n",
395+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
396+
"| : : : : |\n",
397+
"|\u001b[43m \u001b[0m: : : : |\n",
398+
"| | : | : |\n",
399+
"|\u001b[35mY\u001b[0m| : |B: |\n",
400+
"+---------+\n",
401+
" (West)\n",
402+
"+---------+\n",
403+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
404+
"| : : : : |\n",
405+
"| :\u001b[43m \u001b[0m: : : |\n",
406+
"| | : | : |\n",
407+
"|\u001b[35mY\u001b[0m| : |B: |\n",
408+
"+---------+\n",
409+
" (East)\n",
410+
"+---------+\n",
411+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
412+
"| : : : : |\n",
413+
"| :\u001b[43m \u001b[0m: : : |\n",
414+
"| | : | : |\n",
415+
"|\u001b[35mY\u001b[0m| : |B: |\n",
416+
"+---------+\n",
417+
" (Pickup)\n",
418+
"+---------+\n",
419+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
420+
"| : : : : |\n",
421+
"| : :\u001b[43m \u001b[0m: : |\n",
422+
"| | : | : |\n",
423+
"|\u001b[35mY\u001b[0m| : |B: |\n",
424+
"+---------+\n",
425+
" (East)\n",
426+
"+---------+\n",
427+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
428+
"| : : : : |\n",
429+
"| : : : : |\n",
430+
"| | :\u001b[43m \u001b[0m| : |\n",
431+
"|\u001b[35mY\u001b[0m| : |B: |\n",
432+
"+---------+\n",
433+
" (South)\n",
434+
"+---------+\n",
435+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
436+
"| : : : : |\n",
437+
"| : : : : |\n",
438+
"| | : | : |\n",
439+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
440+
"+---------+\n",
441+
" (South)\n",
442+
"+---------+\n",
443+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
444+
"| : : : : |\n",
445+
"| : : : : |\n",
446+
"| | : | : |\n",
447+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
448+
"+---------+\n",
449+
" (Pickup)\n",
450+
"+---------+\n",
451+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
452+
"| : : : : |\n",
453+
"| : : : : |\n",
454+
"| | : | : |\n",
455+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
456+
"+---------+\n",
457+
" (Dropoff)\n",
458+
"+---------+\n",
459+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
460+
"| : : : : |\n",
461+
"| : : : : |\n",
462+
"| | : | : |\n",
463+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
464+
"+---------+\n",
465+
" (Dropoff)\n",
466+
"+---------+\n",
467+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
468+
"| : : : : |\n",
469+
"| : : : : |\n",
470+
"| | : | : |\n",
471+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
472+
"+---------+\n",
473+
" (South)\n",
474+
"+---------+\n",
475+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
476+
"| : : : : |\n",
477+
"| : : : : |\n",
478+
"| | : | : |\n",
479+
"|\u001b[35mY\u001b[0m| :\u001b[43m \u001b[0m|B: |\n",
480+
"+---------+\n",
481+
" (Pickup)\n",
482+
"+---------+\n",
483+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
484+
"| : : : : |\n",
485+
"| : : : : |\n",
486+
"| | :\u001b[43m \u001b[0m| : |\n",
487+
"|\u001b[35mY\u001b[0m| : |B: |\n",
488+
"+---------+\n",
489+
" (North)\n",
490+
"+---------+\n",
491+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
492+
"| : : : : |\n",
493+
"| : : : : |\n",
494+
"| | :\u001b[43m \u001b[0m| : |\n",
495+
"|\u001b[35mY\u001b[0m| : |B: |\n",
496+
"+---------+\n",
497+
" (Pickup)\n",
498+
"+---------+\n",
499+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
500+
"| : : : : |\n",
501+
"| : :\u001b[43m \u001b[0m: : |\n",
502+
"| | : | : |\n",
503+
"|\u001b[35mY\u001b[0m| : |B: |\n",
504+
"+---------+\n",
505+
" (North)\n",
506+
"+---------+\n",
507+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
508+
"| : : : : |\n",
509+
"| : : :\u001b[43m \u001b[0m: |\n",
510+
"| | : | : |\n",
511+
"|\u001b[35mY\u001b[0m| : |B: |\n",
512+
"+---------+\n",
513+
" (East)\n",
514+
"+---------+\n",
515+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
516+
"| : : : : |\n",
517+
"| : : : :\u001b[43m \u001b[0m|\n",
518+
"| | : | : |\n",
519+
"|\u001b[35mY\u001b[0m| : |B: |\n",
520+
"+---------+\n",
521+
" (East)\n",
522+
"+---------+\n",
523+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
524+
"| : : : : |\n",
525+
"| : : : : |\n",
526+
"| | : | :\u001b[43m \u001b[0m|\n",
527+
"|\u001b[35mY\u001b[0m| : |B: |\n",
528+
"+---------+\n",
529+
" (South)\n",
530+
"+---------+\n",
531+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
532+
"| : : : : |\n",
533+
"| : : : :\u001b[43m \u001b[0m|\n",
534+
"| | : | : |\n",
535+
"|\u001b[35mY\u001b[0m| : |B: |\n",
536+
"+---------+\n",
537+
" (North)\n",
538+
"+---------+\n",
539+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
540+
"| : : : :\u001b[43m \u001b[0m|\n",
541+
"| : : : : |\n",
542+
"| | : | : |\n",
543+
"|\u001b[35mY\u001b[0m| : |B: |\n",
544+
"+---------+\n",
545+
" (North)\n",
546+
"+---------+\n",
547+
"|\u001b[34;1mR\u001b[0m: | : :\u001b[43mG\u001b[0m|\n",
548+
"| : : : : |\n",
549+
"| : : : : |\n",
550+
"| | : | : |\n",
551+
"|\u001b[35mY\u001b[0m| : |B: |\n",
552+
"+---------+\n",
553+
" (North)\n",
554+
"+---------+\n",
555+
"|\u001b[34;1mR\u001b[0m: | : :\u001b[43mG\u001b[0m|\n",
556+
"| : : : : |\n",
557+
"| : : : : |\n",
558+
"| | : | : |\n",
559+
"|\u001b[35mY\u001b[0m| : |B: |\n",
560+
"+---------+\n",
561+
" (North)\n",
562+
"+---------+\n",
563+
"|\u001b[34;1mR\u001b[0m: | :\u001b[43m \u001b[0m:G|\n",
564+
"| : : : : |\n",
565+
"| : : : : |\n",
566+
"| | : | : |\n",
567+
"|\u001b[35mY\u001b[0m| : |B: |\n",
568+
"+---------+\n",
569+
" (West)\n",
570+
"+---------+\n",
571+
"|\u001b[34;1mR\u001b[0m: |\u001b[43m \u001b[0m: :G|\n",
572+
"| : : : : |\n",
573+
"| : : : : |\n",
574+
"| | : | : |\n",
575+
"|\u001b[35mY\u001b[0m| : |B: |\n",
576+
"+---------+\n",
577+
" (West)\n",
578+
"+---------+\n",
579+
"|\u001b[34;1mR\u001b[0m: | :\u001b[43m \u001b[0m:G|\n",
580+
"| : : : : |\n",
581+
"| : : : : |\n",
582+
"| | : | : |\n",
583+
"|\u001b[35mY\u001b[0m| : |B: |\n",
584+
"+---------+\n",
585+
" (East)\n",
586+
"+---------+\n",
587+
"|\u001b[34;1mR\u001b[0m: |\u001b[43m \u001b[0m: :G|\n",
588+
"| : : : : |\n",
589+
"| : : : : |\n",
590+
"| | : | : |\n",
591+
"|\u001b[35mY\u001b[0m| : |B: |\n",
592+
"+---------+\n",
593+
" (West)\n",
594+
"+---------+\n",
595+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
596+
"| : :\u001b[43m \u001b[0m: : |\n",
597+
"| : : : : |\n",
598+
"| | : | : |\n",
599+
"|\u001b[35mY\u001b[0m| : |B: |\n",
600+
"+---------+\n",
601+
" (South)\n",
602+
"+---------+\n",
603+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
604+
"| :\u001b[43m \u001b[0m: : : |\n",
605+
"| : : : : |\n",
606+
"| | : | : |\n",
607+
"|\u001b[35mY\u001b[0m| : |B: |\n",
608+
"+---------+\n",
609+
" (West)\n",
610+
"+---------+\n",
611+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
612+
"| :\u001b[43m \u001b[0m: : : |\n",
613+
"| : : : : |\n",
614+
"| | : | : |\n",
615+
"|\u001b[35mY\u001b[0m| : |B: |\n",
616+
"+---------+\n",
617+
" (Dropoff)\n",
618+
"+---------+\n",
619+
"|\u001b[34;1mR\u001b[0m: | : :G|\n",
620+
"| :\u001b[43m \u001b[0m: : : |\n",
621+
"| : : : : |\n",
622+
"| | : | : |\n",
623+
"|\u001b[35mY\u001b[0m| : |B: |\n",
624+
"+---------+\n",
625+
" (Pickup)\n",
626+
"+---------+\n",
627+
"|\u001b[34;1mR\u001b[0m:\u001b[43m \u001b[0m| : :G|\n",
628+
"| : : : : |\n",
629+
"| : : : : |\n",
630+
"| | : | : |\n",
631+
"|\u001b[35mY\u001b[0m| : |B: |\n",
632+
"+---------+\n",
633+
" (North)\n",
634+
"+---------+\n",
635+
"|\u001b[34;1mR\u001b[0m:\u001b[43m \u001b[0m| : :G|\n",
636+
"| : : : : |\n",
637+
"| : : : : |\n",
638+
"| | : | : |\n",
639+
"|\u001b[35mY\u001b[0m| : |B: |\n",
640+
"+---------+\n",
641+
" (East)\n",
642+
"+---------+\n",
643+
"|\u001b[34;1mR\u001b[0m:\u001b[43m \u001b[0m| : :G|\n",
644+
"| : : : : |\n",
645+
"| : : : : |\n",
646+
"| | : | : |\n",
647+
"|\u001b[35mY\u001b[0m| : |B: |\n",
648+
"+---------+\n",
649+
" (Pickup)\n",
650+
"+---------+\n",
651+
"|\u001b[34;1m\u001b[43mR\u001b[0m\u001b[0m: | : :G|\n",
652+
"| : : : : |\n",
653+
"| : : : : |\n",
654+
"| | : | : |\n",
655+
"|\u001b[35mY\u001b[0m| : |B: |\n",
656+
"+---------+\n",
657+
" (West)\n",
658+
"+---------+\n",
659+
"|\u001b[42mR\u001b[0m: | : :G|\n",
660+
"| : : : : |\n",
661+
"| : : : : |\n",
662+
"| | : | : |\n",
663+
"|\u001b[35mY\u001b[0m| : |B: |\n",
664+
"+---------+\n",
665+
" (Pickup)\n",
666+
"+---------+\n",
667+
"|\u001b[42mR\u001b[0m: | : :G|\n",
668+
"| : : : : |\n",
669+
"| : : : : |\n",
670+
"| | : | : |\n",
671+
"|\u001b[35mY\u001b[0m| : |B: |\n",
672+
"+---------+\n",
673+
" (Pickup)\n",
674+
"+---------+\n",
675+
"|\u001b[42mR\u001b[0m: | : :G|\n",
676+
"| : : : : |\n",
677+
"| : : : : |\n",
678+
"| | : | : |\n",
679+
"|\u001b[35mY\u001b[0m| : |B: |\n",
680+
"+---------+\n",
681+
" (Pickup)\n",
682+
"+---------+\n",
683+
"|\u001b[42mR\u001b[0m: | : :G|\n",
684+
"| : : : : |\n",
685+
"| : : : : |\n",
686+
"| | : | : |\n",
687+
"|\u001b[35mY\u001b[0m| : |B: |\n",
688+
"+---------+\n",
689+
" (West)\n",
690+
"+---------+\n",
691+
"|\u001b[42mR\u001b[0m: | : :G|\n",
692+
"| : : : : |\n",
693+
"| : : : : |\n",
694+
"| | : | : |\n",
695+
"|\u001b[35mY\u001b[0m| : |B: |\n",
696+
"+---------+\n",
697+
" (Pickup)\n",
698+
"+---------+\n",
699+
"|\u001b[42mR\u001b[0m: | : :G|\n",
700+
"| : : : : |\n",
701+
"| : : : : |\n",
702+
"| | : | : |\n",
703+
"|\u001b[35mY\u001b[0m| : |B: |\n",
704+
"+---------+\n",
705+
" (Pickup)\n",
706+
"+---------+\n",
707+
"|\u001b[42mR\u001b[0m: | : :G|\n",
708+
"| : : : : |\n",
709+
"| : : : : |\n",
710+
"| | : | : |\n",
711+
"|\u001b[35mY\u001b[0m| : |B: |\n",
712+
"+---------+\n",
713+
" (Pickup)\n",
714+
"+---------+\n",
715+
"|R: | : :G|\n",
716+
"|\u001b[42m_\u001b[0m: : : : |\n",
717+
"| : : : : |\n",
718+
"| | : | : |\n",
719+
"|\u001b[35mY\u001b[0m| : |B: |\n",
720+
"+---------+\n",
721+
" (South)\n",
722+
"+---------+\n",
723+
"|R: | : :G|\n",
724+
"|\u001b[42m_\u001b[0m: : : : |\n",
725+
"| : : : : |\n",
726+
"| | : | : |\n",
727+
"|\u001b[35mY\u001b[0m| : |B: |\n",
728+
"+---------+\n",
729+
" (Pickup)\n",
730+
"+---------+\n",
731+
"|R: | : :G|\n",
732+
"|\u001b[42m_\u001b[0m: : : : |\n",
733+
"| : : : : |\n",
734+
"| | : | : |\n",
735+
"|\u001b[35mY\u001b[0m| : |B: |\n",
736+
"+---------+\n",
737+
" (West)\n",
738+
"+---------+\n",
739+
"|R: | : :G|\n",
740+
"| :\u001b[42m_\u001b[0m: : : |\n",
741+
"| : : : : |\n",
742+
"| | : | : |\n",
743+
"|\u001b[35mY\u001b[0m| : |B: |\n",
744+
"+---------+\n",
745+
" (East)\n",
746+
"+---------+\n",
747+
"|R: | : :G|\n",
748+
"| :\u001b[42m_\u001b[0m: : : |\n",
749+
"| : : : : |\n",
750+
"| | : | : |\n",
751+
"|\u001b[35mY\u001b[0m| : |B: |\n",
752+
"+---------+\n",
753+
" (Dropoff)\n",
754+
"+---------+\n",
755+
"|R: | : :G|\n",
756+
"| :\u001b[42m_\u001b[0m: : : |\n",
757+
"| : : : : |\n",
758+
"| | : | : |\n",
759+
"|\u001b[35mY\u001b[0m| : |B: |\n",
760+
"+---------+\n",
761+
" (Dropoff)\n",
762+
"+---------+\n",
763+
"|R: | : :G|\n",
764+
"| :\u001b[42m_\u001b[0m: : : |\n",
765+
"| : : : : |\n",
766+
"| | : | : |\n",
767+
"|\u001b[35mY\u001b[0m| : |B: |\n",
768+
"+---------+\n",
769+
" (Dropoff)\n",
770+
"+---------+\n",
771+
"|R: | : :G|\n",
772+
"| : : : : |\n",
773+
"| :\u001b[42m_\u001b[0m: : : |\n",
774+
"| | : | : |\n",
775+
"|\u001b[35mY\u001b[0m| : |B: |\n",
776+
"+---------+\n",
777+
" (South)\n",
778+
"+---------+\n",
779+
"|R: | : :G|\n",
780+
"| :\u001b[42m_\u001b[0m: : : |\n",
781+
"| : : : : |\n",
782+
"| | : | : |\n",
783+
"|\u001b[35mY\u001b[0m| : |B: |\n",
784+
"+---------+\n",
785+
" (North)\n",
786+
"+---------+\n",
787+
"|R: | : :G|\n",
788+
"| :\u001b[42m_\u001b[0m: : : |\n",
789+
"| : : : : |\n",
790+
"| | : | : |\n",
791+
"|\u001b[35mY\u001b[0m| : |B: |\n",
792+
"+---------+\n",
793+
" (Dropoff)\n",
794+
"+---------+\n",
795+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
796+
"| : : : : |\n",
797+
"| : : : : |\n",
798+
"| | : | : |\n",
799+
"|\u001b[35mY\u001b[0m| : |B: |\n",
800+
"+---------+\n",
801+
" (North)\n",
802+
"+---------+\n",
803+
"|\u001b[42mR\u001b[0m: | : :G|\n",
804+
"| : : : : |\n",
805+
"| : : : : |\n",
806+
"| | : | : |\n",
807+
"|\u001b[35mY\u001b[0m| : |B: |\n",
808+
"+---------+\n",
809+
" (West)\n",
810+
"+---------+\n",
811+
"|R: | : :G|\n",
812+
"|\u001b[42m_\u001b[0m: : : : |\n",
813+
"| : : : : |\n",
814+
"| | : | : |\n",
815+
"|\u001b[35mY\u001b[0m| : |B: |\n",
816+
"+---------+\n",
817+
" (South)\n",
818+
"+---------+\n",
819+
"|R: | : :G|\n",
820+
"|\u001b[42m_\u001b[0m: : : : |\n",
821+
"| : : : : |\n",
822+
"| | : | : |\n",
823+
"|\u001b[35mY\u001b[0m| : |B: |\n",
824+
"+---------+\n",
825+
" (Dropoff)\n",
826+
"+---------+\n",
827+
"|R: | : :G|\n",
828+
"| : : : : |\n",
829+
"|\u001b[42m_\u001b[0m: : : : |\n",
830+
"| | : | : |\n",
831+
"|\u001b[35mY\u001b[0m| : |B: |\n",
832+
"+---------+\n",
833+
" (South)\n",
834+
"+---------+\n",
835+
"|R: | : :G|\n",
836+
"|\u001b[42m_\u001b[0m: : : : |\n",
837+
"| : : : : |\n",
838+
"| | : | : |\n",
839+
"|\u001b[35mY\u001b[0m| : |B: |\n",
840+
"+---------+\n",
841+
" (North)\n",
842+
"+---------+\n",
843+
"|R: | : :G|\n",
844+
"| :\u001b[42m_\u001b[0m: : : |\n",
845+
"| : : : : |\n",
846+
"| | : | : |\n",
847+
"|\u001b[35mY\u001b[0m| : |B: |\n",
848+
"+---------+\n",
849+
" (East)\n",
850+
"+---------+\n",
851+
"|R: | : :G|\n",
852+
"| :\u001b[42m_\u001b[0m: : : |\n",
853+
"| : : : : |\n",
854+
"| | : | : |\n",
855+
"|\u001b[35mY\u001b[0m| : |B: |\n",
856+
"+---------+\n",
857+
" (Pickup)\n",
858+
"+---------+\n",
859+
"|R: | : :G|\n",
860+
"| : :\u001b[42m_\u001b[0m: : |\n",
861+
"| : : : : |\n",
862+
"| | : | : |\n",
863+
"|\u001b[35mY\u001b[0m| : |B: |\n",
864+
"+---------+\n",
865+
" (East)\n",
866+
"+---------+\n",
867+
"|R: | : :G|\n",
868+
"| : : : : |\n",
869+
"| : :\u001b[42m_\u001b[0m: : |\n",
870+
"| | : | : |\n",
871+
"|\u001b[35mY\u001b[0m| : |B: |\n",
872+
"+---------+\n",
873+
" (South)\n",
874+
"+---------+\n",
875+
"|R: | : :G|\n",
876+
"| : : : : |\n",
877+
"| : :\u001b[42m_\u001b[0m: : |\n",
878+
"| | : | : |\n",
879+
"|\u001b[35mY\u001b[0m| : |B: |\n",
880+
"+---------+\n",
881+
" (Dropoff)\n",
882+
"+---------+\n",
883+
"|R: | : :G|\n",
884+
"| : : : : |\n",
885+
"| :\u001b[42m_\u001b[0m: : : |\n",
886+
"| | : | : |\n",
887+
"|\u001b[35mY\u001b[0m| : |B: |\n",
888+
"+---------+\n",
889+
" (West)\n",
890+
"+---------+\n",
891+
"|R: | : :G|\n",
892+
"| : : : : |\n",
893+
"| : :\u001b[42m_\u001b[0m: : |\n",
894+
"| | : | : |\n",
895+
"|\u001b[35mY\u001b[0m| : |B: |\n",
896+
"+---------+\n",
897+
" (East)\n",
898+
"+---------+\n",
899+
"|R: | : :G|\n",
900+
"| : : : : |\n",
901+
"| : : :\u001b[42m_\u001b[0m: |\n",
902+
"| | : | : |\n",
903+
"|\u001b[35mY\u001b[0m| : |B: |\n",
904+
"+---------+\n",
905+
" (East)\n",
906+
"+---------+\n",
907+
"|R: | : :G|\n",
908+
"| : : : : |\n",
909+
"| : : :\u001b[42m_\u001b[0m: |\n",
910+
"| | : | : |\n",
911+
"|\u001b[35mY\u001b[0m| : |B: |\n",
912+
"+---------+\n",
913+
" (Dropoff)\n",
914+
"+---------+\n",
915+
"|R: | : :G|\n",
916+
"| : : : : |\n",
917+
"| : : : : |\n",
918+
"| | : |\u001b[42m_\u001b[0m: |\n",
919+
"|\u001b[35mY\u001b[0m| : |B: |\n",
920+
"+---------+\n",
921+
" (South)\n",
922+
"+---------+\n",
923+
"|R: | : :G|\n",
924+
"| : : : : |\n",
925+
"| : : : : |\n",
926+
"| | : |\u001b[42m_\u001b[0m: |\n",
927+
"|\u001b[35mY\u001b[0m| : |B: |\n",
928+
"+---------+\n",
929+
" (Dropoff)\n",
930+
"+---------+\n",
931+
"|R: | : :G|\n",
932+
"| : : : : |\n",
933+
"| : : :\u001b[42m_\u001b[0m: |\n",
934+
"| | : | : |\n",
935+
"|\u001b[35mY\u001b[0m| : |B: |\n",
936+
"+---------+\n",
937+
" (North)\n",
938+
"+---------+\n",
939+
"|R: | : :G|\n",
940+
"| : : : : |\n",
941+
"| : : : : |\n",
942+
"| | : |\u001b[42m_\u001b[0m: |\n",
943+
"|\u001b[35mY\u001b[0m| : |B: |\n",
944+
"+---------+\n",
945+
" (South)\n",
946+
"+---------+\n",
947+
"|R: | : :G|\n",
948+
"| : : : : |\n",
949+
"| : : : : |\n",
950+
"| | : | :\u001b[42m_\u001b[0m|\n",
951+
"|\u001b[35mY\u001b[0m| : |B: |\n",
952+
"+---------+\n",
953+
" (East)\n",
954+
"+---------+\n",
955+
"|R: | : :G|\n",
956+
"| : : : : |\n",
957+
"| : : : : |\n",
958+
"| | : | :\u001b[42m_\u001b[0m|\n",
959+
"|\u001b[35mY\u001b[0m| : |B: |\n",
960+
"+---------+\n",
961+
" (East)\n",
962+
"+---------+\n",
963+
"|R: | : :G|\n",
964+
"| : : : : |\n",
965+
"| : : : : |\n",
966+
"| | : |\u001b[42m_\u001b[0m: |\n",
967+
"|\u001b[35mY\u001b[0m| : |B: |\n",
968+
"+---------+\n",
969+
" (West)\n",
970+
"+---------+\n",
971+
"|R: | : :G|\n",
972+
"| : : : : |\n",
973+
"| : : : : |\n",
974+
"| | : | :\u001b[42m_\u001b[0m|\n",
975+
"|\u001b[35mY\u001b[0m| : |B: |\n",
976+
"+---------+\n",
977+
" (East)\n",
978+
"+---------+\n",
979+
"|R: | : :G|\n",
980+
"| : : : : |\n",
981+
"| : : : : |\n",
982+
"| | : |\u001b[42m_\u001b[0m: |\n",
983+
"|\u001b[35mY\u001b[0m| : |B: |\n",
984+
"+---------+\n",
985+
" (West)\n",
986+
"+---------+\n",
987+
"|R: | : :G|\n",
988+
"| : : : : |\n",
989+
"| : : : : |\n",
990+
"| | : | :\u001b[42m_\u001b[0m|\n",
991+
"|\u001b[35mY\u001b[0m| : |B: |\n",
992+
"+---------+\n",
993+
" (East)\n",
994+
"+---------+\n",
995+
"|R: | : :G|\n",
996+
"| : : : : |\n",
997+
"| : : : :\u001b[42m_\u001b[0m|\n",
998+
"| | : | : |\n",
999+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1000+
"+---------+\n",
1001+
" (North)\n",
1002+
"+---------+\n",
1003+
"|R: | : :G|\n",
1004+
"| : : : : |\n",
1005+
"| : : : :\u001b[42m_\u001b[0m|\n",
1006+
"| | : | : |\n",
1007+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1008+
"+---------+\n",
1009+
" (East)\n",
1010+
"+---------+\n",
1011+
"|R: | : :G|\n",
1012+
"| : : : : |\n",
1013+
"| : : :\u001b[42m_\u001b[0m: |\n",
1014+
"| | : | : |\n",
1015+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1016+
"+---------+\n",
1017+
" (West)\n",
1018+
"+---------+\n",
1019+
"|R: | : :G|\n",
1020+
"| : : : : |\n",
1021+
"| : :\u001b[42m_\u001b[0m: : |\n",
1022+
"| | : | : |\n",
1023+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1024+
"+---------+\n",
1025+
" (West)\n",
1026+
"+---------+\n",
1027+
"|R: | : :G|\n",
1028+
"| : : : : |\n",
1029+
"| :\u001b[42m_\u001b[0m: : : |\n",
1030+
"| | : | : |\n",
1031+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1032+
"+---------+\n",
1033+
" (West)\n",
1034+
"+---------+\n",
1035+
"|R: | : :G|\n",
1036+
"| : : : : |\n",
1037+
"| : :\u001b[42m_\u001b[0m: : |\n",
1038+
"| | : | : |\n",
1039+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1040+
"+---------+\n",
1041+
" (East)\n",
1042+
"+---------+\n",
1043+
"|R: | : :G|\n",
1044+
"| : : : : |\n",
1045+
"| :\u001b[42m_\u001b[0m: : : |\n",
1046+
"| | : | : |\n",
1047+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1048+
"+---------+\n",
1049+
" (West)\n",
1050+
"+---------+\n",
1051+
"|R: | : :G|\n",
1052+
"| : : : : |\n",
1053+
"| :\u001b[42m_\u001b[0m: : : |\n",
1054+
"| | : | : |\n",
1055+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1056+
"+---------+\n",
1057+
" (Pickup)\n",
1058+
"+---------+\n",
1059+
"|R: | : :G|\n",
1060+
"| :\u001b[42m_\u001b[0m: : : |\n",
1061+
"| : : : : |\n",
1062+
"| | : | : |\n",
1063+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1064+
"+---------+\n",
1065+
" (North)\n",
1066+
"+---------+\n",
1067+
"|R: | : :G|\n",
1068+
"| : :\u001b[42m_\u001b[0m: : |\n",
1069+
"| : : : : |\n",
1070+
"| | : | : |\n",
1071+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1072+
"+---------+\n",
1073+
" (East)\n",
1074+
"+---------+\n",
1075+
"|R: | : :G|\n",
1076+
"| :\u001b[42m_\u001b[0m: : : |\n",
1077+
"| : : : : |\n",
1078+
"| | : | : |\n",
1079+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1080+
"+---------+\n",
1081+
" (West)\n",
1082+
"+---------+\n",
1083+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
1084+
"| : : : : |\n",
1085+
"| : : : : |\n",
1086+
"| | : | : |\n",
1087+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1088+
"+---------+\n",
1089+
" (North)\n",
1090+
"+---------+\n",
1091+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
1092+
"| : : : : |\n",
1093+
"| : : : : |\n",
1094+
"| | : | : |\n",
1095+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1096+
"+---------+\n",
1097+
" (East)\n",
1098+
"+---------+\n",
1099+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
1100+
"| : : : : |\n",
1101+
"| : : : : |\n",
1102+
"| | : | : |\n",
1103+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1104+
"+---------+\n",
1105+
" (North)\n",
1106+
"+---------+\n",
1107+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
1108+
"| : : : : |\n",
1109+
"| : : : : |\n",
1110+
"| | : | : |\n",
1111+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1112+
"+---------+\n",
1113+
" (Pickup)\n",
1114+
"+---------+\n",
1115+
"|R:\u001b[42m_\u001b[0m| : :G|\n",
1116+
"| : : : : |\n",
1117+
"| : : : : |\n",
1118+
"| | : | : |\n",
1119+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1120+
"+---------+\n",
1121+
" (East)\n",
1122+
"+---------+\n",
1123+
"|\u001b[42mR\u001b[0m: | : :G|\n",
1124+
"| : : : : |\n",
1125+
"| : : : : |\n",
1126+
"| | : | : |\n",
1127+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1128+
"+---------+\n",
1129+
" (West)\n",
1130+
"+---------+\n",
1131+
"|R: | : :G|\n",
1132+
"|\u001b[42m_\u001b[0m: : : : |\n",
1133+
"| : : : : |\n",
1134+
"| | : | : |\n",
1135+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1136+
"+---------+\n",
1137+
" (South)\n",
1138+
"+---------+\n",
1139+
"|R: | : :G|\n",
1140+
"|\u001b[42m_\u001b[0m: : : : |\n",
1141+
"| : : : : |\n",
1142+
"| | : | : |\n",
1143+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1144+
"+---------+\n",
1145+
" (West)\n",
1146+
"+---------+\n",
1147+
"|R: | : :G|\n",
1148+
"| :\u001b[42m_\u001b[0m: : : |\n",
1149+
"| : : : : |\n",
1150+
"| | : | : |\n",
1151+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1152+
"+---------+\n",
1153+
" (East)\n",
1154+
"+---------+\n",
1155+
"|R: | : :G|\n",
1156+
"|\u001b[42m_\u001b[0m: : : : |\n",
1157+
"| : : : : |\n",
1158+
"| | : | : |\n",
1159+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1160+
"+---------+\n",
1161+
" (West)\n",
1162+
"+---------+\n",
1163+
"|R: | : :G|\n",
1164+
"| : : : : |\n",
1165+
"|\u001b[42m_\u001b[0m: : : : |\n",
1166+
"| | : | : |\n",
1167+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1168+
"+---------+\n",
1169+
" (South)\n",
1170+
"+---------+\n",
1171+
"|R: | : :G|\n",
1172+
"| : : : : |\n",
1173+
"| : : : : |\n",
1174+
"|\u001b[42m_\u001b[0m| : | : |\n",
1175+
"|\u001b[35mY\u001b[0m| : |B: |\n",
1176+
"+---------+\n",
1177+
" (South)\n",
1178+
"+---------+\n",
1179+
"|R: | : :G|\n",
1180+
"| : : : : |\n",
1181+
"| : : : : |\n",
1182+
"| | : | : |\n",
1183+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1184+
"+---------+\n",
1185+
" (South)\n",
1186+
"+---------+\n",
1187+
"|R: | : :G|\n",
1188+
"| : : : : |\n",
1189+
"| : : : : |\n",
1190+
"| | : | : |\n",
1191+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1192+
"+---------+\n",
1193+
" (West)\n",
1194+
"+---------+\n",
1195+
"|R: | : :G|\n",
1196+
"| : : : : |\n",
1197+
"| : : : : |\n",
1198+
"| | : | : |\n",
1199+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1200+
"+---------+\n",
1201+
" (East)\n",
1202+
"+---------+\n",
1203+
"|R: | : :G|\n",
1204+
"| : : : : |\n",
1205+
"| : : : : |\n",
1206+
"| | : | : |\n",
1207+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1208+
"+---------+\n",
1209+
" (West)\n",
1210+
"+---------+\n",
1211+
"|R: | : :G|\n",
1212+
"| : : : : |\n",
1213+
"| : : : : |\n",
1214+
"| | : | : |\n",
1215+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1216+
"+---------+\n",
1217+
" (South)\n",
1218+
"+---------+\n",
1219+
"|R: | : :G|\n",
1220+
"| : : : : |\n",
1221+
"| : : : : |\n",
1222+
"| | : | : |\n",
1223+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1224+
"+---------+\n",
1225+
" (Pickup)\n",
1226+
"+---------+\n",
1227+
"|R: | : :G|\n",
1228+
"| : : : : |\n",
1229+
"| : : : : |\n",
1230+
"| | : | : |\n",
1231+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1232+
"+---------+\n",
1233+
" (South)\n",
1234+
"+---------+\n",
1235+
"|R: | : :G|\n",
1236+
"| : : : : |\n",
1237+
"| : : : : |\n",
1238+
"| | : | : |\n",
1239+
"|\u001b[35m\u001b[42mY\u001b[0m\u001b[0m| : |B: |\n",
1240+
"+---------+\n",
1241+
" (Dropoff)\n",
1242+
"Total reward: -472\n"
1243+
]
1244+
}
1245+
],
1246+
"source": [
1247+
"# Random agent - not very good result\n",
1248+
"env = gym.make('Taxi-v2')\n",
1249+
"state = env.reset()\n",
1250+
"env.render()\n",
1251+
"\n",
1252+
"total_reward = 0\n",
1253+
"done = False\n",
1254+
"while not done:\n",
1255+
" state, reward, done, info = env.step(env.action_space.sample())\n",
1256+
" total_reward += reward\n",
1257+
" env.render()\n",
1258+
" \n",
1259+
"print('Total reward:', total_reward)"
1260+
]
1261+
},
1262+
{
1263+
"cell_type": "code",
1264+
"execution_count": 3,
1265+
"metadata": {},
1266+
"outputs": [
1267+
{
1268+
"name": "stdout",
1269+
"output_type": "stream",
1270+
"text": [
1271+
"Average score over time: -386.813\n"
1272+
]
1273+
}
1274+
],
1275+
"source": [
1276+
"episodes = 1000\n",
1277+
"rewards = []\n",
1278+
"max_steps = 99\n",
1279+
"\n",
1280+
"for episode in range(episodes):\n",
1281+
" state = env.reset() # Assuming Random Agent code above\n",
1282+
" total_rewards = 0\n",
1283+
" \n",
1284+
" for step in range(max_steps):\n",
1285+
" action = env.action_space.sample() # TODO Add policy here!!! Goal 1 - Beat Random\n",
1286+
" state, reward, done, info = env.step(env.action_space.sample())\n",
1287+
" total_rewards += reward\n",
1288+
" if done:\n",
1289+
" break\n",
1290+
" rewards.append(total_rewards)\n",
1291+
" \n",
1292+
"print('Average score over time:', sum(rewards) / episodes)\n"
1293+
]
1294+
},
1295+
{
1296+
"cell_type": "code",
1297+
"execution_count": 7,
1298+
"metadata": {},
1299+
"outputs": [
1300+
{
1301+
"name": "stdout",
1302+
"output_type": "stream",
1303+
"text": [
1304+
"defaultdict(<function <lambda> at 0x7f2bf6803730>, {})\n"
1305+
]
1306+
}
1307+
],
1308+
"source": [
1309+
"qtable_dict = defaultdict(lambda: np.zeros(6)) # array of actions\n",
1310+
"print(qtable_dict)"
1311+
]
1312+
},
1313+
{
1314+
"cell_type": "code",
1315+
"execution_count": 8,
1316+
"metadata": {},
1317+
"outputs": [],
1318+
"source": [
1319+
"total_episodes = 100000 # Total episodes\n",
1320+
"learning_rate = 0.1 # Learning rate\n",
1321+
"max_steps = 99 # Max steps per episode\n",
1322+
"gamma = 0.01 # Discounting rate\n",
1323+
"\n",
1324+
"# Exploration parameters\n",
1325+
"epsilon = 1.0 # Exploration rate\n",
1326+
"max_epsilon = 1.0 # Exploration probability at start\n",
1327+
"min_epsilon = 0.01 # Minimum exploration probability \n",
1328+
"decay_rate = 0.01 # Exponential decay rate for exploration prob"
1329+
]
1330+
},
1331+
{
1332+
"cell_type": "code",
1333+
"execution_count": 14,
1334+
"metadata": {},
1335+
"outputs": [
1336+
{
1337+
"name": "stdout",
1338+
"output_type": "stream",
1339+
"text": [
1340+
"Score over time: -68.47119\n"
1341+
]
1342+
}
1343+
],
1344+
"source": [
1345+
"# List of rewards\n",
1346+
"rewards = []\n",
1347+
"\n",
1348+
"# Learn through the episodes\n",
1349+
"for episode in range(total_episodes):\n",
1350+
" # Reset the environment\n",
1351+
" state = env.reset()\n",
1352+
" done = False\n",
1353+
" total_rewards = 0\n",
1354+
" \n",
1355+
" for step in range(max_steps):\n",
1356+
" \n",
1357+
" # Action selection - decide if we explore or exploit\n",
1358+
" if random.uniform(0, 1) < epsilon:\n",
1359+
" # Time to explore!\n",
1360+
" action = env.action_space.sample()\n",
1361+
" else:\n",
1362+
" # Exploit based on best available rewards\n",
1363+
" action = np.argmax(qtable_dict[state])\n",
1364+
" \n",
1365+
" # Take the action, observe the outcome and reward\n",
1366+
" new_state, reward, done, info = env.step(action)\n",
1367+
" \n",
1368+
" \n",
1369+
" # Update Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)]\n",
1370+
" # qtable[new_state,:] : all the actions we can take from new state\n",
1371+
" # port code from blackjack game if not using qtable_dict\n",
1372+
" \n",
1373+
" \n",
1374+
" # Update the qtable with new expected rewards\n",
1375+
" qtable_dict[state][action] += (learning_rate *\n",
1376+
" (reward + gamma *\n",
1377+
" (np.max(qtable_dict[new_state]) -\n",
1378+
" np.max(qtable_dict[state]))))\n",
1379+
" \n",
1380+
" \n",
1381+
" total_rewards += reward\n",
1382+
" state = new_state\n",
1383+
" if done:\n",
1384+
" break\n",
1385+
" \n",
1386+
" # Reduce epsilon (explore less)\n",
1387+
" epsilon = (min_epsilon +\n",
1388+
" (max_epsilon - min_epsilon) * np.exp(-decay_rate * episode))\n",
1389+
" rewards.append(total_rewards)\n",
1390+
"\n",
1391+
"print('Score over time:', sum(rewards) / total_episodes)"
1392+
]
1393+
}
1394+
],
1395+
"metadata": {
1396+
"kernelspec": {
1397+
"display_name": "Python 3",
1398+
"language": "python",
1399+
"name": "python3"
1400+
},
1401+
"language_info": {
1402+
"codemirror_mode": {
1403+
"name": "ipython",
1404+
"version": 3
1405+
},
1406+
"file_extension": ".py",
1407+
"mimetype": "text/x-python",
1408+
"name": "python",
1409+
"nbconvert_exporter": "python",
1410+
"pygments_lexer": "ipython3",
1411+
"version": "3.6.5"
1412+
},
1413+
"toc": {
1414+
"base_numbering": 1,
1415+
"nav_menu": {},
1416+
"number_sections": true,
1417+
"sideBar": true,
1418+
"skip_h1_title": false,
1419+
"title_cell": "Table of Contents",
1420+
"title_sidebar": "Contents",
1421+
"toc_cell": false,
1422+
"toc_position": {},
1423+
"toc_section_display": true,
1424+
"toc_window_display": false
1425+
}
1426+
},
1427+
"nbformat": 4,
1428+
"nbformat_minor": 2
1429+
}

0 commit comments

Comments
 (0)
Please sign in to comment.